#pragma once #include #include #include "adapters/mpd.hpp" #include "modules/meta/event_module.hpp" #include "utils/concurrency.hpp" POLYBAR_NS using namespace mpd; namespace chrono = std::chrono; namespace modules { class mpd_module : public event_module { public: using event_module::event_module; void setup(); void teardown(); inline bool connected() const; void idle(); bool has_event(); bool update(); string get_format() const; string get_output(); bool build(builder* builder, string tag) const; bool handle_event(string cmd); bool receive_events() const; private: static constexpr auto FORMAT_ONLINE = "format-online"; static constexpr auto TAG_BAR_PROGRESS = ""; static constexpr auto TAG_TOGGLE = ""; static constexpr auto TAG_TOGGLE_STOP = ""; 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"; progressbar_t m_bar_progress; iconset_t m_icons; label_t m_label_song; label_t m_label_time; label_t m_label_offline; unique_ptr m_mpd; unique_ptr m_status; string m_host = "127.0.0.1"; string m_pass = ""; unsigned int m_port = 6600; string m_toggle_on_color; string m_toggle_off_color; chrono::system_clock::time_point m_lastsync; float m_synctime = 1.0f; // This flag is used to let thru a broadcast once every time // the connection state changes mpd::connection_state m_statebroadcasted; }; } POLYBAR_NS_END