diff --git a/dbus/org.desktopspec.ApplicationManager.xml b/dbus/org.desktopspec.ApplicationManager.xml
index 999bf6d..73fb1f9 100644
--- a/dbus/org.desktopspec.ApplicationManager.xml
+++ b/dbus/org.desktopspec.ApplicationManager.xml
@@ -1,50 +1,34 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/modules/startmanager/startmanager.cpp b/src/modules/startmanager/startmanager.cpp
index 72272b5..4f73e37 100644
--- a/src/modules/startmanager/startmanager.cpp
+++ b/src/modules/startmanager/startmanager.cpp
@@ -95,16 +95,6 @@ QStringList StartManager::autostartList()
return autostartFiles;
}
-QString StartManager::dumpMemRecord()
-{
-
-}
-
-QString StartManager::getApps()
-{
-
-}
-
/**
* @brief StartManager::isAutostart
* @param fileName desktopFile
@@ -133,6 +123,11 @@ bool StartManager::isMemSufficient()
return SETTING->getMemCheckerEnabled() ? MemInfo::isSufficient(minMemAvail, maxSwapUsed) : true;
}
+void StartManager::launchApp(const QString &desktopFile)
+{
+ doLaunchAppWithOptions(desktopFile);
+}
+
void StartManager::launchApp(QString desktopFile, uint32_t timestamp, QStringList files)
{
doLaunchAppWithOptions(desktopFile, timestamp, files, QMap());
@@ -183,11 +178,6 @@ void StartManager::runCommandWithOptions(QString exe, QStringList args, QMapmarkLaunched(desktopFile);
+
+ return true;
+}
+
bool StartManager::doLaunchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QMap options)
{
// launchApp
@@ -359,9 +362,23 @@ bool StartManager::launch(DesktopInfo *info, QString cmdLine, uint32_t timestamp
QString exec = exeArgs[0];
exeArgs.removeAt(0);
+#ifdef QT_DEBUG
qDebug() << "launchApp: " << desktopFile << " exec: " << exec << " args: " << exeArgs;
+#endif
+
process.setWorkingDirectory(workingDir.c_str());
process.setEnvironment(envs);
+
+ if (desktopFile.contains("/persistent/linglong")) {
+ exeArgs.clear();
+
+#ifdef QT_DEBUG
+ qDebug() << "exeArgs:" << cmdLine.section(" ", 1, 2);
+#endif
+
+ exeArgs.append(cmdLine.section(" ", 1, 2).split(" "));
+ }
+
return process.startDetached(exec, exeArgs);
}
diff --git a/src/modules/startmanager/startmanager.h b/src/modules/startmanager/startmanager.h
index 1a79408..52138a2 100644
--- a/src/modules/startmanager/startmanager.h
+++ b/src/modules/startmanager/startmanager.h
@@ -41,16 +41,14 @@ public:
bool addAutostart(QString fileName);
bool removeAutostart(QString fileName);
QStringList autostartList();
- QString dumpMemRecord();
- QString getApps();
bool isAutostart(QString fileName);
bool isMemSufficient();
+ void launchApp(const QString &desktopFile);
void launchApp(QString desktopFile, uint32_t timestamp, QStringList files);
void launchAppAction(QString desktopFile, QString actionSection, uint32_t timestamp);
void launchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QMap options);
void runCommand(QString exe, QStringList args);
void runCommandWithOptions(QString exe, QStringList args, QMap options);
- void tryAgain(bool launch);
Q_SIGNALS:
void autostartChanged(QString status, QString fileName);
@@ -60,6 +58,7 @@ public Q_SLOTS:
private:
bool setAutostart(QString fileName, bool value);
+ bool doLaunchAppWithOptions(const QString &desktopFile);
bool doLaunchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QMap options);
bool launch(DesktopInfo *info, QString cmdLine, uint32_t timestamp, QStringList files);
bool doRunCommandWithOptions(QString exe, QStringList args, QMap options);
diff --git a/src/service/impl/application_manager.cpp b/src/service/impl/application_manager.cpp
index 8c4aa7c..79a05eb 100644
--- a/src/service/impl/application_manager.cpp
+++ b/src/service/impl/application_manager.cpp
@@ -246,41 +246,6 @@ QList ApplicationManager::GetInstances(const QString& id)
return {};
}
-/**
- * @brief ApplicationManager::Launch 启动应用
- * @param id QString("/%1/%2/%3").arg(Apptype).arg(d->m_type == Application::Type::System ? "system" : "user").arg(appId)
- * @param files 应用打开的文件
- * @return
- */
-QDBusObjectPath ApplicationManager::Launch(const QString& id, QStringList files)
-{
- qInfo() << "Launch " << id;
- Q_D(ApplicationManager);
- if (!d->checkDMsgUid())
- return {};
-
- // 创建一个实例
- for (const QSharedPointer& app : d->applications) {
- QString appId = app->id();
- if (app->id() == id) {
- // 创建任务所需的数据,并记录到任务队列,等待 loader 消耗
- QSharedPointer instance{app->createInstance(files)};
- const std::string hash{instance->hash().toStdString()};
- connect(instance.get(), &ApplicationInstance::taskFinished, this, [ = ] {
- for (auto it = d->tasks.begin(); it != d->tasks.end(); ++it){
- if (it->first == hash) {
- d->tasks.erase(it);
- break;
- }
- }
- });
- d->tasks.insert(std::make_pair(hash, instance));
- return instance->path();
- }
- }
- return {};
-}
-
bool ApplicationManager::AddAutostart(QString fileName)
{
Q_D(ApplicationManager);
@@ -308,15 +273,6 @@ QStringList ApplicationManager::AutostartList()
return d->startManager->autostartList();
}
-QString ApplicationManager::DumpMemRecord()
-{
- Q_D(ApplicationManager);
- if (!d->checkDMsgUid())
- return "";
-
- return d->startManager->dumpMemRecord();
-}
-
bool ApplicationManager::IsAutostart(QString fileName)
{
Q_D(ApplicationManager);
@@ -326,16 +282,17 @@ bool ApplicationManager::IsAutostart(QString fileName)
return d->startManager->isAutostart(fileName);
}
-bool ApplicationManager::IsMemSufficient()
+void ApplicationManager::Launch(const QString &desktopFile)
{
Q_D(ApplicationManager);
if (!d->checkDMsgUid())
- return false;
+ return;
- return d->startManager->isMemSufficient();
+ d->startManager->launchApp(desktopFile);
}
-void ApplicationManager::LaunchApp(QString desktopFile, uint32_t timestamp, QStringList files)
+
+void ApplicationManager::LaunchApp(const QString &desktopFile, uint32_t timestamp, const QStringList &files)
{
Q_D(ApplicationManager);
if (!d->checkDMsgUid())
@@ -362,15 +319,6 @@ void ApplicationManager::LaunchAppWithOptions(QString desktopFile, uint32_t time
d->startManager->launchAppWithOptions(desktopFile, timestamp, files, options);
}
-void ApplicationManager::RunCommand(QString exe, QStringList args)
-{
- Q_D(ApplicationManager);
- if (!d->checkDMsgUid())
- return;
-
- d->startManager->runCommand(exe, args);
-}
-
void ApplicationManager::RunCommandWithOptions(QString exe, QStringList args, QMap options)
{
Q_D(ApplicationManager);
@@ -380,15 +328,6 @@ void ApplicationManager::RunCommandWithOptions(QString exe, QStringList args, QM
d->startManager->runCommandWithOptions(exe, args, options);
}
-void ApplicationManager::TryAgain(bool launch)
-{
- Q_D(ApplicationManager);
- if (!d->checkDMsgUid())
- return;
-
- d->startManager->tryAgain(launch);
-}
-
QList ApplicationManager::instances() const
{
Q_D(const ApplicationManager);
@@ -414,28 +353,6 @@ QList ApplicationManager::list() const
return result;
}
-// 如果app manager拥有全部进程信息,可以在app manger里面获取
-bool ApplicationManager::IsPidVirtualMachine(uint32_t pid)
-{
- Q_D(const ApplicationManager);
- char buff[256];
- ssize_t nbytes = readlink(QString("/proc/%1/exe").arg(pid).toStdString().c_str(), buff, 256);
- if (nbytes == -1) {
- return false;
- }
- std::string execPath(buff);
-
- for (auto iter : d->virtualMachines) {
- std::string::size_type idx = iter.find(execPath);
-
- if (idx != std::string::npos) {
- return true;
- }
- }
-
- return false;
-}
-
bool ApplicationManager::IsProcessExist(uint32_t pid)
{
Q_D(const ApplicationManager);
diff --git a/src/service/impl/application_manager.h b/src/service/impl/application_manager.h
index bb60a47..fa75291 100644
--- a/src/service/impl/application_manager.h
+++ b/src/service/impl/application_manager.h
@@ -66,19 +66,14 @@ public:
Q_SIGNALS:
void AutostartChanged(QString status, QString filePath);
-public Q_SLOTS: // METHODS
- //bool Launch(QString desktopFile); deprecated
+public Q_SLOTS:
bool AddAutostart(QString fileName);
QStringList AutostartList();
- QString DumpMemRecord();
bool IsAutostart(QString fileName);
- bool IsMemSufficient();
- QDBusObjectPath Launch(const QString &id, QStringList files);
bool RemoveAutostart(QString fileName);
- bool IsPidVirtualMachine(uint32_t pid);
+ void Launch(const QString &desktopFile);
+ void LaunchApp(const QString &desktopFile, uint32_t timestamp, const QStringList &files);
void LaunchAppAction(QString desktopFile, QString action, uint32_t timestamp);
- void RunCommand(QString exe, QStringList args);
- void TryAgain(bool launch);
protected:
ApplicationManager(QObject *parent = nullptr);
@@ -88,11 +83,7 @@ protected:
QList list() const;
QDBusObjectPath GetInformation(const QString &id);
QList GetInstances(const QString &id);
- // com.deepin.StartManager
- //QString GetApps();
- void LaunchApp(QString desktopFile, uint32_t timestamp, QStringList files);
void LaunchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QMap options);
- //bool LaunchWithTimestamp(QString desktopFile, uint32_t timestamp); deprecated
void RunCommandWithOptions(QString exe, QStringList args, QMap options);
bool IsProcessExist(uint32_t pid);
};
diff --git a/src/service/main.cpp b/src/service/main.cpp
index a272236..8b4f6d9 100644
--- a/src/service/main.cpp
+++ b/src/service/main.cpp
@@ -18,6 +18,10 @@
DCORE_USE_NAMESPACE
+#define ApplicationManagerServiceName "org.desktopspec.ApplicationManager"
+#define ApplicationManagerServicePath "/org/desktopspec/ApplicationManager"
+#define ApplicationManagerInterface "org.desktopspec.ApplicationManager"
+
QFileInfoList scan(const QString &path)
{
QDir dir(path);
@@ -83,16 +87,31 @@ int main(int argc, char *argv[])
new DockManager(ApplicationManager::instance());
new ApplicationManagerAdaptor(ApplicationManager::instance());
- QDBusConnection::sessionBus().registerService("org.desktopspec.Application");
- QDBusConnection::sessionBus().registerService("org.desktopspec.ApplicationManager");
- QDBusConnection::sessionBus().registerObject("/org/desktopspec/ApplicationManager", "org.desktopspec.ApplicationManager", ApplicationManager::instance());
+ QDBusConnection connection = QDBusConnection::sessionBus();
+ if (!connection.registerService("org.desktopspec.Application")) {
+ qWarning() << "error: " << connection.lastError().message();
+ return -1;
+ }
+
+ if (!connection.registerService(ApplicationManagerServiceName)) {
+ qWarning() << "error: " << connection.lastError().message();
+ return -1;
+ }
+
+ if (!connection.registerObject(ApplicationManagerServicePath, ApplicationManagerInterface, ApplicationManager::instance())) {
+ qWarning() << "error: " << connection.lastError().message();
+ return -1;
+ }
QList> apps{ scanFiles() };
QList> appAdapters;
for (const QSharedPointer app : apps) {
QSharedPointer adapter = QSharedPointer(new ApplicationAdaptor(app.get()));
appAdapters << adapter;
- QDBusConnection::sessionBus().registerObject(app->path().path(), "org.desktopspec.Application", app.get());
+ if (!connection.registerObject(app->path().path(), "org.desktopspec.Application", app.get())) {
+ qWarning() << "error: " << connection.lastError().message();
+ continue;
+ }
}
ApplicationManager::instance()->addApplication(apps);
@@ -102,8 +121,15 @@ int main(int argc, char *argv[])
MimeApp* mimeApp = new MimeApp;
new MimeAdaptor(mimeApp);
- QDBusConnection::sessionBus().registerService("org.deepin.daemon.Mime1");
- QDBusConnection::sessionBus().registerObject("/org/deepin/daemon/Mime1", "org.deepin.daemon.Mime1", mimeApp);
+ if (!connection.registerService("org.deepin.daemon.Mime1")) {
+ qWarning() << "error: " << connection.lastError().message();
+ return -1;
+ }
+
+ if (!connection.registerObject("/org/deepin/daemon/Mime1", "org.deepin.daemon.Mime1", mimeApp)) {
+ qWarning() << "error: " << connection.lastError().message();
+ return -1;
+ }
return app.exec();
}