feat: 指定服务slice、接口类私有化封装处理

指定服务slice、接口类私有化封装处理

Log: 指定服务slice、接口类私有化封装处理
Task: https://pms.uniontech.com/task-view-109315.html
Influence: 无
Change-Id: I7111960eab2cb49e439905aac67ac0f83165f6d8
This commit is contained in:
tanfeng 2022-05-18 21:14:48 +08:00
parent 08d9f4895b
commit 68f52fe831
9 changed files with 72 additions and 53 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
CMakeLists.txt.user CMakeLists.txt.user
build/

View File

@ -6,3 +6,4 @@ Type=simple
Environment="DAM_TASK_HASH=%I" Environment="DAM_TASK_HASH=%I"
Environment="DAM_TASK_TYPE=freedesktop" Environment="DAM_TASK_TYPE=freedesktop"
ExecStart=/usr/bin/deepin-application-loader ExecStart=/usr/bin/deepin-application-loader
Slice=applications.slice

View File

@ -5,3 +5,4 @@ Description=Deepin Application Manager service
Type=DBus Type=DBus
BusName=org.deskspec.ApplicationManager BusName=org.deskspec.ApplicationManager
ExecStart=/usr/bin/deepin-application-service ExecStart=/usr/bin/deepin-application-service
Slice=services.slice

View File

@ -10,17 +10,17 @@ pkg_check_modules(X11 REQUIRED IMPORTED_TARGET x11)
pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0)
qt5_add_dbus_adaptor(ADAPTER_SOURCES qt5_add_dbus_adaptor(ADAPTER_SOURCES
../../DBus/org.desktopspec.ApplicationManager.xml ../../dbus/org.desktopspec.ApplicationManager.xml
impl/application_manager.h impl/application_manager.h
ApplicationManager) ApplicationManager)
qt5_add_dbus_adaptor(ADAPTER_SOURCES qt5_add_dbus_adaptor(ADAPTER_SOURCES
../../DBus/org.desktopspec.Application.xml ../../dbus/org.desktopspec.Application.xml
impl/application.h impl/application.h
Application) Application)
qt5_add_dbus_adaptor(ADAPTER_SOURCES qt5_add_dbus_adaptor(ADAPTER_SOURCES
../../DBus/org.desktopspec.ApplicationInstance.xml ../../dbus/org.desktopspec.ApplicationInstance.xml
impl/application_instance.h impl/application_instance.h
ApplicationInstance) ApplicationInstance)

View File

