#ifndef _MODULES_MPD_HPP_ #define _MODULES_MPD_HPP_ #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) { static const int PROGRESSBAR_THREAD_SYNC_COUNT = 10; const std::chrono::duration PROGRESSBAR_THREAD_INTERVAL = 1s; const char *FORMAT_ONLINE = "format:online"; const char *TAG_BAR_PROGRESS = ""; const char *TAG_TOGGLE = ""; const char *TAG_LABEL_SONG = ""; const char *TAG_LABEL_TIME = ""; const char *TAG_ICON_RANDOM = ""; const char *TAG_ICON_REPEAT = ""; const char *TAG_ICON_REPEAT_ONE = ""; const char *TAG_ICON_PREV = ""; const char *TAG_ICON_STOP = ""; const char *TAG_ICON_PLAY = ""; const char *TAG_ICON_PAUSE = ""; const char *TAG_ICON_NEXT = ""; const char *FORMAT_OFFLINE = "format:offline"; const char *TAG_LABEL_OFFLINE = ""; const char *EVENT_PLAY = "mpdplay"; const char *EVENT_PAUSE = "mpdpause"; const char *EVENT_STOP = "mpdstop"; const char *EVENT_PREV = "mpdprev"; const char *EVENT_NEXT = "mpdnext"; const char *EVENT_REPEAT = "mpdrepeat"; const char *EVENT_REPEAT_ONE = "mpdrepeatone"; const char *EVENT_RANDOM = "mpdrandom"; const char *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::shared_ptr mpd; std::chrono::system_clock::time_point synced_at; float sync_interval; bool clickable_progress = false; std::string progress_fill, progress_empty, progress_indicator; public: MpdModule(const std::string& name); ~MpdModule(); void start(); bool has_event(); bool update(); std::string get_format(); bool build(Builder *builder, const std::string& tag); bool handle_command(const std::string& cmd); }; } #endif