feat: 实现StartManager功能

实现StartManager功能, 曝露在ApplicationManager服务上

Log: 实现StartManager功能
Task: https://pms.uniontech.com/task-view-130337.html
Influence: 无
Change-Id: I8e83a66f8c25b09e0f4be1e4be9defac95b02b80
This commit is contained in:
weizhixiang
2022-05-15 12:10:42 +08:00
parent 13a1cabda1
commit 08d9f4895b
102 changed files with 2374 additions and 445 deletions

View File

@ -7,6 +7,7 @@ find_package(DtkCore REQUIRED)
pkg_check_modules(XCB REQUIRED IMPORTED_TARGET xcb-icccm xcb-ewmh xcb)
pkg_check_modules(X11 REQUIRED IMPORTED_TARGET x11)
pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0)
qt5_add_dbus_adaptor(ADAPTER_SOURCES
../../DBus/org.desktopspec.ApplicationManager.xml
@ -63,6 +64,12 @@ set(SRCS
../lib/basedir.cpp
../lib/xcbutils.h
../lib/xcbutils.cpp
../lib/applaunchcontext.h
../lib/applaunchcontext.cpp
../lib/meminfo.h
../lib/meminfo.cpp
../lib/gsetting.h
../lib/gsetting.cpp
../utils/settings.h
../utils/settings.cpp
../utils/synmodulebase.h
@ -122,6 +129,13 @@ set(SRCS
../modules/dock/dbusadaptordock.cpp
../modules/dock/dbusadaptorentry.h
../modules/dock/dbusadaptorentry.cpp
../modules/startmanager/common.h
../modules/startmanager/startmanager.h
../modules/startmanager/startmanager.cpp
../modules/startmanager/startmanagersettings.h
../modules/startmanager/startmanagersettings.cpp
../modules/startmanager/startmanagerdbushandler.h
../modules/startmanager/startmanagerdbushandler.cpp
../frameworkdbus/types/launcheriteminfo.h
../frameworkdbus/types/launcheriteminfo.cpp
../frameworkdbus/types/launcheriteminfolist.h
@ -168,10 +182,12 @@ target_link_libraries(deepin-application-manager
pthread
PkgConfig::XCB
PkgConfig::X11
PkgConfig::GIO
)
target_include_directories(deepin-application-manager PUBLIC
PkgConfig::XCB
PkgConfig::GIO
../lib
../utils
../frameworkdbus

View File

@ -2,6 +2,11 @@
#include <unistd.h>
#include <QDBusMessage>
#include <QDBusConnectionInterface>
#include <QDBusConnection>
#include <QDebug>
#include <iostream>
#include <map>
#include <mutex>
@ -105,7 +110,13 @@ private:
}
};
ApplicationManager::ApplicationManager(QObject *parent) : QObject(parent), dd_ptr(new ApplicationManagerPrivate(this)) {}
ApplicationManager::ApplicationManager(QObject *parent)
: QObject(parent)
, dd_ptr(new ApplicationManagerPrivate(this))
, startManager(new StartManager(this))
{
connect(startManager, &StartManager::autostartChanged, this, &ApplicationManager::AutostartChanged);
}
ApplicationManager::~ApplicationManager() {}
@ -116,15 +127,13 @@ void ApplicationManager::addApplication(const QList<QSharedPointer<Application>>
d->applications = list;
}
QDBusObjectPath ApplicationManager::GetId(int pid)
{
return {};
}
QDBusObjectPath ApplicationManager::GetInformation(const QString &id)
{
Q_D(ApplicationManager);
if (!checkDMsgUid())
return {};
for (const QSharedPointer<Application> &app : d->applications) {
if (app->id() == id) {
return app->path();
@ -136,6 +145,8 @@ QDBusObjectPath ApplicationManager::GetInformation(const QString &id)
QList<QDBusObjectPath> ApplicationManager::GetInstances(const QString &id)
{
Q_D(const ApplicationManager);
if (!checkDMsgUid())
return {};
for (const auto &app : d->applications) {
if (app->id() == id) {
@ -149,6 +160,8 @@ QList<QDBusObjectPath> ApplicationManager::GetInstances(const QString &id)
QDBusObjectPath ApplicationManager::Run(const QString &id)
{
Q_D(ApplicationManager);
if (!checkDMsgUid())
return {};
// 创建一个实例
for (const QSharedPointer<Application> &app : d->applications) {
@ -171,6 +184,102 @@ QDBusObjectPath ApplicationManager::Run(const QString &id)
return {};
}
bool ApplicationManager::AddAutostart(QString fileName)
{
if (!checkDMsgUid())
return false;
return startManager->addAutostart(fileName);
}
bool ApplicationManager::RemoveAutostart(QString fileName)
{
if (!checkDMsgUid())
return false;
return startManager->removeAutostart(fileName);
}
QStringList ApplicationManager::AutostartList()
{
if (!checkDMsgUid())
return {};
return startManager->autostartList();
}
QString ApplicationManager::DumpMemRecord()
{
if (!checkDMsgUid())
return {};
return startManager->dumpMemRecord();
}
bool ApplicationManager::IsAutostart(QString fileName)
{
if (!checkDMsgUid())
return false;
return startManager->isAutostart(fileName);
}
bool ApplicationManager::IsMemSufficient()
{
if (!checkDMsgUid())
return true;
return startManager->isMemSufficient();
}
void ApplicationManager::LaunchApp(QString desktopFile, uint32_t timestamp, QStringList files)
{
if (!checkDMsgUid())
return;
startManager->launchApp(desktopFile, timestamp, files);
}
void ApplicationManager::LaunchAppAction(QString desktopFile, QString action, uint32_t timestamp)
{
if (!checkDMsgUid())
return;
startManager->launchAppAction(desktopFile, action, timestamp);
}
void ApplicationManager::LaunchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QMap<QString, QString> options)
{
if (!checkDMsgUid())
return;
startManager->launchAppWithOptions(desktopFile, timestamp, files, options);
}
void ApplicationManager::RunCommand(QString exe, QStringList args)
{
if (!checkDMsgUid())
return;
startManager->runCommand(exe, args);
}
void ApplicationManager::RunCommandWithOptions(QString exe, QStringList args, QMap<QString, QString> options)
{
if (!checkDMsgUid())
return;
startManager->runCommandWithOptions(exe, args, options);
}
void ApplicationManager::TryAgain(bool launch)
{
if (!checkDMsgUid())
return;
startManager->tryAgain(launch);
}
QList<QDBusObjectPath> ApplicationManager::instances() const
{
Q_D(const ApplicationManager);
@ -196,4 +305,10 @@ QList<QDBusObjectPath> ApplicationManager::list() const
return result;
}
bool ApplicationManager::checkDMsgUid()
{
QDBusReply<uint> reply = connection().interface()->serviceUid(message().service());
return reply.isValid() && (reply.value() == getuid());
}
#include "application_manager.moc"

View File

@ -1,14 +1,19 @@
#ifndef A2862DC7_5DA3_4129_9796_671D88015BED
#define A2862DC7_5DA3_4129_9796_671D88015BED
#include "../../modules/startmanager/startmanager.h"
#include <QObject>
#include <QDBusObjectPath>
#include <QList>
#include <QMap>
#include <QDBusContext>
class Application;
class ApplicationInstance;
class ApplicationManagerPrivate;
class ApplicationManager : public QObject {
class ApplicationManager : public QObject, public QDBusContext
{
Q_OBJECT
Q_PROPERTY(QList<QDBusObjectPath> instances READ instances)
Q_PROPERTY(QList<QDBusObjectPath> list READ list)
@ -16,6 +21,9 @@ class ApplicationManager : public QObject {
Q_DECLARE_PRIVATE_D(qGetPtrHelper(dd_ptr), ApplicationManager)
ApplicationManager(QObject *parent = nullptr);
bool checkDMsgUid();
StartManager *startManager;
public:
~ApplicationManager() override;
@ -26,18 +34,34 @@ public:
void addApplication(const QList<QSharedPointer<Application>> &list);
signals:
void requestCreateInstance(const QSharedPointer<ApplicationInstance> instance);
Q_SIGNALS:
void AutostartChanged(QString status, QString filePath);
public: // PROPERTIES
QList<QDBusObjectPath> instances() const;
QList<QDBusObjectPath> list() const;
public Q_SLOTS: // METHODS
QDBusObjectPath GetId(int pid);
QDBusObjectPath GetInformation(const QString &id);
QList<QDBusObjectPath> GetInstances(const QString &id);
QDBusObjectPath Run(const QString &id);
// com.deepin.StartManager
bool AddAutostart(QString fileName);
bool RemoveAutostart(QString fileName);
QStringList AutostartList();
QString DumpMemRecord();
//QString GetApps();
bool IsAutostart(QString fileName);
bool IsMemSufficient();
//bool Launch(QString desktopFile); deprecated
void LaunchApp(QString desktopFile, uint32_t timestamp, QStringList files);
void LaunchAppAction(QString desktopFile, QString action, uint32_t timestamp);
void LaunchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QMap<QString, QString> options);
//bool LaunchWithTimestamp(QString desktopFile, uint32_t timestamp); deprecated
void RunCommand(QString exe, QStringList args);
void RunCommandWithOptions(QString exe, QStringList args, QMap<QString, QString> options);
void TryAgain(bool launch);
};
#endif /* A2862DC7_5DA3_4129_9796_671D88015BED */

View File

@ -8,6 +8,7 @@
#include "../modules/apps/appmanager.h"
#include "../modules/launcher/launchermanager.h"
#include "../modules/dock/dockmanager.h"
#include "../modules/startmanager/startmanager.h"
#include <QDir>
#include <DLog>
@ -74,6 +75,7 @@ int main(int argc, char *argv[])
new AppManager(ApplicationManager::Instance());
new LauncherManager(ApplicationManager::Instance());
new DockManager(ApplicationManager::Instance());
new StartManager(ApplicationManager::Instance());
new ApplicationManagerAdaptor(ApplicationManager::Instance());
QDBusConnection::sessionBus().registerService("org.desktopspec.Application");