Cleanup and compiler check fixes

This commit is contained in:
Michael Carlberg 2016-06-29 11:06:33 +02:00
parent f2999b7272
commit f406f1eb9f
27 changed files with 130 additions and 120 deletions

View File

@ -32,7 +32,6 @@ flags = [
'-std=c++14', '-std=c++14',
'-Wall', '-Wall',
'-Wextra', '-Wextra',
'-Wpedantic',
] ]
compilation_database_folder = '' compilation_database_folder = ''

View File

@ -11,6 +11,8 @@
DefineBaseException(ConfigurationError); DefineBaseException(ConfigurationError);
class Registry;
struct CompiledWithoutModuleSupport : public ConfigurationError struct CompiledWithoutModuleSupport : public ConfigurationError
{ {
explicit CompiledWithoutModuleSupport(std::string module_name) explicit CompiledWithoutModuleSupport(std::string module_name)
@ -20,7 +22,7 @@ struct CompiledWithoutModuleSupport : public ConfigurationError
struct Font struct Font
{ {
std::string id; std::string id;
int offset; int offset = 0;
Font(std::string id, int offset) Font(std::string id, int offset)
: id(id), offset(offset){} : id(id), offset(offset){}
@ -46,8 +48,8 @@ struct Options
std::string foreground = "#000000"; std::string foreground = "#000000";
std::string linecolor = "#000000"; std::string linecolor = "#000000";
int width; int width = 0;
int height; int height = 0;
int offset_x = 0; int offset_x = 0;
int offset_y = 0; int offset_y = 0;
@ -88,11 +90,12 @@ class Bar
Bar(); Bar();
std::unique_ptr<Options> opts; std::unique_ptr<Options> opts;
std::shared_ptr<Registry> registry;
void load(std::shared_ptr<Registry> registry);
std::string get_output(); std::string get_output();
std::string get_exec_line(); std::string get_exec_line();
void load();
}; };
std::shared_ptr<Bar> &get_bar(); std::shared_ptr<Bar> &get_bar();

View File

@ -20,7 +20,7 @@ class EventLoop
std::shared_ptr<Registry> registry; std::shared_ptr<Registry> registry;
std::shared_ptr<Logger> logger; std::shared_ptr<Logger> logger;
concurrency::Atomic<int> state; concurrency::Atomic<int> state { 0 };
std::thread t_write; std::thread t_write;
std::thread t_read; std::thread t_read;
@ -50,6 +50,4 @@ class EventLoop
void wait(); void wait();
void cleanup(int timeout_ms = 5000); void cleanup(int timeout_ms = 5000);
void add_stdin_subscriber(std::string module_name);
}; };

View File

@ -119,17 +119,15 @@ namespace mpd
std::unique_ptr<mpd_connection, ConnectionDeleter> connection; std::unique_ptr<mpd_connection, ConnectionDeleter> connection;
std::string host; std::string host;
std::string password; std::string password;
int port; int port = 6600;
int timeout = 15; int timeout = 15;
bool mpd_command_list_active = false; bool mpd_command_list_active = false;
bool mpd_idle = false; bool mpd_idle = false;
int mpd_fd; int mpd_fd = -1;
void check_connection();
void check_prerequisites(); void check_prerequisites();
void check_prerequisites_commands_list(); void check_prerequisites_commands_list();
void check_errors();
public: public:
Connection(std::string host, int port, std::string password) Connection(std::string host, int port, std::string password)
@ -167,7 +165,9 @@ namespace mpd
struct MpdStatus struct MpdStatus
{ {
bool random, repeat, single; bool random = false,
repeat = false,
single = false;
std::string artist; std::string artist;
std::string album; std::string album;

View File

@ -29,8 +29,7 @@ namespace modules
bool on_event(InotifyEvent *event); bool on_event(InotifyEvent *event);
bool build(Builder *builder, std::string tag); bool build(Builder *builder, std::string tag);
void idle() const void idle() const {
{
std::this_thread::sleep_for(25ms); std::this_thread::sleep_for(25ms);
} }
}; };

