// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef APPLICATIONMANAGER1SERVICE_H #define APPLICATIONMANAGER1SERVICE_H #include #include #include #include #include #include #include #include "dbus/jobmanager1service.h" #include "dbus/applicationservice.h" #include "dbus/applicationadaptor.h" #include "identifier.h" class ApplicationManager1Service final : public QObject { Q_OBJECT public: explicit ApplicationManager1Service(std::unique_ptr ptr, QDBusConnection &connection); ~ApplicationManager1Service() override; ApplicationManager1Service(const ApplicationManager1Service &) = delete; ApplicationManager1Service(ApplicationManager1Service &&) = delete; ApplicationManager1Service &operator=(const ApplicationManager1Service &) = delete; ApplicationManager1Service &operator=(ApplicationManager1Service &&) = delete; Q_PROPERTY(QList List READ list) [[nodiscard]] QList list() const; template bool addApplication(T &&desktopFileSource) { QSharedPointer application{new ApplicationService{std::forward(desktopFileSource), this}}; if (!application) { return false; } auto *ptr = application.data(); new ApplicationAdaptor{ptr}; if (!registerObjectToDBus(ptr, application->m_applicationPath.path(), getDBusInterface())) { return false; } m_applicationList.insert(application->m_applicationPath, application); return true; } void removeOneApplication(const QDBusObjectPath &application); void removeAllApplication(); void updateApplication(const QSharedPointer &deskApp, const DesktopFile &desktopFile) noexcept; JobManager1Service &jobManager() noexcept { return *m_jobManager; } public Q_SLOTS: [[nodiscard]] QDBusObjectPath Application(const QString &id) const; QString Identify(const QDBusUnixFileDescriptor &pidfd, QDBusObjectPath &application, QDBusObjectPath &application_instance); QDBusObjectPath Launch(const QString &id, const QString &action, const QStringList &fields, const QVariantMap &options); void UpdateApplicationInfo(const QStringList &appIdList); private: std::unique_ptr m_identifier; QScopedPointer m_jobManager{nullptr}; QMap> m_applicationList; }; #endif