#pragma once #include #include #include #include #include "services/dbus/messages.hpp" class MprisController { public: struct PlayerState { std::string title; std::vector artist; std::string artwork_url; int64_t length_ms; }; enum class PlaybackStatus { Playing, Paused, Stopped, }; static std::shared_ptr getInstance(); void toggle_play(); void next_song(); void previous_song(); void emit_seeked(int64_t position_us); sigc::signal &signal_mpris_updated(); sigc::signal &signal_playback_status_changed(); sigc::signal &signal_playback_position_changed(); private: MprisController(); std::map playbackStatusMap = { {"Playing", PlaybackStatus::Playing}, {"Paused", PlaybackStatus::Paused}, {"Stopped", PlaybackStatus::Stopped}, }; PlaybackStatus currentPlaybackStatus = PlaybackStatus::Stopped; Glib::RefPtr m_connection; Glib::RefPtr m_proxy; sigc::signal mprisUpdatedSignal; sigc::signal playbackStatusChangedSignal; sigc::signal playbackPositionChangedSignal; void on_bus_connected(const Glib::RefPtr &result); void signalNotification(); // Called when the song changes void on_properties_changed(const Gio::DBus::Proxy::MapChangedProperties &changed_properties, const std::vector &invalidated_properties); };