@ -18,6 +18,7 @@
#include "../../modules/methods/registe.hpp" #include "../../modules/methods/registe.hpp"
#include "../../modules/methods/task.hpp" #include "../../modules/methods/task.hpp"
#include "../../modules/socket/server.h" #include "../../modules/socket/server.h"
#include "../../modules/startmanager/startmanager.h"
#include "application.h" #include "application.h"
#include "application_instance.h" #include "application_instance.h"
#include "applicationinstanceadaptor.h" #include "applicationinstanceadaptor.h"
@ -32,8 +33,13 @@ class ApplicationManagerPrivate : public QObject
Socket::Server server; Socket::Server server;
std::multimap<std::string, QSharedPointer<ApplicationInstance>> tasks; std::multimap<std::string, QSharedPointer<ApplicationInstance>> tasks;
StartManager *startManager;
public: public:
ApplicationManagerPrivate(ApplicationManager *parent) : QObject(parent), q_ptr(parent) ApplicationManagerPrivate(ApplicationManager *parent)
: QObject(parent)
, q_ptr(parent)
, startManager(new StartManager(this))
{ {
const QString socketPath{QString("/run/user/%1/deepin-application-manager.socket").arg(getuid())}; const QString socketPath{QString("/run/user/%1/deepin-application-manager.socket").arg(getuid())};
connect(&server, &Socket::Server::onReadyRead, this, &ApplicationManagerPrivate::recvClientData, Qt::QueuedConnection); connect(&server, &Socket::Server::onReadyRead, this, &ApplicationManagerPrivate::recvClientData, Qt::QueuedConnection);
@ -41,6 +47,12 @@ public:
} }
~ApplicationManagerPrivate() {} ~ApplicationManagerPrivate() {}
bool checkDMsgUid()
{
QDBusReply<uint> reply = q_ptr->connection().interface()->serviceUid(q_ptr->message().service());
return reply.isValid() && (reply.value() == getuid());
}
private: private:
void recvClientData(int socket, const std::vector<char> &data) void recvClientData(int socket, const std::vector<char> &data)
{ {
@ -110,12 +122,18 @@ private:
} }
}; };
ApplicationManager* ApplicationManager::Instance() {
static ApplicationManager manager;
return &manager;
}
ApplicationManager::ApplicationManager(QObject *parent) ApplicationManager::ApplicationManager(QObject *parent)
: QObject(parent) : QObject(parent)
, dd_ptr(new ApplicationManagerPrivate(this)) , dd_ptr(new ApplicationManagerPrivate(this))
, startManager(new StartManager(this))
{ {
connect(startManager, &StartManager::autostartChanged, this, &ApplicationManager::AutostartChanged); Q_D(ApplicationManager);
connect(d->startManager, &StartManager::autostartChanged, this, &ApplicationManager::AutostartChanged);
} }
ApplicationManager::~ApplicationManager() {} ApplicationManager::~ApplicationManager() {}
@ -131,7 +149,7 @@ QDBusObjectPath ApplicationManager::GetInformation(const QString &id)
{ {
Q_D(ApplicationManager); Q_D(ApplicationManager);
if (!checkDMsgUid()) if (!d->checkDMsgUid())
return {}; return {};
for (const QSharedPointer<Application> &app : d->applications) { for (const QSharedPointer<Application> &app : d->applications) {
@ -144,8 +162,8 @@ QDBusObjectPath ApplicationManager::GetInformation(const QString &id)
QList<QDBusObjectPath> ApplicationManager::GetInstances(const QString &id) QList<QDBusObjectPath> ApplicationManager::GetInstances(const QString &id)
{ {
Q_D(const ApplicationManager); Q_D(ApplicationManager);
if (!checkDMsgUid()) if (!d->checkDMsgUid())
return {}; return {};
for (const auto &app : d->applications) { for (const auto &app : d->applications) {
@ -160,7 +178,7 @@ QList<QDBusObjectPath> ApplicationManager::GetInstances(const QString &id)
QDBusObjectPath ApplicationManager::Run(const QString &id) QDBusObjectPath ApplicationManager::Run(const QString &id)
{ {
Q_D(ApplicationManager); Q_D(ApplicationManager);
if (!checkDMsgUid()) if (!d->checkDMsgUid())
return {}; return {};
// 创建一个实例 // 创建一个实例
@ -186,98 +204,110 @@ QDBusObjectPath ApplicationManager::Run(const QString &id)
bool ApplicationManager::AddAutostart(QString fileName) bool ApplicationManager::AddAutostart(QString fileName)
{ {
if (!checkDMsgUid()) Q_D(ApplicationManager);
if (!d->checkDMsgUid())
return false; return false;
return startManager->addAutostart(fileName); return d->startManager->addAutostart(fileName);
} }
bool ApplicationManager::RemoveAutostart(QString fileName) bool ApplicationManager::RemoveAutostart(QString fileName)
{ {
if (!checkDMsgUid()) Q_D(ApplicationManager);
if (!d->checkDMsgUid())
return false; return false;
return startManager->removeAutostart(fileName); return d->startManager->removeAutostart(fileName);
} }
QStringList ApplicationManager::AutostartList() QStringList ApplicationManager::AutostartList()
{ {
if (!checkDMsgUid()) Q_D(ApplicationManager);
if (!d->checkDMsgUid())
return {}; return {};
return startManager->autostartList(); return d->startManager->autostartList();
} }
QString ApplicationManager::DumpMemRecord() QString ApplicationManager::DumpMemRecord()
{ {
if (!checkDMsgUid()) Q_D(ApplicationManager);
return {}; if (!d->checkDMsgUid())
return "";
return startManager->dumpMemRecord(); return d->startManager->dumpMemRecord();
} }
bool ApplicationManager::IsAutostart(QString fileName) bool ApplicationManager::IsAutostart(QString fileName)
{ {
if (!checkDMsgUid()) Q_D(ApplicationManager);
if (!d->checkDMsgUid())
return false; return false;
return startManager->isAutostart(fileName); return d->startManager->isAutostart(fileName);
} }
bool ApplicationManager::IsMemSufficient() bool ApplicationManager::IsMemSufficient()
{ {
if (!checkDMsgUid()) Q_D(ApplicationManager);
return true; if (!d->checkDMsgUid())
return false;
return startManager->isMemSufficient(); return d->startManager->isMemSufficient();
} }
void ApplicationManager::LaunchApp(QString desktopFile, uint32_t timestamp, QStringList files) void ApplicationManager::LaunchApp(QString desktopFile, uint32_t timestamp, QStringList files)
{ {
if (!checkDMsgUid()) Q_D(ApplicationManager);
if (!d->checkDMsgUid())
return; return;
startManager->launchApp(desktopFile, timestamp, files); d->startManager->launchApp(desktopFile, timestamp, files);
} }
void ApplicationManager::LaunchAppAction(QString desktopFile, QString action, uint32_t timestamp) void ApplicationManager::LaunchAppAction(QString desktopFile, QString action, uint32_t timestamp)
{ {
if (!checkDMsgUid()) Q_D(ApplicationManager);
if (!d->checkDMsgUid())
return; return;
startManager->launchAppAction(desktopFile, action, timestamp); d->startManager->launchAppAction(desktopFile, action, timestamp);
} }
void ApplicationManager::LaunchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QMap<QString, QString> options) void ApplicationManager::LaunchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QMap<QString, QString> options)
{ {
if (!checkDMsgUid()) Q_D(ApplicationManager);
if (!d->checkDMsgUid())
return; return;
startManager->launchAppWithOptions(desktopFile, timestamp, files, options); d->startManager->launchAppWithOptions(desktopFile, timestamp, files, options);
} }
void ApplicationManager::RunCommand(QString exe, QStringList args) void ApplicationManager::RunCommand(QString exe, QStringList args)
{ {
if (!checkDMsgUid()) Q_D(ApplicationManager);
if (!d->checkDMsgUid())
return; return;
startManager->runCommand(exe, args); d->startManager->runCommand(exe, args);
} }
void ApplicationManager::RunCommandWithOptions(QString exe, QStringList args, QMap<QString, QString> options) void ApplicationManager::RunCommandWithOptions(QString exe, QStringList args, QMap<QString, QString> options)
{ {
if (!checkDMsgUid()) Q_D(ApplicationManager);
if (!d->checkDMsgUid())
return; return;
startManager->runCommandWithOptions(exe, args, options); d->startManager->runCommandWithOptions(exe, args, options);
} }
void ApplicationManager::TryAgain(bool launch) void ApplicationManager::TryAgain(bool launch)
{ {
if (!checkDMsgUid()) Q_D(ApplicationManager);
if (!d->checkDMsgUid())
return; return;
startManager->tryAgain(launch); d->startManager->tryAgain(launch);
} }
QList<QDBusObjectPath> ApplicationManager::instances() const QList<QDBusObjectPath> ApplicationManager::instances() const
@ -305,10 +335,4 @@ QList<QDBusObjectPath> ApplicationManager::list() const
return result; return result;
} }
bool ApplicationManager::checkDMsgUid()
{
QDBusReply<uint> reply = connection().interface()->serviceUid(message().service());
return reply.isValid() && (reply.value() == getuid());
}
#include "application_manager.moc" #include "application_manager.moc"

View File

@ -1,8 +1,6 @@
#ifndef A2862DC7_5DA3_4129_9796_671D88015BED #ifndef A2862DC7_5DA3_4129_9796_671D88015BED
#define A2862DC7_5DA3_4129_9796_671D88015BED #define A2862DC7_5DA3_4129_9796_671D88015BED
#include "../../modules/startmanager/startmanager.h"
#include <QObject> #include <QObject>
#include <QDBusObjectPath> #include <QDBusObjectPath>
#include <QList> #include <QList>
@ -20,17 +18,10 @@ class ApplicationManager : public QObject, public QDBusContext
QScopedPointer<ApplicationManagerPrivate> dd_ptr; QScopedPointer<ApplicationManagerPrivate> dd_ptr;
Q_DECLARE_PRIVATE_D(qGetPtrHelper(dd_ptr), ApplicationManager) Q_DECLARE_PRIVATE_D(qGetPtrHelper(dd_ptr), ApplicationManager)
ApplicationManager(QObject *parent = nullptr);
bool checkDMsgUid();
StartManager *startManager;
public: public:
ApplicationManager(QObject *parent = nullptr);
~ApplicationManager() override; ~ApplicationManager() override;
static ApplicationManager* Instance() { static ApplicationManager* Instance();
static ApplicationManager manager;
return &manager;
}
void addApplication(const QList<QSharedPointer<Application>> &list); void addApplication(const QList<QSharedPointer<Application>> &list);
@ -62,6 +53,7 @@ public Q_SLOTS: // METHODS
void RunCommand(QString exe, QStringList args); void RunCommand(QString exe, QStringList args);
void RunCommandWithOptions(QString exe, QStringList args, QMap<QString, QString> options); void RunCommandWithOptions(QString exe, QStringList args, QMap<QString, QString> options);
void TryAgain(bool launch); void TryAgain(bool launch);
}; };
#endif /* A2862DC7_5DA3_4129_9796_671D88015BED */ #endif /* A2862DC7_5DA3_4129_9796_671D88015BED */