feat: 实现StartManager功能
实现StartManager功能, 曝露在ApplicationManager服务上 Log: 实现StartManager功能 Task: https://pms.uniontech.com/task-view-130337.html Influence: 无 Change-Id: I8e83a66f8c25b09e0f4be1e4be9defac95b02b80
This commit is contained in:
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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 */
|
||||
|
@ -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");
|
||||
|
Reference in New Issue
Block a user