task(mpd): Move connection settings to config
Closes jaagr/lemonbuddy#16
This commit is contained in:
parent
f19c11c3c8
commit
f667b739f0
@ -42,15 +42,6 @@ if(ENABLE_ALSA)
|
|||||||
CACHE STRING "Name of the ALSA soundcard driver")
|
CACHE STRING "Name of the ALSA soundcard driver")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(ENABLE_MPD)
|
|
||||||
set(SETTING_MPD_HOST "127.0.0.1"
|
|
||||||
CACHE STRING "Address MPD is bound to")
|
|
||||||
set(SETTING_MPD_PASSWORD ""
|
|
||||||
CACHE STRING "Password required for authentication")
|
|
||||||
set(SETTING_MPD_PORT "6600"
|
|
||||||
CACHE STRING "Port MPD is bound to")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(SETTING_CONNECTION_TEST_IP "8.8.8.8"
|
set(SETTING_CONNECTION_TEST_IP "8.8.8.8"
|
||||||
CACHE STRING "Address to ping when testing network connection")
|
CACHE STRING "Address to ping when testing network connection")
|
||||||
set(SETTING_PATH_BACKLIGHT_VAL "/sys/class/backlight/%card%/brightness"
|
set(SETTING_PATH_BACKLIGHT_VAL "/sys/class/backlight/%card%/brightness"
|
||||||
|
@ -524,6 +524,10 @@ See [the bspwm module](#user-content-dependencies) for details on `label:dimmed`
|
|||||||
[module/mpd]
|
[module/mpd]
|
||||||
type = internal/mpd
|
type = internal/mpd
|
||||||
|
|
||||||
|
;host = 127.0.0.1
|
||||||
|
;port = 6600
|
||||||
|
;password = mypassword
|
||||||
|
|
||||||
; Seconds to sleep between progressbar/song timer sync
|
; Seconds to sleep between progressbar/song timer sync
|
||||||
;interval = 0.5
|
;interval = 0.5
|
||||||
~~~
|
~~~
|
||||||
|
@ -9,9 +9,6 @@
|
|||||||
|
|
||||||
#define BUILDER_SPACE_TOKEN "%__"
|
#define BUILDER_SPACE_TOKEN "%__"
|
||||||
#define ALSA_SOUNDCARD "@SETTING_ALSA_SOUNDCARD@"
|
#define ALSA_SOUNDCARD "@SETTING_ALSA_SOUNDCARD@"
|
||||||
#define MPD_HOST "@SETTING_MPD_HOST@"
|
|
||||||
#define MPD_PASSWORD "@SETTING_MPD_PASSWORD@"
|
|
||||||
#define MPD_PORT @SETTING_MPD_PORT@
|
|
||||||
#define CONNECTION_TEST_IP "@SETTING_CONNECTION_TEST_IP@"
|
#define CONNECTION_TEST_IP "@SETTING_CONNECTION_TEST_IP@"
|
||||||
#define PATH_BACKLIGHT_VAL "@SETTING_PATH_BACKLIGHT_VAL@"
|
#define PATH_BACKLIGHT_VAL "@SETTING_PATH_BACKLIGHT_VAL@"
|
||||||
#define PATH_BACKLIGHT_MAX "@SETTING_PATH_BACKLIGHT_MAX@"
|
#define PATH_BACKLIGHT_MAX "@SETTING_PATH_BACKLIGHT_MAX@"
|
||||||
|
@ -59,6 +59,8 @@ namespace mpd
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Connection;
|
||||||
|
|
||||||
struct Status
|
struct Status
|
||||||
{
|
{
|
||||||
struct StatusDeleter
|
struct StatusDeleter
|
||||||
@ -88,7 +90,8 @@ namespace mpd
|
|||||||
unsigned long elapsed_time_ms;
|
unsigned long elapsed_time_ms;
|
||||||
|
|
||||||
void set(std::unique_ptr<struct mpd_status, StatusDeleter> status);
|
void set(std::unique_ptr<struct mpd_status, StatusDeleter> status);
|
||||||
void update(int event);
|
|
||||||
|
void update(int event, std::unique_ptr<Connection>& connection);
|
||||||
void update_timer();
|
void update_timer();
|
||||||
|
|
||||||
// unsigned get_total_time();
|
// unsigned get_total_time();
|
||||||
@ -112,9 +115,9 @@ namespace mpd
|
|||||||
};
|
};
|
||||||
|
|
||||||
std::unique_ptr<mpd_connection, ConnectionDeleter> connection;
|
std::unique_ptr<mpd_connection, ConnectionDeleter> connection;
|
||||||
std::string host = MPD_HOST;
|
std::string host;
|
||||||
std::string password = MPD_PASSWORD;
|
std::string password;
|
||||||
int port = MPD_PORT;
|
int port;
|
||||||
int timeout = 15;
|
int timeout = 15;
|
||||||
|
|
||||||
bool mpd_command_list_active = false;
|
bool mpd_command_list_active = false;
|
||||||
@ -127,9 +130,8 @@ namespace mpd
|
|||||||
void check_errors();
|
void check_errors();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Connection() = default;
|
Connection(std::string host, int port, std::string password)
|
||||||
|
: host(host), password(password), port(port) {}
|
||||||
static std::shared_ptr<Connection> &get();
|
|
||||||
|
|
||||||
void connect();
|
void connect();
|
||||||
void disconnect();
|
void disconnect();
|
||||||
|
@ -10,6 +10,10 @@ namespace modules
|
|||||||
{
|
{
|
||||||
DefineModule(MpdModule, EventModule)
|
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;
|
static const int PROGRESSBAR_THREAD_SYNC_COUNT = 10;
|
||||||
const std::chrono::duration<double> PROGRESSBAR_THREAD_INTERVAL = 1s;
|
const std::chrono::duration<double> PROGRESSBAR_THREAD_INTERVAL = 1s;
|
||||||
|
|
||||||
@ -53,7 +57,7 @@ namespace modules
|
|||||||
std::string toggle_on_color;
|
std::string toggle_on_color;
|
||||||
std::string toggle_off_color;
|
std::string toggle_off_color;
|
||||||
|
|
||||||
std::shared_ptr<mpd::Connection> mpd;
|
std::unique_ptr<mpd::Connection> mpd;
|
||||||
std::chrono::system_clock::time_point synced_at;
|
std::chrono::system_clock::time_point synced_at;
|
||||||
float sync_interval = 0.5f;
|
float sync_interval = 0.5f;
|
||||||
|
|
||||||
|
@ -10,15 +10,6 @@
|
|||||||
|
|
||||||
namespace mpd
|
namespace mpd
|
||||||
{
|
{
|
||||||
std::shared_ptr<Connection> conn;
|
|
||||||
std::shared_ptr<Connection> &Connection::get()
|
|
||||||
{
|
|
||||||
if (!conn)
|
|
||||||
conn = std::make_shared<Connection>();
|
|
||||||
return conn;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Base
|
// Base
|
||||||
|
|
||||||
void Connection::connect()
|
void Connection::connect()
|
||||||
@ -40,7 +31,7 @@ namespace mpd
|
|||||||
this->check_errors();
|
this->check_errors();
|
||||||
} catch(ClientError &e) {
|
} catch(ClientError &e) {
|
||||||
this->disconnect();
|
this->disconnect();
|
||||||
throw &e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -284,15 +275,15 @@ namespace mpd
|
|||||||
this->updated_at = std::chrono::system_clock::now();
|
this->updated_at = std::chrono::system_clock::now();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Status::update(int event)
|
void Status::update(int event, std::unique_ptr<Connection>& connection)
|
||||||
{
|
{
|
||||||
auto status = Connection::get()->get_status();
|
auto status = connection->get_status();
|
||||||
|
|
||||||
if (event & (MPD_IDLE_PLAYER | MPD_IDLE_OPTIONS)) {
|
if (event & (MPD_IDLE_PLAYER | MPD_IDLE_OPTIONS)) {
|
||||||
this->set(std::move(status->status));
|
this->set(std::move(status->status));
|
||||||
this->elapsed_time_ms = this->elapsed_time * 1000;
|
this->elapsed_time_ms = this->elapsed_time * 1000;
|
||||||
|
|
||||||
this->song = Connection::get()->get_song();
|
this->song = connection->get_song();
|
||||||
|
|
||||||
auto mpd_state = mpd_status_get_state(this->status.get());
|
auto mpd_state = mpd_status_get_state(this->status.get());
|
||||||
|
|
||||||
|
@ -13,6 +13,13 @@ using namespace mpd;
|
|||||||
MpdModule::MpdModule(const std::string& name_)
|
MpdModule::MpdModule(const std::string& name_)
|
||||||
: EventModule(name_), icons(std::make_unique<drawtypes::IconMap>())
|
: EventModule(name_), icons(std::make_unique<drawtypes::IconMap>())
|
||||||
{
|
{
|
||||||
|
// Load configuration values {{{
|
||||||
|
this->mpd_host = config::get<std::string>(this->name(), "host", "127.0.0.1");
|
||||||
|
this->mpd_port = config::get<int>(this->name(), "port", 6600);
|
||||||
|
this->mpd_pass = config::get<std::string>(this->name(), "password", "");
|
||||||
|
// }}}
|
||||||
|
|
||||||
|
// Add formats and elements {{{
|
||||||
this->formatter->add(FORMAT_ONLINE, TAG_LABEL_SONG, {
|
this->formatter->add(FORMAT_ONLINE, TAG_LABEL_SONG, {
|
||||||
TAG_BAR_PROGRESS, TAG_TOGGLE, TAG_LABEL_SONG, TAG_LABEL_TIME,
|
TAG_BAR_PROGRESS, TAG_TOGGLE, TAG_LABEL_SONG, TAG_LABEL_TIME,
|
||||||
TAG_ICON_RANDOM, TAG_ICON_REPEAT, TAG_ICON_REPEAT_ONE, TAG_ICON_PREV,
|
TAG_ICON_RANDOM, TAG_ICON_REPEAT, TAG_ICON_REPEAT_ONE, TAG_ICON_PREV,
|
||||||
@ -53,8 +60,11 @@ MpdModule::MpdModule(const std::string& name_)
|
|||||||
if (this->formatter->has(TAG_BAR_PROGRESS)) {
|
if (this->formatter->has(TAG_BAR_PROGRESS)) {
|
||||||
this->bar_progress = drawtypes::get_config_bar(name(), get_tag_name(TAG_BAR_PROGRESS));
|
this->bar_progress = drawtypes::get_config_bar(name(), get_tag_name(TAG_BAR_PROGRESS));
|
||||||
}
|
}
|
||||||
|
// }}}
|
||||||
|
|
||||||
|
// Sign up for stdin events {{{
|
||||||
register_command_handler(name());
|
register_command_handler(name());
|
||||||
|
// }}}
|
||||||
}
|
}
|
||||||
|
|
||||||
MpdModule::~MpdModule()
|
MpdModule::~MpdModule()
|
||||||
@ -65,18 +75,18 @@ MpdModule::~MpdModule()
|
|||||||
|
|
||||||
void MpdModule::start()
|
void MpdModule::start()
|
||||||
{
|
{
|
||||||
this->mpd = mpd::Connection::get();
|
this->mpd = std::make_unique<mpd::Connection>(this->mpd_host, this->mpd_port, this->mpd_pass);
|
||||||
|
|
||||||
this->synced_at = std::chrono::system_clock::now();
|
this->synced_at = std::chrono::system_clock::now();
|
||||||
this->sync_interval = config::get<float>(name(), "interval", this->sync_interval) * 1000;
|
this->sync_interval = config::get<float>(name(), "interval", this->sync_interval) * 1000;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
mpd->connect();
|
this->mpd->connect();
|
||||||
this->status = mpd->get_status();
|
this->status = this->mpd->get_status();
|
||||||
this->status->update(-1);
|
this->status->update(-1, this->mpd);
|
||||||
} catch (mpd::Exception &e) {
|
} catch (mpd::Exception &e) {
|
||||||
log_error(e.what());
|
log_error(e.what());
|
||||||
mpd->disconnect();
|
this->mpd->disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
this->EventModule::start();
|
this->EventModule::start();
|
||||||
@ -84,41 +94,40 @@ void MpdModule::start()
|
|||||||
|
|
||||||
bool MpdModule::has_event()
|
bool MpdModule::has_event()
|
||||||
{
|
{
|
||||||
auto &mpd = mpd::Connection::get();
|
|
||||||
bool has_event = false;
|
bool has_event = false;
|
||||||
|
|
||||||
if (!mpd->connected()) {
|
if (!this->mpd->connected()) {
|
||||||
try {
|
try {
|
||||||
mpd->connect();
|
this->mpd->connect();
|
||||||
} catch (mpd::Exception &e) {
|
} catch (mpd::Exception &e) {
|
||||||
get_logger()->debug(e.what());
|
get_logger()->debug(e.what());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mpd->connected()) {
|
if (!this->mpd->connected()) {
|
||||||
std::this_thread::sleep_for(3s);
|
std::this_thread::sleep_for(3s);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this->status) {
|
if (!this->status) {
|
||||||
this->status = mpd->get_status();
|
this->status = this->mpd->get_status();
|
||||||
this->status->update(-1);
|
this->status->update(-1, this->mpd);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
mpd->idle();
|
this->mpd->idle();
|
||||||
|
|
||||||
int idle_flags;
|
int idle_flags;
|
||||||
|
|
||||||
if ((idle_flags = mpd->noidle()) != 0) {
|
if ((idle_flags = this->mpd->noidle()) != 0) {
|
||||||
this->status->update(idle_flags);
|
this->status->update(idle_flags, this->mpd);
|
||||||
has_event = true;
|
has_event = true;
|
||||||
} else if (this->status->state & mpd::PLAYING) {
|
} else if (this->status->state & mpd::PLAYING) {
|
||||||
this->status->update_timer();
|
this->status->update_timer();
|
||||||
}
|
}
|
||||||
} catch (mpd::Exception &e) {
|
} catch (mpd::Exception &e) {
|
||||||
log_error(e.what());
|
log_error(e.what());
|
||||||
mpd->disconnect();
|
this->mpd->disconnect();
|
||||||
has_event = true;
|
has_event = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,12 +145,12 @@ bool MpdModule::has_event()
|
|||||||
|
|
||||||
bool MpdModule::update()
|
bool MpdModule::update()
|
||||||
{
|
{
|
||||||
if (!mpd::Connection::get()->connected())
|
if (!this->mpd->connected())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (!this->status)
|
if (!this->status)
|
||||||
try {
|
try {
|
||||||
this->status = mpd::Connection::get()->get_status();
|
this->status = this->mpd->get_status();
|
||||||
} catch (mpd::Exception &e) {
|
} catch (mpd::Exception &e) {
|
||||||
log_trace(e.what());
|
log_trace(e.what());
|
||||||
}
|
}
|
||||||
@ -156,7 +165,7 @@ bool MpdModule::update()
|
|||||||
elapsed_str = this->status->get_formatted_elapsed();
|
elapsed_str = this->status->get_formatted_elapsed();
|
||||||
total_str = this->status->get_formatted_total();
|
total_str = this->status->get_formatted_total();
|
||||||
|
|
||||||
song = mpd::Connection::get()->get_song();
|
song = this->mpd->get_song();
|
||||||
|
|
||||||
if (*song) {
|
if (*song) {
|
||||||
artist = song->get_artist();
|
artist = song->get_artist();
|
||||||
@ -165,7 +174,7 @@ bool MpdModule::update()
|
|||||||
}
|
}
|
||||||
} catch (mpd::Exception &e) {
|
} catch (mpd::Exception &e) {
|
||||||
log_error(e.what());
|
log_error(e.what());
|
||||||
mpd::Connection::get()->disconnect();
|
this->mpd->disconnect();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,7 +202,7 @@ bool MpdModule::update()
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string MpdModule::get_format() {
|
std::string MpdModule::get_format() {
|
||||||
return mpd::Connection::get()->connected() ? FORMAT_ONLINE : FORMAT_OFFLINE;
|
return this->mpd->connected() ? FORMAT_ONLINE : FORMAT_OFFLINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MpdModule::build(Builder *builder, const std::string& tag)
|
bool MpdModule::build(Builder *builder, const std::string& tag)
|
||||||
@ -253,7 +262,7 @@ bool MpdModule::handle_command(const std::string& cmd)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
auto mpd = std::make_shared<mpd::Connection>();
|
auto mpd = std::make_unique<mpd::Connection>(this->mpd_host, this->mpd_port, this->mpd_pass);
|
||||||
|
|
||||||
mpd->connect();
|
mpd->connect();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user