feat: AM 默认程序迁移
默认程序迁移到AM中 Log: 默认程序迁移到AM Task: https://pms.uniontech.com/task-view-140029.html Influence: 默认程序 Change-Id: I0824c503b6ab844f09b3bf3cf740565b1e4215e5
This commit is contained in:
@ -7,7 +7,9 @@ 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)
|
||||
pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0 gio-unix-2.0)
|
||||
pkg_check_modules(GLib REQUIRED IMPORTED_TARGET glib-2.0)
|
||||
pkg_check_modules(QGSettings REQUIRED IMPORTED_TARGET gsettings-qt)
|
||||
|
||||
qt5_add_dbus_adaptor(ADAPTER_SOURCES
|
||||
../../dbus/org.desktopspec.ApplicationManager.xml
|
||||
@ -24,6 +26,12 @@ qt5_add_dbus_adaptor(ADAPTER_SOURCES
|
||||
impl/application_instance.h
|
||||
ApplicationInstance)
|
||||
|
||||
qt5_add_dbus_adaptor(ADAPTER_SOURCES
|
||||
../../dbus/org.deepin.daemon.Mime.xml
|
||||
../modules/mimeapp/mime_app.h
|
||||
MimeApp)
|
||||
|
||||
|
||||
add_definitions(-DUSE_QT)
|
||||
|
||||
file(GLOB_RECURSE SRCS "*.h" "*.cpp" "../frameworkdbus/*.h" "../frameworkdbus/*.cpp"
|
||||
@ -45,12 +53,17 @@ target_link_libraries(deepin-application-manager
|
||||
PkgConfig::XCB
|
||||
PkgConfig::X11
|
||||
PkgConfig::GIO
|
||||
PkgConfig::GLib
|
||||
PkgConfig::QGSettings
|
||||
${Qt5Gui_LIBRARIES}
|
||||
)
|
||||
|
||||
target_include_directories(deepin-application-manager PUBLIC
|
||||
PkgConfig::XCB
|
||||
PkgConfig::X11
|
||||
PkgConfig::GIO
|
||||
PkgConfig::GLib
|
||||
PkgConfig::QGSettings
|
||||
../lib
|
||||
../utils
|
||||
../frameworkdbus
|
||||
@ -62,3 +75,4 @@ target_include_directories(deepin-application-manager PUBLIC
|
||||
# binary file
|
||||
install(TARGETS deepin-application-manager DESTINATION bin)
|
||||
|
||||
add_definitions(-DQT_NO_KEYWORDS)
|
||||
|
@ -166,3 +166,9 @@ QString Application::prefix() const
|
||||
|
||||
return d->m_prefix;
|
||||
}
|
||||
|
||||
QList<QSharedPointer<ApplicationInstance>>& Application::getAllInstances(){
|
||||
Q_D(Application);
|
||||
|
||||
return d->instances;
|
||||
}
|
||||
|
@ -51,6 +51,8 @@ public: // PROPERTIES
|
||||
QString filePath() const;
|
||||
|
||||
QSharedPointer<ApplicationInstance> createInstance(QStringList files);
|
||||
QList<QSharedPointer<ApplicationInstance>>& getAllInstances();
|
||||
bool destoryInstance(QString hashId);
|
||||
|
||||
public Q_SLOTS: // METHODS
|
||||
QString Comment(const QString &locale);
|
||||
|
@ -1,7 +1,9 @@
|
||||
#include "application_instance.h"
|
||||
#include "../applicationhelper.h"
|
||||
#include "application.h"
|
||||
#include "applicationinstanceadaptor.h"
|
||||
|
||||
#include <qdatetime.h>
|
||||
|
||||
#include <QCryptographicHash>
|
||||
#include <QDateTime>
|
||||
#include <QProcess>
|
||||
@ -9,32 +11,30 @@
|
||||
#include <QUuid>
|
||||
#include <QtConcurrent/QtConcurrent>
|
||||
|
||||
#include "../applicationhelper.h"
|
||||
#include "application.h"
|
||||
#include "applicationinstanceadaptor.h"
|
||||
|
||||
#ifdef DEFINE_LOADER_PATH
|
||||
#include "../../src/define.h"
|
||||
#endif
|
||||
|
||||
class ApplicationInstancePrivate {
|
||||
class ApplicationInstancePrivate
|
||||
{
|
||||
ApplicationInstance* q_ptr = nullptr;
|
||||
Q_DECLARE_PUBLIC(ApplicationInstance);
|
||||
|
||||
Application* application;
|
||||
ApplicationInstanceAdaptor* adapter;
|
||||
QString m_path;
|
||||
Application* application;
|
||||
ApplicationInstanceAdaptor* adapter;
|
||||
QString m_path;
|
||||
QSharedPointer<modules::ApplicationHelper::Helper> helper;
|
||||
QDateTime startupTime;
|
||||
QString m_id;
|
||||
QDateTime startupTime;
|
||||
QString m_id;
|
||||
uint32_t pid;
|
||||
|
||||
public:
|
||||
ApplicationInstancePrivate(ApplicationInstance* parent) : q_ptr(parent)
|
||||
{
|
||||
startupTime = QDateTime::currentDateTime();
|
||||
m_id = QString(QCryptographicHash::hash(QUuid::createUuid().toByteArray(), QCryptographicHash::Md5).toHex());
|
||||
m_path = QString("/org/desktopspec/ApplicationInstance/%1").arg(m_id);
|
||||
adapter = new ApplicationInstanceAdaptor(q_ptr);
|
||||
m_id = QString(QCryptographicHash::hash(QUuid::createUuid().toByteArray(), QCryptographicHash::Md5).toHex());
|
||||
m_path = QString("/org/desktopspec/ApplicationInstance/%1").arg(m_id);
|
||||
adapter = new ApplicationInstanceAdaptor(q_ptr);
|
||||
}
|
||||
|
||||
~ApplicationInstancePrivate()
|
||||
@ -47,16 +47,18 @@ public:
|
||||
{
|
||||
#ifdef DEFINE_LOADER_PATH
|
||||
|
||||
const QString task_hash{ QString("DAM_TASK_HASH=%1").arg(m_id) };
|
||||
const QString task_type{ "DAM_TASK_TYPE=freedesktop " };
|
||||
QProcess* p = new QProcess(q_ptr);
|
||||
p->connect(p, static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), p, [=] {
|
||||
const QString task_hash{QString("DAM_TASK_HASH=%1").arg(m_id)};
|
||||
const QString task_type{"DAM_TASK_TYPE=freedesktop "};
|
||||
QProcess* p = new QProcess(q_ptr);
|
||||
p->connect(p, static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), p, [ = ] {
|
||||
qInfo().noquote() << p->readAllStandardOutput();
|
||||
qWarning().noquote() << p->readAllStandardError();
|
||||
});
|
||||
p->connect(p, static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), q_ptr, &ApplicationInstance::taskFinished);
|
||||
p->connect(p, &QProcess::readyReadStandardOutput, p, [=] { qInfo() << p->readAllStandardOutput(); });
|
||||
p->connect(p, &QProcess::readyReadStandardError, p, [=] { qWarning() << p->readAllStandardError(); });
|
||||
p->connect(p, &QProcess::readyReadStandardOutput, p, [ = ]
|
||||
{ qInfo() << p->readAllStandardOutput(); });
|
||||
p->connect(p, &QProcess::readyReadStandardError, p, [ = ]
|
||||
{ qWarning() << p->readAllStandardError(); });
|
||||
p->setProgram(LOADER_PATH);
|
||||
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
|
||||
env.insert("DAM_TASK_HASH", m_id);
|
||||
@ -65,11 +67,11 @@ public:
|
||||
p->start();
|
||||
p->waitForStarted();
|
||||
if (p->state() == QProcess::ProcessState::NotRunning) {
|
||||
emit q_ptr->taskFinished(p->exitCode());
|
||||
Q_EMIT q_ptr->taskFinished(p->exitCode());
|
||||
}
|
||||
#else
|
||||
qInfo() << "app manager load service:" << QString("org.desktopspec.application.instance@%1.service").arg(m_id);
|
||||
QDBusInterface systemd("org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager");
|
||||
QDBusInterface systemd("org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager");
|
||||
QDBusReply<void> reply = systemd.call("StartUnit", QString("org.desktopspec.application.instance@%1.service").arg(m_id), "replace-irreversibly");
|
||||
if (!reply.isValid()) {
|
||||
qInfo() << reply.error();
|
||||
@ -88,19 +90,28 @@ public:
|
||||
}
|
||||
|
||||
void _kill() {}
|
||||
uint32_t _getPid()
|
||||
{
|
||||
return pid;
|
||||
}
|
||||
|
||||
void _success(const QString& data)
|
||||
{
|
||||
pid = data.toUInt();
|
||||
}
|
||||
};
|
||||
|
||||
ApplicationInstance::ApplicationInstance(Application* parent, QSharedPointer<modules::ApplicationHelper::Helper> helper, QStringList files)
|
||||
: QObject(nullptr)
|
||||
, dd_ptr(new ApplicationInstancePrivate(this))
|
||||
, m_files(files)
|
||||
: QObject(nullptr)
|
||||
, dd_ptr(new ApplicationInstancePrivate(this))
|
||||
, m_files(files)
|
||||
{
|
||||
Q_D(ApplicationInstance);
|
||||
|
||||
d->application = parent;
|
||||
d->helper = helper;
|
||||
d->helper = helper;
|
||||
|
||||
QTimer::singleShot(0, this, [=] {
|
||||
QTimer::singleShot(0, this, [ = ] {
|
||||
QDBusConnection::sessionBus().registerObject(d->m_path, "org.desktopspec.ApplicationInstance", this);
|
||||
d->run();
|
||||
});
|
||||
@ -145,17 +156,17 @@ Methods::Task ApplicationInstance::taskInfo() const
|
||||
Q_D(const ApplicationInstance);
|
||||
|
||||
Methods::Task task;
|
||||
task.id = d->m_id;
|
||||
task.id = d->m_id;
|
||||
task.runId = d->application->id();
|
||||
task.filePath = d->application->filePath();
|
||||
task.date = QString::number(startuptime());
|
||||
task.date = QString::number(startuptime());
|
||||
task.arguments = m_files;
|
||||
|
||||
// TODO: debug to display environment
|
||||
task.environments.insert( "DISPLAY", ":0" );
|
||||
task.environments.insert("DISPLAY", ":0");
|
||||
auto sysEnv = QProcessEnvironment::systemEnvironment();
|
||||
for (const auto& key : sysEnv.keys()) {
|
||||
task.environments.insert( key, sysEnv.value(key) );
|
||||
task.environments.insert(key, sysEnv.value(key));
|
||||
}
|
||||
|
||||
return task;
|
||||
@ -174,3 +185,17 @@ void ApplicationInstance::Kill()
|
||||
|
||||
return d->_kill();
|
||||
}
|
||||
|
||||
uint32_t ApplicationInstance::getPid()
|
||||
{
|
||||
Q_D(ApplicationInstance);
|
||||
|
||||
return d->_getPid();
|
||||
}
|
||||
|
||||
void ApplicationInstance::Success(const QString& data)
|
||||
{
|
||||
Q_D(ApplicationInstance);
|
||||
QDBusConnection::sessionBus().registerObject(d->m_path, "org.desktopspec.ApplicationInstance", this);
|
||||
return d->_success(data);
|
||||
}
|
||||
|
@ -41,6 +41,8 @@ Q_SIGNALS:
|
||||
public Q_SLOTS: // METHODS
|
||||
void Exit();
|
||||
void Kill();
|
||||
void Success(const QString& data);
|
||||
uint32_t getPid();
|
||||
};
|
||||
|
||||
#endif /* D6D05668_8A58_43AA_91C5_C6278643A1AF */
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include <map>
|
||||
#include <mutex>
|
||||
#include <thread>
|
||||
#include <QProcess>
|
||||
|
||||
#include "../../modules/methods/basic.h"
|
||||
#include "../../modules/methods/instance.hpp"
|
||||
@ -21,20 +22,23 @@
|
||||
#include "application.h"
|
||||
#include "application_instance.h"
|
||||
#include "applicationinstanceadaptor.h"
|
||||
#include "../lib/keyfile.h"
|
||||
|
||||
ApplicationManagerPrivate::ApplicationManagerPrivate(ApplicationManager *parent)
|
||||
ApplicationManagerPrivate::ApplicationManagerPrivate(ApplicationManager* parent)
|
||||
: QObject(parent)
|
||||
, q_ptr(parent)
|
||||
, startManager(new StartManager(this))
|
||||
, virtualMachePath("/usr/share/dde-daemon/supportVirsConf.ini")
|
||||
, section("AppName")
|
||||
, key("support")
|
||||
{
|
||||
const QString socketPath{QString("/run/user/%1/deepin-application-manager.socket").arg(getuid())};
|
||||
connect(&server, &Socket::Server::onReadyRead, this, &ApplicationManagerPrivate::recvClientData, Qt::QueuedConnection);
|
||||
server.listen(socketPath.toStdString());
|
||||
const QString socketPath{QString("/run/user/%1/deepin-application-manager.socket").arg(getuid())};
|
||||
connect(&server, &Socket::Server::onReadyRead, this, &ApplicationManagerPrivate::recvClientData, Qt::QueuedConnection);
|
||||
server.listen(socketPath.toStdString());
|
||||
}
|
||||
|
||||
ApplicationManagerPrivate::~ApplicationManagerPrivate()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool ApplicationManagerPrivate::checkDMsgUid()
|
||||
@ -48,7 +52,7 @@ bool ApplicationManagerPrivate::checkDMsgUid()
|
||||
* @param socket 客户端套接字
|
||||
* @param data 接受到客户端数据
|
||||
*/
|
||||
void ApplicationManagerPrivate::recvClientData(int socket, const std::vector<char> &data)
|
||||
void ApplicationManagerPrivate::recvClientData(int socket, const std::vector<char>& data)
|
||||
{
|
||||
QByteArray jsonArray = data.data();
|
||||
Methods::Basic basic;
|
||||
@ -75,8 +79,9 @@ void ApplicationManagerPrivate::recvClientData(int socket, const std::vector<cha
|
||||
|
||||
// 退出
|
||||
if (basic.type == "quit") {
|
||||
Methods::Quit quit;
|
||||
Methods::ProcessStatus quit;
|
||||
Methods::fromJson(jsonArray, quit);
|
||||
processInstanceStatus(quit);
|
||||
server.close(socket);
|
||||
std::cout << "client quit" << std::endl;
|
||||
break;
|
||||
@ -100,18 +105,26 @@ void ApplicationManagerPrivate::recvClientData(int socket, const std::vector<cha
|
||||
write(socket, tmpArray.toStdString());
|
||||
break;
|
||||
}
|
||||
|
||||
if (basic.type == "success") {
|
||||
Methods::ProcessStatus processSuccess;
|
||||
Methods::fromJson(jsonArray, processSuccess);
|
||||
processInstanceStatus(processSuccess);
|
||||
std::cout << "client success" << std::endl;
|
||||
break;
|
||||
}
|
||||
write(socket, jsonArray.toStdString());
|
||||
} while (false);
|
||||
}
|
||||
|
||||
void ApplicationManagerPrivate::write(int socket, const std::vector<char> &data)
|
||||
void ApplicationManagerPrivate::write(int socket, const std::vector<char>& data)
|
||||
{
|
||||
std::vector<char> tmp = data;
|
||||
tmp.push_back('\0');
|
||||
server.write(socket, tmp);
|
||||
}
|
||||
|
||||
void ApplicationManagerPrivate::write(int socket, const std::string &data)
|
||||
void ApplicationManagerPrivate::write(int socket, const std::string& data)
|
||||
{
|
||||
std::vector<char> result;
|
||||
std::copy(data.cbegin(), data.cend(), std::back_inserter(result));
|
||||
@ -123,15 +136,54 @@ void ApplicationManagerPrivate::write(int socket, const char c)
|
||||
return write(socket, std::vector<char>(c));
|
||||
}
|
||||
|
||||
void ApplicationManagerPrivate::init()
|
||||
{
|
||||
KeyFile keyFile;
|
||||
keyFile.loadFile(virtualMachePath);
|
||||
virtualMachines = keyFile.getStrList(section, key);
|
||||
if (virtualMachines.empty()) {
|
||||
virtualMachines = {"hvm", "bochs", "virt", "vmware", "kvm", "cloud", "invented"};
|
||||
}
|
||||
}
|
||||
|
||||
ApplicationManager* ApplicationManager::instance() {
|
||||
void ApplicationManagerPrivate::processInstanceStatus(Methods::ProcessStatus instanceStatus)
|
||||
{
|
||||
bool bFound = false;
|
||||
|
||||
auto application = applications.begin();
|
||||
while (application != applications.end()) {
|
||||
|
||||
auto instance = (*application)->getAllInstances().begin();
|
||||
while (instance != (*application)->getAllInstances().end()) {
|
||||
if ((*instance)->hash() == instanceStatus.id) {
|
||||
bFound = true;
|
||||
}
|
||||
if (bFound) {
|
||||
if (instanceStatus.type == "success") {
|
||||
(*instance)->Success(instanceStatus.data);
|
||||
} else if (instanceStatus.type == "quit") {
|
||||
(*instance)->Exit();
|
||||
(*application)->getAllInstances().erase(instance);
|
||||
} else {
|
||||
qWarning() << "instance tyep : " << instanceStatus.type << "not found";
|
||||
}
|
||||
return;
|
||||
}
|
||||
instance++;
|
||||
}
|
||||
application++;
|
||||
}
|
||||
}
|
||||
|
||||
ApplicationManager* ApplicationManager::instance()
|
||||
{
|
||||
static ApplicationManager manager;
|
||||
return &manager;
|
||||
}
|
||||
|
||||
ApplicationManager::ApplicationManager(QObject *parent)
|
||||
: QObject(parent)
|
||||
, dd_ptr(new ApplicationManagerPrivate(this))
|
||||
ApplicationManager::ApplicationManager(QObject* parent)
|
||||
: QObject(parent)
|
||||
, dd_ptr(new ApplicationManagerPrivate(this))
|
||||
{
|
||||
Q_D(ApplicationManager);
|
||||
|
||||
@ -140,7 +192,7 @@ ApplicationManager::ApplicationManager(QObject *parent)
|
||||
|
||||
ApplicationManager::~ApplicationManager() {}
|
||||
|
||||
void ApplicationManager::addApplication(const QList<QSharedPointer<Application>> &list)
|
||||
void ApplicationManager::addApplication(const QList<QSharedPointer<Application>>& list)
|
||||
{
|
||||
Q_D(ApplicationManager);
|
||||
|
||||
@ -164,14 +216,14 @@ void ApplicationManager::launchAutostartApps()
|
||||
*/
|
||||
}
|
||||
|
||||
QDBusObjectPath ApplicationManager::GetInformation(const QString &id)
|
||||
QDBusObjectPath ApplicationManager::GetInformation(const QString& id)
|
||||
{
|
||||
Q_D(ApplicationManager);
|
||||
|
||||
if (!d->checkDMsgUid())
|
||||
return {};
|
||||
|
||||
for (const QSharedPointer<Application> &app : d->applications) {
|
||||
for (const QSharedPointer<Application>& app : d->applications) {
|
||||
if (app->id() == id) {
|
||||
return app->path();
|
||||
}
|
||||
@ -179,13 +231,13 @@ QDBusObjectPath ApplicationManager::GetInformation(const QString &id)
|
||||
return {};
|
||||
}
|
||||
|
||||
QList<QDBusObjectPath> ApplicationManager::GetInstances(const QString &id)
|
||||
QList<QDBusObjectPath> ApplicationManager::GetInstances(const QString& id)
|
||||
{
|
||||
Q_D(ApplicationManager);
|
||||
if (!d->checkDMsgUid())
|
||||
return {};
|
||||
|
||||
for (const auto &app : d->applications) {
|
||||
for (const auto& app : d->applications) {
|
||||
if (app->id() == id) {
|
||||
return app->instances();
|
||||
}
|
||||
@ -200,7 +252,7 @@ QList<QDBusObjectPath> ApplicationManager::GetInstances(const QString &id)
|
||||
* @param files 应用打开的文件
|
||||
* @return
|
||||
*/
|
||||
QDBusObjectPath ApplicationManager::Launch(const QString &id, QStringList files)
|
||||
QDBusObjectPath ApplicationManager::Launch(const QString& id, QStringList files)
|
||||
{
|
||||
qInfo() << "Launch " << id;
|
||||
Q_D(ApplicationManager);
|
||||
@ -208,14 +260,14 @@ QDBusObjectPath ApplicationManager::Launch(const QString &id, QStringList files)
|
||||
return {};
|
||||
|
||||
// 创建一个实例
|
||||
for (const QSharedPointer<Application> &app : d->applications) {
|
||||
for (const QSharedPointer<Application>& app : d->applications) {
|
||||
QString appId = app->id();
|
||||
if (app->id() == id) {
|
||||
// 创建任务所需的数据,并记录到任务队列,等待 loader 消耗
|
||||
QSharedPointer<ApplicationInstance> 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) {
|
||||
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;
|
||||
@ -343,7 +395,7 @@ QList<QDBusObjectPath> ApplicationManager::instances() const
|
||||
|
||||
QList<QDBusObjectPath> result;
|
||||
|
||||
for (const auto &app : d->applications) {
|
||||
for (const auto& app : d->applications) {
|
||||
result += app->instances();
|
||||
}
|
||||
|
||||
@ -355,11 +407,48 @@ QList<QDBusObjectPath> ApplicationManager::list() const
|
||||
Q_D(const ApplicationManager);
|
||||
|
||||
QList<QDBusObjectPath> result;
|
||||
for (const QSharedPointer<Application> &app : d->applications) {
|
||||
for (const QSharedPointer<Application>& app : d->applications) {
|
||||
result << app->path();
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
for (auto app : d->applications) {
|
||||
for (auto instance : app->getAllInstances()) {
|
||||
if (instance->getPid() == pid) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#include "application_manager.moc"
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
#include "../../modules/startmanager/startmanager.h"
|
||||
#include "../../modules/socket/server.h"
|
||||
#include "../../modules/methods/process_status.hpp"
|
||||
|
||||
#include <QObject>
|
||||
#include <QDBusObjectPath>
|
||||
@ -22,6 +23,10 @@ class ApplicationManagerPrivate : public QObject
|
||||
Socket::Server server;
|
||||
std::multimap<std::string, QSharedPointer<ApplicationInstance>> tasks;
|
||||
StartManager *startManager;
|
||||
std::vector<std::string> virtualMachines;
|
||||
const std::string virtualMachePath;
|
||||
const std::string section;
|
||||
const std::string key;
|
||||
|
||||
public:
|
||||
ApplicationManagerPrivate(ApplicationManager *parent);
|
||||
@ -29,6 +34,7 @@ public:
|
||||
|
||||
// 检测调用方身份
|
||||
bool checkDMsgUid();
|
||||
void init();
|
||||
|
||||
private:
|
||||
void recvClientData(int socket, const std::vector<char> &data);
|
||||
@ -38,6 +44,8 @@ private:
|
||||
void write(int socket, const std::string &data);
|
||||
|
||||
void write(int socket, const char c);
|
||||
|
||||
void processInstanceStatus(Methods::ProcessStatus instanceStatus);
|
||||
};
|
||||
|
||||
class ApplicationManager : public QObject, public QDBusContext
|
||||
@ -55,6 +63,8 @@ public:
|
||||
|
||||
void addApplication(const QList<QSharedPointer<Application>> &list);
|
||||
void launchAutostartApps();
|
||||
void processInstanceStatus(Methods::ProcessStatus instanceStatus);
|
||||
|
||||
|
||||
Q_SIGNALS:
|
||||
void AutostartChanged(QString status, QString filePath);
|
||||
@ -84,6 +94,8 @@ public Q_SLOTS: // METHODS
|
||||
void RunCommand(QString exe, QStringList args);
|
||||
void RunCommandWithOptions(QString exe, QStringList args, QMap<QString, QString> options);
|
||||
void TryAgain(bool launch);
|
||||
bool IsPidVirtualMachine(uint32_t pid);
|
||||
bool IsProcessExist(uint32_t pid);
|
||||
};
|
||||
|
||||
#endif /* A2862DC7_5DA3_4129_9796_671D88015BED */
|
||||
|
@ -5,10 +5,12 @@
|
||||
#include "applicationmanageradaptor.h"
|
||||
#include "applicationadaptor.h"
|
||||
#include "applicationhelper.h"
|
||||
#include "mimeadaptor.h"
|
||||
#include "../modules/apps/appmanager.h"
|
||||
#include "../modules/launcher/launchermanager.h"
|
||||
#include "../modules/dock/dockmanager.h"
|
||||
#include "../modules/startmanager/startmanager.h"
|
||||
#include "../modules/mimeapp/mime_app.h"
|
||||
|
||||
#include <QDir>
|
||||
#include <DLog>
|
||||
@ -103,5 +105,11 @@ int main(int argc, char *argv[])
|
||||
|
||||
ApplicationManager::instance()->launchAutostartApps();
|
||||
|
||||
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);
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
|
Reference in New Issue
Block a user