diff --git a/dbus/org.deepin.dde.Application1.Manager.xml b/dbus/org.deepin.dde.Application1.Manager.xml index eac83e9..f6b7ded 100644 --- a/dbus/org.deepin.dde.Application1.Manager.xml +++ b/dbus/org.deepin.dde.Application1.Manager.xml @@ -27,6 +27,17 @@ + + + + + + + + + + + diff --git a/src/modules/startmanager/startmanager.cpp b/src/modules/startmanager/startmanager.cpp index bc44ae8..04d30ac 100644 --- a/src/modules/startmanager/startmanager.cpp +++ b/src/modules/startmanager/startmanager.cpp @@ -117,7 +117,7 @@ bool StartManager::launchApp(const QString &desktopFile) bool StartManager::launchApp(QString desktopFile, uint32_t timestamp, QStringList files) { - return doLaunchAppWithOptions(desktopFile, timestamp, files, QMap()); + return doLaunchAppWithOptions(desktopFile, timestamp, files, QVariantMap()); } bool StartManager::launchAppAction(QString desktopFile, QString actionSection, uint32_t timestamp) @@ -153,7 +153,7 @@ bool StartManager::launchAppAction(QString desktopFile, QString actionSection, u return true; } -bool StartManager::launchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QMap options) +bool StartManager::launchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QVariantMap options) { return doLaunchAppWithOptions(desktopFile, timestamp, files, options); } @@ -350,7 +350,7 @@ bool StartManager::doLaunchAppWithOptions(const QString &desktopFile) return true; } -bool StartManager::doLaunchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QMap options) +bool StartManager::doLaunchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QVariantMap options) { // launchApp DesktopInfo info(desktopFile.toStdString()); @@ -360,11 +360,11 @@ bool StartManager::doLaunchAppWithOptions(QString desktopFile, uint32_t timestam } if (options.find("path") != options.end()) { - info.getKeyFile()->setKey(MainSection, KeyPath, options["path"].toStdString()); + info.getKeyFile()->setKey(MainSection, KeyPath, options["path"].toString().toStdString()); } if (options.find("desktop-override-exec") != options.end()) { - info.setDesktopOverrideExec(options["desktop-override-exec"].toStdString()); + info.setDesktopOverrideExec(options["desktop-override-exec"].toString().toStdString()); } if (info.getCommandLine().empty()) { diff --git a/src/modules/startmanager/startmanager.h b/src/modules/startmanager/startmanager.h index fb4178e..cb50ef3 100644 --- a/src/modules/startmanager/startmanager.h +++ b/src/modules/startmanager/startmanager.h @@ -46,7 +46,7 @@ public: bool launchApp(const QString &desktopFile); bool launchApp(QString desktopFile, uint32_t timestamp, QStringList files); bool launchAppAction(QString desktopFile, QString actionSection, uint32_t timestamp); - bool launchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QMap options); + bool launchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QVariantMap options); bool runCommand(QString exe, QStringList args); bool runCommandWithOptions(QString exe, QStringList args, QMap options); @@ -59,7 +59,7 @@ public Q_SLOTS: private: bool setAutostart(const QString &fileName, const bool value); bool doLaunchAppWithOptions(const QString &desktopFile); - bool doLaunchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QMap options); + bool doLaunchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QVariantMap options); bool launch(DesktopInfo *info, QString cmdLine, uint32_t timestamp, QStringList files); bool doRunCommandWithOptions(QString exe, QStringList args, QMap options); void waitCmd(DesktopInfo *info, QProcess *process, QString cmdName); diff --git a/src/service/impl/application_manager.cpp b/src/service/impl/application_manager.cpp index c128949..f7203df 100644 --- a/src/service/impl/application_manager.cpp +++ b/src/service/impl/application_manager.cpp @@ -384,7 +384,7 @@ void ApplicationManager::LaunchAppAction(const QString &desktopFile, const QStri } } -void ApplicationManager::LaunchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QMap options) +void ApplicationManager::LaunchAppWithOptions(const QString &desktopFile, uint32_t timestamp, const QStringList &files, QVariantMap options) { Q_D(ApplicationManager); if (!d->checkDMsgUid()) { @@ -403,6 +403,25 @@ void ApplicationManager::LaunchAppWithOptions(QString desktopFile, uint32_t time } } +void ApplicationManager::RunCommand(const QString &exe, const QStringList &args) +{ + Q_D(ApplicationManager); + if (!d->checkDMsgUid()) { + if (calledFromDBus()) + sendErrorReply(QDBusError::Failed, "The call failed"); + + qWarning() << "check msg failed..."; + return; + } + + if (!d->startManager->runCommand(exe, args)) { + if (calledFromDBus()) + sendErrorReply(QDBusError::InvalidArgs, "invalid arguments"); + + qWarning() << "invalid arguments"; + } +} + void ApplicationManager::RunCommandWithOptions(QString exe, QStringList args, QMap options) { Q_D(ApplicationManager); diff --git a/src/service/impl/application_manager.h b/src/service/impl/application_manager.h index 2abae21..54f9ba4 100644 --- a/src/service/impl/application_manager.h +++ b/src/service/impl/application_manager.h @@ -74,6 +74,8 @@ public Q_SLOTS: void Launch(const QString &desktopFile, bool withMsgCheck = true); void LaunchApp(const QString &desktopFile, uint32_t timestamp, const QStringList &files, bool withMsgCheck = true); void LaunchAppAction(const QString &desktopFile, const QString &action, uint32_t timestamp, bool withMsgCheck = true); + void LaunchAppWithOptions(const QString &desktopFile, uint32_t timestamp, const QStringList &files, QVariantMap options); + void RunCommand(const QString &exe, const QStringList &args); protected: ApplicationManager(QObject *parent = nullptr); @@ -83,7 +85,6 @@ protected: QList list() const; QDBusObjectPath GetInformation(const QString &id); QList GetInstances(const QString &id); - void LaunchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QMap options); void RunCommandWithOptions(QString exe, QStringList args, QMap options); bool IsProcessExist(uint32_t pid); };