#pragma once #include #include #include #include #include #include #include #include Q_DECLARE_LOGGING_CATEGORY(logStatusNotifierWatcher); namespace qs::service::sni { class StatusNotifierWatcher : public QObject , protected QDBusContext { Q_OBJECT; Q_PROPERTY(qint32 ProtocolVersion READ protocolVersion); Q_PROPERTY(bool IsStatusNotifierHostRegistered READ isHostRegistered); Q_PROPERTY(QList RegisteredStatusNotifierItems READ registeredItems); public: explicit StatusNotifierWatcher(QObject* parent = nullptr); void tryRegister(); [[nodiscard]] qint32 protocolVersion() const { return 0; } // NOLINT [[nodiscard]] bool isHostRegistered() const; [[nodiscard]] QList registeredItems() const; // NOLINTBEGIN void RegisterStatusNotifierHost(const QString& host); void RegisterStatusNotifierItem(const QString& item); // NOLINTEND static StatusNotifierWatcher* instance(); signals: // NOLINTBEGIN void StatusNotifierHostRegistered(); void StatusNotifierHostUnregistered(); void StatusNotifierItemRegistered(const QString& service); void StatusNotifierItemUnregistered(const QString& service); // NOLINTEND private slots: void onServiceUnregistered(const QString& service); private: QString qualifiedItem(const QString& item); QDBusServiceWatcher serviceWatcher; QList hosts; QList items; }; } // namespace qs::service::sni