#ifndef A2862DC7_5DA3_4129_9796_671D88015BED #define A2862DC7_5DA3_4129_9796_671D88015BED #include "../../modules/startmanager/startmanager.h" #include "../../modules/socket/server.h" #include "../../modules/methods/process_status.hpp" #include #include #include #include #include class Application; class ApplicationInstance; class ApplicationManagerPrivate : public QObject { Q_OBJECT ApplicationManager *q_ptr = nullptr; Q_DECLARE_PUBLIC(ApplicationManager); QList> applications; Socket::Server server; std::multimap> tasks; StartManager *startManager; std::vector virtualMachines; const std::string virtualMachePath; const std::string section; const std::string key; public: ApplicationManagerPrivate(ApplicationManager *parent); ~ApplicationManagerPrivate(); // 检测调用方身份 bool checkDMsgUid(); void init(); private: void recvClientData(int socket, const std::vector &data); void write(int socket, const std::vector &data); 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 { Q_OBJECT Q_PROPERTY(QList instances READ instances) Q_PROPERTY(QList list READ list) QScopedPointer dd_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(dd_ptr), ApplicationManager) public: static ApplicationManager* instance(); void addApplication(const QList> &list); void launchAutostartApps(); void processInstanceStatus(Methods::ProcessStatus instanceStatus); Q_SIGNALS: void AutostartChanged(const QString &status, const QString &filePath); public Q_SLOTS: bool AddAutostart(const QString &desktop); QStringList AutostartList(); bool IsAutostart(const QString &fileName); bool RemoveAutostart(const QString &fileName); void Launch(const QString &desktopFile); void LaunchApp(const QString &desktopFile, uint32_t timestamp, const QStringList &files); void LaunchAppAction(const QString &desktopFile, const QString &action, uint32_t timestamp); protected: ApplicationManager(QObject *parent = nullptr); ~ApplicationManager() override; QList instances() const; QList list() const; QDBusObjectPath GetInformation(const QString &id); QList GetInstances(const QString &id); void LaunchAppWithOptions(QString desktopFile, uint32_t timestamp, QStringList files, QMap options); void RunCommandWithOptions(QString exe, QStringList args, QMap options); bool IsProcessExist(uint32_t pid); }; #endif /* A2862DC7_5DA3_4129_9796_671D88015BED */