View File

@ -38,6 +38,8 @@ DefineBaseException(ModuleError);
DefineChildException(UndefinedFormat, ModuleError); DefineChildException(UndefinedFormat, ModuleError);
DefineChildException(UndefinedFormatTag, ModuleError); DefineChildException(UndefinedFormatTag, ModuleError);
class Registry;
class ModuleFormatter class ModuleFormatter
{ {
public: public:
@ -66,7 +68,7 @@ class ModuleFormatter
namespace modules namespace modules
{ {
void broadcast_module_update(std::string module_name); void broadcast_module_update(std::shared_ptr<Registry> registry, std::string module_name);
std::string get_tag_name(std::string tag); std::string get_tag_name(std::string tag);
struct ModuleInterface struct ModuleInterface
@ -82,7 +84,11 @@ namespace modules
virtual std::string operator()() = 0; virtual std::string operator()() = 0;
virtual void attach_registry(std::shared_ptr<Registry> registry) = 0;
virtual bool handle_command(std::string cmd) = 0; virtual bool handle_command(std::string cmd) = 0;
virtual bool register_for_events() const = 0;
}; };
template<class ModuleImpl> template<class ModuleImpl>
@ -100,6 +106,7 @@ namespace modules
std::condition_variable sleep_handler; std::condition_variable sleep_handler;
std::string name_; std::string name_;
std::shared_ptr<Registry> registry;
std::shared_ptr<Logger> logger; std::shared_ptr<Logger> logger;
std::unique_ptr<Builder> builder; std::unique_ptr<Builder> builder;
std::unique_ptr<EventThrottler> broadcast_throttler; std::unique_ptr<EventThrottler> broadcast_throttler;
@ -162,10 +169,18 @@ namespace modules
return this->cache(); return this->cache();
} }
void attach_registry(std::shared_ptr<Registry> registry) {
this->registry = registry;
}
bool handle_command(std::string cmd) { bool handle_command(std::string cmd) {
return CastModule(ModuleImpl)->handle_command(cmd); return CastModule(ModuleImpl)->handle_command(cmd);
} }
bool register_for_events() const {
return false;
}
protected: protected:
bool enabled() { bool enabled() {
return this->enabled_flag(); return this->enabled_flag();
@ -182,7 +197,7 @@ namespace modules
log_trace2(this->logger, "Throttled broadcast for: "+ this->name_); log_trace2(this->logger, "Throttled broadcast for: "+ this->name_);
return; return;
} }
broadcast_module_update(ConstCastModule(ModuleImpl).name()); broadcast_module_update(this->registry, ConstCastModule(ModuleImpl).name());
} }
void sleep(std::chrono::duration<double> sleep_duration) void sleep(std::chrono::duration<double> sleep_duration)

View File

@ -78,6 +78,10 @@ namespace modules
bool has_event(); bool has_event();
bool update(); bool update();
bool build(Builder *builder, std::string tag); bool build(Builder *builder, std::string tag);
bool handle_command(std::string cmd); bool handle_command(std::string cmd);
bool register_for_events() const {
return true;
}
}; };
} }

View File

@ -26,5 +26,9 @@ namespace modules
std::string get_output(); std::string get_output();
bool handle_command(std::string cmd); bool handle_command(std::string cmd);
bool register_for_events() const {
return true;
}
}; };
} }

View File

@ -73,5 +73,8 @@ namespace modules
bool build(Builder *builder, std::string tag); bool build(Builder *builder, std::string tag);
bool handle_command(std::string cmd); bool handle_command(std::string cmd);
bool register_for_events() const {
return true;
}
}; };
} }

View File

@ -40,5 +40,9 @@ namespace modules
bool build(Builder *builder, std::string tag); bool build(Builder *builder, std::string tag);
bool handle_command(std::string cmd); bool handle_command(std::string cmd);
bool register_for_events() const {
return true;
}
}; };
} }

