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