From 12d08de06991f210b01755f42535fa1b6ae2da6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83=E6=9C=8B=E7=A8=8B?= Date: Tue, 20 Dec 2022 10:43:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0LaunchAppWithOptions?= =?UTF-8?q?=E5=92=8CRunCommand=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 无 Log: 无 Influence: 无 Task: https://pms.uniontech.com/task-view-220801.html Change-Id: I8f6998a95a21dd70093746946b57c6c3be57bf3a --- dbus/org.deepin.dde.Application1.Manager.xml | 11 ++++++++++ src/modules/startmanager/startmanager.cpp | 10 +++++----- src/modules/startmanager/startmanager.h | 4 ++-- src/service/impl/application_manager.cpp | 21 +++++++++++++++++++- src/service/impl/application_manager.h | 3 ++- 5 files changed, 40 insertions(+), 9 deletions(-) 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); };