View File

@ -80,5 +80,9 @@ namespace modules
bool build(Builder *builder, std::string tag); bool build(Builder *builder, std::string tag);
bool handle_command(std::string cmd); bool handle_command(std::string cmd);
bool register_for_events() const {
return true;
}
}; };
} }

View File

@ -50,9 +50,12 @@ namespace modules
bool update(); bool update();
std::string get_format(); std::string get_format();
std::string get_output();
bool build(Builder *builder, std::string tag); bool build(Builder *builder, std::string tag);
std::string get_output();
bool handle_command(std::string cmd); bool handle_command(std::string cmd);
bool register_for_events() const {
return true;
}
}; };
} }

View File

@ -37,12 +37,10 @@ class Registry
bool ready(); bool ready();
void insert(std::unique_ptr<modules::ModuleInterface> &&module); void insert(std::unique_ptr<modules::ModuleInterface> &&module);
void load(); void load(std::function<void(std::string)> add_stdin_subscriber);
void unload(); void unload();
bool wait(); bool wait();
void notify(std::string module_name); void notify(std::string module_name);
std::string get(std::string module_name); std::string get(std::string module_name);
std::unique_ptr<RegistryModuleEntry>& find(std::string module_name); std::unique_ptr<RegistryModuleEntry>& find(std::string module_name);
}; };
std::shared_ptr<Registry> &get_registry();

View File

@ -1,3 +1,3 @@
#pragma once #pragma once
#define GIT_TAG "1.4.1" #define GIT_TAG "1.4.1-3-g6329b56-dev"

View File

