#pragma once #include "modules/base.hpp" #include "interfaces/mpd.hpp" #include "drawtypes/bar.hpp" #include "drawtypes/icon.hpp" #include "drawtypes/label.hpp" namespace modules { DefineModule(MpdModule, EventModule) { std::string mpd_host = "127.0.0.1"; std::string mpd_pass = ""; int mpd_port = 6600; static const int PROGRESSBAR_THREAD_SYNC_COUNT = 10; const std::chrono::duration PROGRESSBAR_THREAD_INTERVAL = 1s; static constexpr auto FORMAT_ONLINE = "format-online"; static constexpr auto TAG_BAR_PROGRESS = ""; static constexpr auto TAG_TOGGLE = ""; static constexpr auto TAG_LABEL_SONG = ""; static constexpr auto TAG_LABEL_TIME = ""; static constexpr auto TAG_ICON_RANDOM = ""; static constexpr auto TAG_ICON_REPEAT = ""; static constexpr auto TAG_ICON_REPEAT_ONE = ""; static constexpr auto TAG_ICON_PREV = ""; static constexpr auto TAG_ICON_STOP = ""; static constexpr auto TAG_ICON_PLAY = ""; static constexpr auto TAG_ICON_PAUSE = ""; static constexpr auto TAG_ICON_NEXT = ""; static constexpr auto TAG_ICON_SEEKB = ""; static constexpr auto TAG_ICON_SEEKF = ""; static constexpr auto FORMAT_OFFLINE = "format-offline"; static constexpr auto TAG_LABEL_OFFLINE = ""; static constexpr auto EVENT_PLAY = "mpdplay"; static constexpr auto EVENT_PAUSE = "mpdpause"; static constexpr auto EVENT_STOP = "mpdstop"; static constexpr auto EVENT_PREV = "mpdprev"; static constexpr auto EVENT_NEXT = "mpdnext"; static constexpr auto EVENT_REPEAT = "mpdrepeat"; static constexpr auto EVENT_REPEAT_ONE = "mpdrepeatone"; static constexpr auto EVENT_RANDOM = "mpdrandom"; static constexpr auto EVENT_SEEK = "mpdseek"; std::unique_ptr bar_progress; std::unique_ptr icons; std::unique_ptr label_song; std::unique_ptr label_song_tokenized; std::unique_ptr label_time; std::unique_ptr label_time_tokenized; std::unique_ptr label_offline; std::unique_ptr status; std::string toggle_on_color; std::string toggle_off_color; std::unique_ptr mpd; std::chrono::system_clock::time_point synced_at; float sync_interval = 1.0f; std::string progress_fill, progress_empty, progress_indicator; // This flag is used to let thru a broadcast once every time // the connection state changes concurrency::Atomic connection_state_broadcasted { true }; public: explicit MpdModule(std::string name); ~MpdModule(); void start(); bool has_event(); bool update(); std::string get_format(); bool build(Builder *builder, std::string tag); bool handle_command(std::string cmd); bool register_for_events() const { return true; } }; }