#pragma once #include #include #include #include #include #include #include #include #include #include #include #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(QQmlListProperty players READ players NOTIFY playersChanged); public: explicit MprisWatcher(QObject* parent = nullptr); [[nodiscard]] QQmlListProperty players(); signals: void playersChanged(); private slots: void onServiceRegistered(const QString& service); void onServiceUnregistered(const QString& service); void onPlayerReady(); void onPlayerDestroyed(QObject* object); private: static qsizetype playersCount(QQmlListProperty* property); static MprisPlayer* playerAt(QQmlListProperty* property, qsizetype index); void registerExisting(); void registerPlayer(const QString& address); QDBusServiceWatcher serviceWatcher; QHash mPlayers; QList readyPlayers; }; } // namespace qs::service::mpris