#pragma once #include #include "utils/env.hpp" #include "adapters/mpd.hpp" #include "modules/meta/event_module.hpp" #include "modules/meta/input_handler.hpp" POLYBAR_NS using namespace mpd; namespace modules { class mpd_module : public event_module, public input_handler { public: explicit mpd_module(const bar_settings&, string); void teardown(); inline bool connected() const; void idle(); bool has_event(); bool update(); string get_format() const; string get_output(); bool build(builder* builder, const string& tag) const; protected: bool input(string&& cmd); private: static constexpr const char* FORMAT_ONLINE{"format-online"}; static constexpr const char* FORMAT_PLAYING{"format-playing"}; static constexpr const char* FORMAT_PAUSED{"format-paused"}; static constexpr const char* FORMAT_STOPPED{"format-stopped"}; static constexpr const char* TAG_BAR_PROGRESS{""}; static constexpr const char* TAG_TOGGLE{""}; static constexpr const char* TAG_TOGGLE_STOP{""}; static constexpr const char* TAG_LABEL_SONG{""}; static constexpr const char* TAG_LABEL_TIME{""}; static constexpr const char* TAG_ICON_RANDOM{""}; static constexpr const char* TAG_ICON_REPEAT{""}; /* * Deprecated */ static constexpr const char* TAG_ICON_REPEAT_ONE{""}; /* * Replaces icon-repeatone * * repeatone is misleading, since it doesn't actually affect the repeating behaviour */ static constexpr const char* TAG_ICON_SINGLE{""}; static constexpr const char* TAG_ICON_CONSUME{""}; static constexpr const char* TAG_ICON_PREV{""}; static constexpr const char* TAG_ICON_STOP{""}; static constexpr const char* TAG_ICON_PLAY{""}; static constexpr const char* TAG_ICON_PAUSE{""}; static constexpr const char* TAG_ICON_NEXT{""}; static constexpr const char* TAG_ICON_SEEKB{""}; static constexpr const char* TAG_ICON_SEEKF{""}; static constexpr const char* FORMAT_OFFLINE{"format-offline"}; static constexpr const char* TAG_LABEL_OFFLINE{""}; static constexpr const char* EVENT_PLAY{"mpdplay"}; static constexpr const char* EVENT_PAUSE{"mpdpause"}; static constexpr const char* EVENT_STOP{"mpdstop"}; static constexpr const char* EVENT_PREV{"mpdprev"}; static constexpr const char* EVENT_NEXT{"mpdnext"}; static constexpr const char* EVENT_REPEAT{"mpdrepeat"}; static constexpr const char* EVENT_SINGLE{"mpdsingle"}; static constexpr const char* EVENT_RANDOM{"mpdrandom"}; static constexpr const char* EVENT_CONSUME{"mpdconsume"}; static constexpr const char* EVENT_SEEK{"mpdseek"}; unique_ptr m_mpd; /* * Stores the mpdstatus instance for the current connection * m_status is not initialized if mpd is not connect, you always have to * make sure that m_status is not NULL before dereferencing it */ unique_ptr m_status; string m_host{env_util::get("MPD_HOST", "127.0.0.1")}; string m_pass; unsigned int m_port{6600U}; chrono::system_clock::time_point m_lastsync{}; float m_synctime{1.0f}; int m_quick_attempts{0}; // This flag is used to let thru a broadcast once every time // the connection state changes connection_state m_statebroadcasted{connection_state::NONE}; progressbar_t m_bar_progress; iconset_t m_icons; label_t m_label_song; label_t m_label_time; label_t m_label_offline; string m_toggle_on_color; string m_toggle_off_color; }; } POLYBAR_NS_END