From ccddf052ec8947bcd6378255b17c82b2c4323238 Mon Sep 17 00:00:00 2001 From: Michael Carlberg Date: Sun, 1 Jan 2017 08:58:33 +0100 Subject: [PATCH] refactor(script): Split non-/tail logic Split the script module into one tailing output module and one exec once module. Refs #281 --- include/modules/cmdscript.hpp | 17 +++++ include/modules/meta/base.inl | 2 +- include/modules/meta/factory.hpp | 53 ++++++++------- include/modules/script.hpp | 29 ++++---- include/modules/tailscript.hpp | 17 +++++ include/utils/file.hpp | 14 ++-- include/utils/io.hpp | 6 +- src/main.cpp | 2 + src/modules/cmdscript.cpp | 38 +++++++++++ src/modules/script.cpp | 109 ++++++++++++------------------- src/modules/tailscript.cpp | 50 ++++++++++++++ src/utils/file.cpp | 30 ++++----- src/utils/io.cpp | 95 ++++++++------------------- 13 files changed, 258 insertions(+), 204 deletions(-) create mode 100644 include/modules/cmdscript.hpp create mode 100644 include/modules/tailscript.hpp create mode 100644 src/modules/cmdscript.cpp create mode 100644 src/modules/tailscript.cpp diff --git a/include/modules/cmdscript.hpp b/include/modules/cmdscript.hpp new file mode 100644 index 00000000..7968018c --- /dev/null +++ b/include/modules/cmdscript.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include "modules/script.hpp" + +POLYBAR_NS + +namespace modules { + class cmdscript_module : virtual public script_module { + public: + explicit cmdscript_module(const bar_settings&, string); + + protected: + void process(); + }; +} + +POLYBAR_NS_END diff --git a/include/modules/meta/base.inl b/include/modules/meta/base.inl index 35ea373d..fa3d3a5a 100644 --- a/include/modules/meta/base.inl +++ b/include/modules/meta/base.inl @@ -78,7 +78,7 @@ namespace modules { template string module::contents() { if (m_changed) { - m_log.info("Rebuilding cache for '%s'...", name()); + m_log.info("%s: Rebuilding cache", name()); m_cache = CAST_MOD(Impl)->get_output(); m_changed = false; } diff --git a/include/modules/meta/factory.hpp b/include/modules/meta/factory.hpp index a845ff2b..f9a06425 100644 --- a/include/modules/meta/factory.hpp +++ b/include/modules/meta/factory.hpp @@ -5,6 +5,7 @@ #include "modules/backlight.hpp" #include "modules/battery.hpp" #include "modules/bspwm.hpp" +#include "modules/cmdscript.hpp" #include "modules/counter.hpp" #include "modules/cpu.hpp" #include "modules/date.hpp" @@ -14,6 +15,7 @@ #include "modules/menu.hpp" #include "modules/meta/base.hpp" #include "modules/script.hpp" +#include "modules/tailscript.hpp" #include "modules/temperature.hpp" #include "modules/text.hpp" #include "modules/xbacklight.hpp" @@ -46,52 +48,55 @@ POLYBAR_NS using namespace modules; namespace { - template - module_interface* make_module(string&& name, Args&&... args) { + module_interface* make_module(string&& name, const bar_settings& bar, string module_name) { if (name == "internal/counter") { - return new counter_module(forward(args)...); + return new counter_module(bar, move(module_name)); } else if (name == "internal/backlight") { - return new backlight_module(forward(args)...); + return new backlight_module(bar, move(module_name)); } else if (name == "internal/battery") { - return new battery_module(forward(args)...); + return new battery_module(bar, move(module_name)); } else if (name == "internal/bspwm") { - return new bspwm_module(forward(args)...); + return new bspwm_module(bar, move(module_name)); } else if (name == "internal/cpu") { - return new cpu_module(forward(args)...); + return new cpu_module(bar, move(module_name)); } else if (name == "internal/date") { - return new date_module(forward(args)...); + return new date_module(bar, move(module_name)); } else if (name == "internal/github") { - return new github_module(forward(args)...); + return new github_module(bar, move(module_name)); } else if (name == "internal/fs") { - return new fs_module(forward(args)...); + return new fs_module(bar, move(module_name)); } else if (name == "internal/memory") { - return new memory_module(forward(args)...); + return new memory_module(bar, move(module_name)); } else if (name == "internal/i3") { - return new i3_module(forward(args)...); + return new i3_module(bar, move(module_name)); } else if (name == "internal/mpd") { - return new mpd_module(forward(args)...); + return new mpd_module(bar, move(module_name)); } else if (name == "internal/volume") { - return new volume_module(forward(args)...); + return new volume_module(bar, move(module_name)); } else if (name == "internal/network") { - return new network_module(forward(args)...); + return new network_module(bar, move(module_name)); } else if (name == "internal/temperature") { - return new temperature_module(forward(args)...); + return new temperature_module(bar, move(module_name)); } else if (name == "internal/xbacklight") { - return new xbacklight_module(forward(args)...); + return new xbacklight_module(bar, move(module_name)); } else if (name == "internal/xkeyboard") { - return new xkeyboard_module(forward(args)...); + return new xkeyboard_module(bar, move(module_name)); } else if (name == "internal/xwindow") { - return new xwindow_module(forward(args)...); + return new xwindow_module(bar, move(module_name)); } else if (name == "internal/xworkspaces") { - return new xworkspaces_module(forward(args)...); + return new xworkspaces_module(bar, move(module_name)); } else if (name == "custom/text") { - return new text_module(forward(args)...); + return new text_module(bar, move(module_name)); } else if (name == "custom/script") { - return new script_module(forward(args)...); + if (config::make().get("module/" + module_name, "tail", false)) { + return new tailscript_module(bar, move(module_name)); + } else { + return new cmdscript_module(bar, move(module_name)); + } } else if (name == "custom/menu") { - return new menu_module(forward(args)...); + return new menu_module(bar, move(module_name)); } else if (name == "custom/ipc") { - return new ipc_module(forward(args)...); + return new ipc_module(bar, move(module_name)); } else { throw application_error("Unknown module: " + name); } diff --git a/include/modules/script.hpp b/include/modules/script.hpp index d682a155..92d54c80 100644 --- a/include/modules/script.hpp +++ b/include/modules/script.hpp @@ -1,41 +1,32 @@ #pragma once -#include - -#include "modules/meta/event_module.hpp" +#include "modules/meta/base.hpp" #include "utils/command.hpp" +#include "utils/io.hpp" POLYBAR_NS -namespace chrono = std::chrono; - -#define OUTPUT_ACTION(BUTTON) \ - if (!m_actions[BUTTON].empty()) \ - m_builder->cmd(BUTTON, string_util::replace_all(m_actions[BUTTON], "%counter%", counter_str)) - namespace modules { - /** - * TODO: Split into timed-/streaming modules - */ - class script_module : public event_module { + class script_module : public module { public: explicit script_module(const bar_settings&, string); + virtual ~script_module() {} + + virtual void start(); + virtual void stop(); - void stop(); - void idle(); - bool has_event(); - bool update(); string get_output(); bool build(builder* builder, const string& tag) const; protected: + virtual void process() = 0; + static constexpr const char* TAG_OUTPUT{""}; static constexpr const char* TAG_LABEL{"