#pragma once #include #include #include #include #include #include #include #include #include #include "../../core/model.hpp" #include "player.hpp" namespace qs::service::mpris { ///! Provides access to MprisPlayers. class MprisWatcher: public QObject { Q_OBJECT; QML_NAMED_ELEMENT(Mpris); QML_SINGLETON; /// All connected MPRIS players. Q_PROPERTY(ObjectModel* players READ players CONSTANT); public: explicit MprisWatcher(QObject* parent = nullptr); [[nodiscard]] ObjectModel* players(); private slots: void onServiceRegistered(const QString& service); void onServiceUnregistered(const QString& service); void onPlayerReady(); void onPlayerDestroyed(QObject* object); private: void registerExisting(); void registerPlayer(const QString& address); QDBusServiceWatcher serviceWatcher; QHash mPlayers; ObjectModel readyPlayers {this}; }; } // namespace qs::service::mpris