#pragma once #include #include #include #include #include #include "../../dbus/properties.hpp" #include "dbus_player.h" Q_DECLARE_LOGGING_CATEGORY(logMprisPlayer); namespace qs::service::mp { class MprisPlayer; class MprisPlayer: public QObject { Q_OBJECT; public: explicit MprisPlayer(const QString& address, QObject* parent = nullptr); QString watcherId; // TODO: maybe can be private CHECK void setPosition(QDBusObjectPath trackId, qlonglong position); void next(); void previous(); void pause(); void playPause(); void stop(); void play(); [[nodiscard]] bool isValid() const; [[nodiscard]] bool isReady() const; // clang-format off dbus::DBusPropertyGroup properties; dbus::DBusProperty canControl {this->properties, "CanControl" }; dbus::DBusProperty canGoNext {this->properties, "CanGoNext" }; dbus::DBusProperty canGoPrevious {this->properties, "CanGoPrevious" }; dbus::DBusProperty canPlay {this->properties, "CanPlay" }; dbus::DBusProperty canPause {this->properties, "CanPause" }; dbus::DBusProperty metadata {this->properties, "Metadata"}; dbus::DBusProperty playbackStatus {this->properties, "PlaybackStatus" }; dbus::DBusProperty position {this->properties, "Position" }; dbus::DBusProperty minimumRate {this->properties, "MinimumRate" }; dbus::DBusProperty maximumRate {this->properties, "MaximumRate" }; dbus::DBusProperty loopStatus {this->properties, "LoopStatus" }; dbus::DBusProperty rate {this->properties, "Rate" }; dbus::DBusProperty shuffle {this->properties, "Shuffle" }; dbus::DBusProperty volume {this->properties, "Volume" }; // clang-format on signals: void ready(); private slots: void onGetAllFinished(); void updatePlayer(); private: DBusMprisPlayer* player = nullptr; bool mReady = false; }; } // namespace qs::service::mp