@ -130,8 +130,10 @@ Bar::Bar() : config_path(config::get_bar_path()), opts(std::make_unique<Options>
/** /**
* Loads all modules configured for the current bar * Loads all modules configured for the current bar
*/ */
void Bar::load() void Bar::load(std::shared_ptr<Registry> registry)
{ {
this->registry = registry;
auto add_modules = [&](std::string modlist, std::vector<std::string> &vec){ auto add_modules = [&](std::string modlist, std::vector<std::string> &vec){
std::vector<std::string> modules; std::vector<std::string> modules;
string::split_into(modlist, ' ', modules); string::split_into(modlist, ' ', modules);
@ -173,8 +175,10 @@ void Bar::load()
else if (type == "custom/menu") module = std::make_unique<modules::MenuModule>(mod); else if (type == "custom/menu") module = std::make_unique<modules::MenuModule>(mod);
else throw ConfigurationError("Unknown module: "+ mod); else throw ConfigurationError("Unknown module: "+ mod);
module->attach_registry(this->registry);
vec.emplace_back(module->name()); vec.emplace_back(module->name());
get_registry()->insert(std::move(module)); this->registry->insert(std::move(module));
} }
}; };
@ -201,7 +205,7 @@ std::string Bar::get_output()
builder->append_module_output(align, pad_left, false, false); builder->append_module_output(align, pad_left, false, false);
for (auto &mod_name : mods) { for (auto &mod_name : mods) {
auto mod_output = get_registry()->get(mod_name); auto mod_output = this->registry->get(mod_name);
builder->append_module_output(align, mod_output, builder->append_module_output(align, mod_output,
!(align == Builder::ALIGN_LEFT && mod_name == mods.front()), !(align == Builder::ALIGN_LEFT && mod_name == mods.front()),
!(align == Builder::ALIGN_RIGHT && mod_name == mods.back())); !(align == Builder::ALIGN_RIGHT && mod_name == mods.back()));

View File

@ -12,7 +12,7 @@
EventLoop::EventLoop(std::string input_pipe) EventLoop::EventLoop(std::string input_pipe)
: bar(get_bar()), : bar(get_bar()),
registry(get_registry()), registry(std::make_shared<Registry>()),
logger(get_logger()), logger(get_logger()),
state(STATE_STOPPED), state(STATE_STOPPED),
pipe_filename(input_pipe) pipe_filename(input_pipe)
@ -39,8 +39,12 @@ void EventLoop::start()
this->logger->debug("Starting event loop..."); this->logger->debug("Starting event loop...");
this->bar->load(); this->bar->load(registry);
this->registry->load();
this->registry->load([&](std::string module_name){
this->logger->debug("Adding stdin subscriber: "+ module_name);
this->stdin_subs.emplace_back(module_name);
});
this->state = STATE_STARTED; this->state = STATE_STARTED;
@ -98,12 +102,6 @@ void EventLoop::wait()
this->logger->info("Termination signal received... Shutting down"); this->logger->info("Termination signal received... Shutting down");
} }
void EventLoop::add_stdin_subscriber(std::string module_name)
{
// this->stdin_subs.insert(std::make_pair("TAG", module_name));
this->stdin_subs.emplace_back(module_name);
}
void EventLoop::loop_write() void EventLoop::loop_write()
{ {
std::deque<std::chrono::high_resolution_clock::time_point> ticks; std::deque<std::chrono::high_resolution_clock::time_point> ticks;

View File

@ -12,7 +12,7 @@ namespace alsa
ControlInterface::ControlInterface(int numid) ControlInterface::ControlInterface(int numid)
{ {
int err; int err = 0;
snd_ctl_elem_info_alloca(&this->info); snd_ctl_elem_info_alloca(&this->info);
snd_ctl_elem_value_alloca(&this->value); snd_ctl_elem_value_alloca(&this->value);
@ -54,7 +54,7 @@ namespace alsa
{ {
std::lock_guard<concurrency::SpinLock> lck(this->lock); std::lock_guard<concurrency::SpinLock> lck(this->lock);
int err; int err = 0;
if ((err = snd_ctl_wait(this->ctl, timeout)) < 0) if ((err = snd_ctl_wait(this->ctl, timeout)) < 0)
throw ControlInterfaceError(err, "Failed to wait for events: "+ StrSndErr(err)); throw ControlInterfaceError(err, "Failed to wait for events: "+ StrSndErr(err));
@ -76,7 +76,7 @@ namespace alsa
{ {
std::lock_guard<concurrency::SpinLock> lck(this->lock); std::lock_guard<concurrency::SpinLock> lck(this->lock);
int err; int err = 0;
if ((err = snd_hctl_elem_read(this->elem, this->value)) < 0) if ((err = snd_hctl_elem_read(this->elem, this->value)) < 0)
throw ControlInterfaceError(err, "Could not read control value: "+ StrSndErr(err)); throw ControlInterfaceError(err, "Could not read control value: "+ StrSndErr(err));

View File

@ -8,6 +8,29 @@
#include "interfaces/mpd.hpp" #include "interfaces/mpd.hpp"
#include "utils/math.hpp" #include "utils/math.hpp"
inline void check_connection(mpd_connection *conn)
{
if (conn == nullptr)
throw mpd::ClientError("Not connected to MPD server", MPD_ERROR_STATE, false);
}
inline void check_errors(mpd_connection *conn)
{
mpd_error code = mpd_connection_get_error(conn);
if (code == MPD_ERROR_SUCCESS)
return;
std::string msg = mpd_connection_get_error_message(conn);
if (code == MPD_ERROR_SERVER)
throw mpd::ServerError(msg,
mpd_connection_get_server_error(conn),
mpd_connection_clear_error(conn));
else
throw mpd::ClientError(msg, code, mpd_connection_clear_error(conn));
}
namespace mpd namespace mpd
{ {
// Base // Base
@ -18,17 +41,17 @@ namespace mpd
try { try {
this->connection.reset(mpd_connection_new(this->host.c_str(), this->port, this->timeout * 1000)); this->connection.reset(mpd_connection_new(this->host.c_str(), this->port, this->timeout * 1000));
this->check_errors(); check_errors(this->connection.get());
if (!this->password.empty()) { if (!this->password.empty()) {
this->noidle(); this->noidle();
assert(!this->mpd_command_list_active); assert(!this->mpd_command_list_active);
mpd_run_password(this->connection.get(), this->password.c_str()); mpd_run_password(this->connection.get(), this->password.c_str());
this->check_errors(); check_errors(this->connection.get());
} }
this->mpd_fd = mpd_connection_get_fd(this->connection.get()); this->mpd_fd = mpd_connection_get_fd(this->connection.get());
this->check_errors(); check_errors(this->connection.get());
} catch(ClientError &e) { } catch(ClientError &e) {
this->disconnect(); this->disconnect();
throw e; throw e;
@ -67,64 +90,40 @@ namespace mpd
void Connection::idle() void Connection::idle()
{ {
this->check_connection(); check_connection(this->connection.get());
if (!this->mpd_idle) { if (!this->mpd_idle) {
mpd_send_idle(this->connection.get()); mpd_send_idle(this->connection.get());
this->check_errors(); check_errors(this->connection.get());
} }
this->mpd_idle = true; this->mpd_idle = true;
} }
int Connection::noidle() int Connection::noidle()
{ {
this->check_connection(); check_connection(this->connection.get());
int flags = 0; int flags = 0;
if (this->mpd_idle && mpd_send_noidle(this->connection.get())) { if (this->mpd_idle && mpd_send_noidle(this->connection.get())) {
this->mpd_idle = false; this->mpd_idle = false;
flags = mpd_recv_idle(this->connection.get(), true); flags = mpd_recv_idle(this->connection.get(), true);
mpd_response_finish(this->connection.get()); mpd_response_finish(this->connection.get());
this->check_errors(); check_errors(this->connection.get());
} }
return flags; return flags;
} }
void Connection::check_connection() inline void Connection::check_prerequisites()
{ {
if (!this->connection) check_connection(this->connection.get());
throw ClientError("Not connected to MPD server", MPD_ERROR_STATE, false);
}
void Connection::check_prerequisites()
{
this->check_connection();
this->noidle(); this->noidle();
} }
void Connection::check_prerequisites_commands_list() inline void Connection::check_prerequisites_commands_list()
{ {
this->noidle(); this->noidle();
assert(!this->mpd_command_list_active); assert(!this->mpd_command_list_active);
this->check_prerequisites(); this->check_prerequisites();
} }
void Connection::check_errors()
{
auto connection = this->connection.get();
mpd_error code = mpd_connection_get_error(connection);
if (code == MPD_ERROR_SUCCESS)
return;
std::string msg = mpd_connection_get_error_message(connection);
if (code == MPD_ERROR_SERVER)
throw ServerError(msg,
mpd_connection_get_server_error(connection),
mpd_connection_clear_error(connection));
else
throw ClientError(msg, code, mpd_connection_clear_error(connection));
}
// Commands // Commands
@ -133,7 +132,7 @@ namespace mpd
try { try {
this->check_prerequisites_commands_list(); this->check_prerequisites_commands_list();
mpd_run_play(this->connection.get()); mpd_run_play(this->connection.get());
this->check_errors(); check_errors(this->connection.get());
} catch (Exception &e) { } catch (Exception &e) {
log_error(e.what()); log_error(e.what());
} }
@ -144,7 +143,7 @@ namespace mpd
try { try {
this->check_prerequisites_commands_list(); this->check_prerequisites_commands_list();
mpd_run_pause(this->connection.get(), state); mpd_run_pause(this->connection.get(), state);
this->check_errors(); check_errors(this->connection.get());
} catch (Exception &e) { } catch (Exception &e) {
log_error(e.what()); log_error(e.what());
} }
@ -155,7 +154,7 @@ namespace mpd
// try { // try {
// this->check_prerequisites_commands_list(); // this->check_prerequisites_commands_list();
// mpd_run_toggle_pause(this->connection.get()); // mpd_run_toggle_pause(this->connection.get());
// this->check_errors(); // check_errors(this->connection.get());
// } catch (Exception &e) { // } catch (Exception &e) {
// log_error(e.what()); // log_error(e.what());
// } // }
@ -166,7 +165,7 @@ namespace mpd
try { try {
this->check_prerequisites_commands_list(); this->check_prerequisites_commands_list();
mpd_run_stop(this->connection.get()); mpd_run_stop(this->connection.get());
this->check_errors(); check_errors(this->connection.get());
} catch (Exception &e) { } catch (Exception &e) {
log_error(e.what()); log_error(e.what());
} }
@ -177,7 +176,7 @@ namespace mpd
try { try {
this->check_prerequisites_commands_list(); this->check_prerequisites_commands_list();
mpd_run_previous(this->connection.get()); mpd_run_previous(this->connection.get());
this->check_errors(); check_errors(this->connection.get());
} catch (Exception &e) { } catch (Exception &e) {
log_error(e.what()); log_error(e.what());
} }
@ -188,7 +187,7 @@ namespace mpd
try { try {
this->check_prerequisites_commands_list(); this->check_prerequisites_commands_list();
mpd_run_next(this->connection.get()); mpd_run_next(this->connection.get());
this->check_errors(); check_errors(this->connection.get());
} catch (Exception &e) { } catch (Exception &e) {
log_error(e.what()); log_error(e.what());
} }
@ -207,7 +206,7 @@ namespace mpd
int pos = float(status->total_time) * percentage / 100.0f + 0.5f; int pos = float(status->total_time) * percentage / 100.0f + 0.5f;
this->check_prerequisites_commands_list(); this->check_prerequisites_commands_list();
mpd_run_seek_id(this->connection.get(), status->song_id, pos); mpd_run_seek_id(this->connection.get(), status->song_id, pos);
this->check_errors(); check_errors(this->connection.get());
} catch (Exception &e) { } catch (Exception &e) {
log_error(e.what()); log_error(e.what());
} }
@ -218,7 +217,7 @@ namespace mpd
try { try {
this->check_prerequisites_commands_list(); this->check_prerequisites_commands_list();
mpd_run_repeat(this->connection.get(), mode); mpd_run_repeat(this->connection.get(), mode);
this->check_errors(); check_errors(this->connection.get());
} catch (Exception &e) { } catch (Exception &e) {
log_error(e.what()); log_error(e.what());
} }
@ -229,7 +228,7 @@ namespace mpd
try { try {
this->check_prerequisites_commands_list(); this->check_prerequisites_commands_list();
mpd_run_random(this->connection.get(), mode); mpd_run_random(this->connection.get(), mode);
this->check_errors(); check_errors(this->connection.get());
} catch (Exception &e) { } catch (Exception &e) {
log_error(e.what()); log_error(e.what());
} }
@ -240,7 +239,7 @@ namespace mpd
try { try {
this->check_prerequisites_commands_list(); this->check_prerequisites_commands_list();
mpd_run_single(this->connection.get(), mode); mpd_run_single(this->connection.get(), mode);
this->check_errors(); check_errors(this->connection.get());
} catch (Exception &e) { } catch (Exception &e) {
log_error(e.what()); log_error(e.what());
} }
@ -253,7 +252,7 @@ namespace mpd
{ {
this->check_prerequisites(); this->check_prerequisites();
mpd_status *mpd_status = mpd_run_status(this->connection.get()); mpd_status *mpd_status = mpd_run_status(this->connection.get());
this->check_errors(); check_errors(this->connection.get());
auto status = std::make_unique<Status>(mpd_status); auto status = std::make_unique<Status>(mpd_status);
if (update) if (update)
status->update(-1, this); status->update(-1, this);
@ -362,7 +361,7 @@ namespace mpd
mpd_send_current_song(this->connection.get()); mpd_send_current_song(this->connection.get());
mpd_song *song = mpd_recv_song(this->connection.get()); mpd_song *song = mpd_recv_song(this->connection.get());
mpd_response_finish(this->connection.get()); mpd_response_finish(this->connection.get());
this->check_errors(); check_errors(this->connection.get());
if (song == nullptr) if (song == nullptr)
return std::make_unique<Song>(); return std::make_unique<Song>();

View File

@ -25,8 +25,6 @@
* TODO: Simplify overall flow * TODO: Simplify overall flow
*/ */
std::unique_ptr<EventLoop> eventloop;
std::mutex pid_mtx; std::mutex pid_mtx;
std::vector<pid_t> pids; std::vector<pid_t> pids;
@ -38,9 +36,6 @@ void unregister_pid(pid_t pid) {
std::lock_guard<std::mutex> lck(pid_mtx); std::lock_guard<std::mutex> lck(pid_mtx);
pids.erase(std::remove(pids.begin(), pids.end(), pid), pids.end()); pids.erase(std::remove(pids.begin(), pids.end(), pid), pids.end());
} }
void register_command_handler(std::string module_name) {
eventloop->add_stdin_subscriber(module_name);
}
/** /**
* Main entry point woop! * Main entry point woop!
@ -48,7 +43,9 @@ void register_command_handler(std::string module_name) {
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int retval = EXIT_SUCCESS; int retval = EXIT_SUCCESS;
auto logger = get_logger();
std::unique_ptr<EventLoop> eventloop;
std::shared_ptr<Logger> logger = get_logger();
try { try {
auto usage = "Usage: "+ std::string(argv[0]) + " bar_name [OPTION...]"; auto usage = "Usage: "+ std::string(argv[0]) + " bar_name [OPTION...]";
@ -80,9 +77,11 @@ int main(int argc, char **argv)
<< (ENABLE_MPD ? "+" : "-") << "mpd " << (ENABLE_MPD ? "+" : "-") << "mpd "
<< (ENABLE_NETWORK ? "+" : "-") << "network " << (ENABLE_NETWORK ? "+" : "-") << "network "
<< "\n\n"; << "\n\n";
if (ENABLE_ALSA) if (ENABLE_ALSA)
std::cout std::cout
<< "ALSA_SOUNDCARD " << ALSA_SOUNDCARD << std::endl; << "ALSA_SOUNDCARD " << ALSA_SOUNDCARD << std::endl;
std::cout std::cout
<< "CONNECTION_TEST_IP " << CONNECTION_TEST_IP << "\n" << "CONNECTION_TEST_IP " << CONNECTION_TEST_IP << "\n"
<< "PATH_BACKLIGHT_VAL " << PATH_BACKLIGHT_VAL << "\n" << "PATH_BACKLIGHT_VAL " << PATH_BACKLIGHT_VAL << "\n"
@ -92,12 +91,11 @@ int main(int argc, char **argv)
<< "PATH_CPU_INFO " << PATH_CPU_INFO << "\n" << "PATH_CPU_INFO " << PATH_CPU_INFO << "\n"
<< "PATH_MEMORY_INFO " << PATH_MEMORY_INFO << "\n"; << "PATH_MEMORY_INFO " << PATH_MEMORY_INFO << "\n";
} }
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
if (cli::has_option("help") || argv[1][0] == '-') if (cli::has_option("help") || argv[1][0] == '-')
cli::usage(usage); cli::usage(usage, false);
/** /**
* Set logging verbosity * Set logging verbosity

View File

@ -85,10 +85,10 @@ bool ModuleFormatter::has(std::string tag)
namespace modules namespace modules
{ {
void broadcast_module_update(std::string module_name) void broadcast_module_update(std::shared_ptr<Registry> registry, std::string module_name)
{ {
log_trace("Broadcasting module update for => "+ module_name); log_trace("Broadcasting module update for => "+ module_name);
get_registry()->notify(module_name); registry->notify(module_name);
} }
std::string get_tag_name(std::string tag) { std::string get_tag_name(std::string tag) {

View File

@ -80,8 +80,6 @@ BspwmModule::BspwmModule(std::string name_, std::string monitor)
auto vec = string::split(workspace, ';'); auto vec = string::split(workspace, ';');
if (vec.size() == 2) this->icons->add(vec[0], std::make_unique<drawtypes::Icon>(vec[1])); if (vec.size() == 2) this->icons->add(vec[0], std::make_unique<drawtypes::Icon>(vec[1]));
} }
register_command_handler(name());
} }
BspwmModule::~BspwmModule() BspwmModule::~BspwmModule()

View File

@ -16,9 +16,6 @@ DateModule::DateModule(std::string name_)
this->date = config::get<std::string>(name(), "date"); this->date = config::get<std::string>(name(), "date");
this->date_detailed = config::get<std::string>(name(), "date_detailed", ""); this->date_detailed = config::get<std::string>(name(), "date_detailed", "");
if (!this->date_detailed.empty())
register_command_handler(name());
} }
bool DateModule::update() bool DateModule::update()

View File

@ -55,8 +55,6 @@ i3Module::i3Module(std::string name_, std::string monitor)
auto vec = string::split(workspace, ';'); auto vec = string::split(workspace, ';');
if (vec.size() == 2) this->icons->add(vec[0], std::make_unique<drawtypes::Icon>(vec[1])); if (vec.size() == 2) this->icons->add(vec[0], std::make_unique<drawtypes::Icon>(vec[1]));
} }
register_command_handler(name());
} }
i3Module::~i3Module() i3Module::~i3Module()

View File

@ -48,8 +48,6 @@ MenuModule::MenuModule(std::string name_) : StaticModule(name_)
level_n++; level_n++;
} }
} }
register_command_handler(name());
} }
std::string MenuModule::get_output() std::string MenuModule::get_output()

View File

@ -67,10 +67,6 @@ MpdModule::MpdModule(std::string name_)
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());
// }}}
} }
MpdModule::~MpdModule() MpdModule::~MpdModule()

View File

@ -82,10 +82,6 @@ VolumeModule::VolumeModule(std::string name_) : EventModule(name_)
this->label_muted_tokenized = this->label_muted->clone(); this->label_muted_tokenized = this->label_muted->clone();
} }
// }}} // }}}
// Sign up for stdin events {{{
register_command_handler(name());
// }}}
} }
VolumeModule::~VolumeModule() VolumeModule::~VolumeModule()

View File

@ -2,14 +2,6 @@
#include "services/logger.hpp" #include "services/logger.hpp"
#include "utils/string.hpp" #include "utils/string.hpp"
std::shared_ptr<Registry> registry;
std::shared_ptr<Registry> &get_registry()
{
if (registry == nullptr)
registry = std::make_shared<Registry>();
return registry;
}
Registry::Registry() : logger(get_logger()) Registry::Registry() : logger(get_logger())
{ {
this->logger->debug("Entering STAGE 1"); this->logger->debug("Entering STAGE 1");
@ -33,7 +25,7 @@ void Registry::insert(std::unique_ptr<modules::ModuleInterface> &&module)
this->modules.emplace_back(std::make_unique<RegistryModuleEntry>(std::move(module))); this->modules.emplace_back(std::make_unique<RegistryModuleEntry>(std::move(module)));
} }
void Registry::load() void Registry::load(std::function<void(std::string)> add_stdin_subscriber)
{ {
if (this->stage() != STAGE_1) if (this->stage() != STAGE_1)
return; return;
@ -46,6 +38,8 @@ void Registry::load()
for (auto &&entry : this->modules) { for (auto &&entry : this->modules) {
std::lock_guard<std::mutex> lck(this->wait_lock); std::lock_guard<std::mutex> lck(this->wait_lock);
if (entry->module->register_for_events())
add_stdin_subscriber(entry->module->name());
entry->module->start(); entry->module->start();
} }
} }