diff --git a/CMakeLists.txt b/CMakeLists.txt index 77b5c1c9..e716217d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -98,7 +98,7 @@ set(PROJECT_LINK_LIBS if(ENABLE_I3) find_program(I3_EXECUTABLE "i3") if(NOT I3_EXECUTABLE) - message(WARNING "${ANSI}[41;30mDisabling \"i3 module\" support (prerequisites failed)${ANSI}[0m") + message(WARNING "${ANSI}[41;1mDisabling \"i3 module\" support (prerequisites failed)${ANSI}[0m") set(ENABLE_I3 OFF) endif() endif() @@ -109,7 +109,7 @@ if(ENABLE_ALSA) set(PROJECT_INCL_DIRS ${PROJECT_INCL_DIRS} ${ALSA_INCLUDE_DIR}) set(PROJECT_LINK_LIBS ${PROJECT_LINK_LIBS} ${ALSA_LIBRARY}) else(ALSA_FOUND) - message(WARNING "${ANSI}[41;30mDisabling \"volume module\" support (prerequisites failed)${ANSI}[0m") + message(WARNING "${ANSI}[41;1mDisabling \"volume module\" support (prerequisites failed)${ANSI}[0m") set(ENABLE_ALSA OFF) endif() endif() @@ -120,7 +120,7 @@ if(ENABLE_MPD) set(PROJECT_INCL_DIRS ${PROJECT_INCL_DIRS} ${LIBMPDCLIENT_INCLUDE_DIR}) set(PROJECT_LINK_LIBS ${PROJECT_LINK_LIBS} ${LIBMPDCLIENT_LIBRARY}) else(LIBMPDCLIENT_FOUND) - message(WARNING "${ANSI}[41;30mDisabling \"mpd module\" support (prerequisites failed)${ANSI}[0m") + message(WARNING "${ANSI}[41;1mDisabling \"mpd module\" support (prerequisites failed)${ANSI}[0m") set(ENABLE_MPD OFF) endif() endif() @@ -131,7 +131,7 @@ if(ENABLE_NETWORK) set(PROJECT_INCL_DIRS ${PROJECT_INCL_DIRS} ${LIBIW_INCLUDE_DIR}) set(PROJECT_LINK_LIBS ${PROJECT_LINK_LIBS} ${LIBIW_LIBRARY}) else(LIBIW_FOUND) - message(WARNING "${ANSI}[41;30mDisabling \"network module\" support (prerequisites failed)${ANSI}[0m") + message(WARNING "${ANSI}[41;1mDisabling \"network module\" support (prerequisites failed)${ANSI}[0m") set(ENABLE_NETWORK OFF) endif() endif() diff --git a/include/bar.hpp b/include/bar.hpp index 72b667c6..96f92608 100644 --- a/include/bar.hpp +++ b/include/bar.hpp @@ -1,5 +1,4 @@ -#ifndef _BAR_HPP_ -#define _BAR_HPP_ +#pragma once #include <string> #include <memory> @@ -12,7 +11,7 @@ DefineBaseException(ConfigurationError); struct CompiledWithoutModuleSupport : public ConfigurationError { - CompiledWithoutModuleSupport(std::string module_name) + explicit CompiledWithoutModuleSupport(std::string module_name) : ConfigurationError(std::string(APP_NAME) + " was not compiled with support for module \""+ module_name +"\"") {} }; @@ -96,5 +95,3 @@ class Bar std::shared_ptr<Bar> &get_bar(); const Options& bar_opts(); - -#endif diff --git a/include/config.hpp.cmake b/include/config.hpp.cmake index ffdc9caa..412c6064 100644 --- a/include/config.hpp.cmake +++ b/include/config.hpp.cmake @@ -1,5 +1,4 @@ -#ifndef _CONFIG_HPP_ -#define _CONFIG_HPP_ +#pragma once #define APP_NAME "@PROJECT_NAME@" @@ -22,5 +21,3 @@ #define BSPWM_STATUS_PREFIX "@SETTING_BSPWM_STATUS_PREFIX@" #define PATH_CPU_INFO "@SETTING_PATH_CPU_INFO@" #define PATH_MEMORY_INFO "@SETTING_PATH_MEMORY_INFO@" - -#endif // _CONFIG_HPP_ diff --git a/include/drawtypes/animation.hpp b/include/drawtypes/animation.hpp index 9346cc6f..1ddffff2 100644 --- a/include/drawtypes/animation.hpp +++ b/include/drawtypes/animation.hpp @@ -1,5 +1,4 @@ -#ifndef _DRAWTYPES_ANIMATION_HPP_ -#define _DRAWTYPES_ANIMATION_HPP_ +#pragma once #include <string> #include <vector> @@ -21,7 +20,7 @@ namespace drawtypes public: Animation(std::vector<std::unique_ptr<Icon>> &&frames, int framerate_ms = 1); - Animation(int framerate_ms) + explicit Animation(int framerate_ms) : framerate_ms(framerate_ms){} void add(std::unique_ptr<Icon> &&frame); @@ -37,5 +36,3 @@ namespace drawtypes std::unique_ptr<Animation> get_config_animation(const std::string& config_path, const std::string& animation_name = "animation", bool required = true); } - -#endif diff --git a/include/drawtypes/bar.hpp b/include/drawtypes/bar.hpp index d39ccd34..1a9379aa 100644 --- a/include/drawtypes/bar.hpp +++ b/include/drawtypes/bar.hpp @@ -1,5 +1,4 @@ -#ifndef _DRAWTYPES_BAR_HPP_ -#define _DRAWTYPES_BAR_HPP_ +#pragma once #include <string> #include <memory> @@ -16,7 +15,7 @@ namespace drawtypes protected: std::unique_ptr<Builder> builder; std::vector<std::string> colors; - bool gradient; + bool gradient = false; unsigned int width; std::string format; @@ -25,7 +24,7 @@ namespace drawtypes std::unique_ptr<Icon> indicator; public: - Bar(int width, const std::string& format, bool lazy_builder_closing = true); + Bar(int width, const std::string& fmt, bool lazy_builder_closing = true); Bar(int width, bool lazy_builder_closing = true) : Bar(width, "<fill><indicator><empty>", lazy_builder_closing){} @@ -41,5 +40,3 @@ namespace drawtypes std::unique_ptr<Bar> get_config_bar(const std::string& config_path, const std::string& bar_name = "bar", bool lazy_builder_closing = true); } - -#endif diff --git a/include/drawtypes/icon.hpp b/include/drawtypes/icon.hpp index 8cd8a287..85304cbc 100644 --- a/include/drawtypes/icon.hpp +++ b/include/drawtypes/icon.hpp @@ -1,5 +1,4 @@ -#ifndef _DRAWTYPES_ICON_HPP_ -#define _DRAWTYPES_ICON_HPP_ +#pragma once #include <string> #include <vector> @@ -37,5 +36,3 @@ namespace drawtypes std::unique_ptr<Icon> get_config_icon(const std::string& module_name, const std::string& icon_name = "icon", bool required = true, const std::string& def = ""); std::unique_ptr<Icon> get_optional_config_icon(const std::string& module_name, const std::string& icon_name = "icon", const std::string& def = ""); } - -#endif diff --git a/include/drawtypes/label.hpp b/include/drawtypes/label.hpp index 129b3d31..52cd8b7c 100644 --- a/include/drawtypes/label.hpp +++ b/include/drawtypes/label.hpp @@ -1,5 +1,4 @@ -#ifndef _DRAWTYPES_LABEL_HPP_ -#define _DRAWTYPES_LABEL_HPP_ +#pragma once #include <string> #include <memory> @@ -29,5 +28,3 @@ namespace drawtypes std::unique_ptr<Label> get_config_label(const std::string& module_name, const std::string& label_name = "label", bool required = true, const std::string& def = ""); std::unique_ptr<Label> get_optional_config_label(const std::string& module_name, const std::string& label_name = "label", const std::string& def = ""); } - -#endif diff --git a/include/drawtypes/ramp.hpp b/include/drawtypes/ramp.hpp index 38c0adbb..c76ba991 100644 --- a/include/drawtypes/ramp.hpp +++ b/include/drawtypes/ramp.hpp @@ -1,5 +1,4 @@ -#ifndef _DRAWTYPES_RAMP_HPP_ -#define _DRAWTYPES_RAMP_HPP_ +#pragma once #include <string> #include <vector> @@ -17,7 +16,7 @@ namespace drawtypes public: Ramp(){} - Ramp(std::vector<std::unique_ptr<Icon>> icons); + explicit Ramp(std::vector<std::unique_ptr<Icon>> icons); void add(std::unique_ptr<Icon> &&icon); std::unique_ptr<Icon> &get(int idx); @@ -30,5 +29,3 @@ namespace drawtypes std::unique_ptr<Ramp> get_config_ramp(const std::string& module_name, const std::string& ramp_name = "ramp", bool required = true); } - -#endif diff --git a/include/eventloop.hpp b/include/eventloop.hpp index 5d0c9a70..61770a81 100644 --- a/include/eventloop.hpp +++ b/include/eventloop.hpp @@ -1,5 +1,4 @@ -#ifndef _EVENTLOOP_HPP_ -#define _EVENTLOOP_HPP_ +#pragma once #include <map> @@ -46,7 +45,7 @@ class EventLoop bool running(); public: - EventLoop(std::string input_pipe); + explicit EventLoop(std::string input_pipe); void start(); void stop(); @@ -56,5 +55,3 @@ class EventLoop void add_stdin_subscriber(const std::string& module_name); }; - -#endif diff --git a/include/exception.hpp b/include/exception.hpp index b0880f52..4c57d218 100644 --- a/include/exception.hpp +++ b/include/exception.hpp @@ -1,20 +1,16 @@ -#ifndef _EXCEPTION_HPP_ -#define _EXCEPTION_HPP_ +#pragma once #include <string> #include <stdexcept> struct Exception : public std::runtime_error { - Exception(std::string const &error_message = "") + explicit Exception(const std::string& error_message = "") : std::runtime_error(error_message.c_str()) {} }; #define DefineChildException(ExName, ParentEx) struct ExName : public ParentEx { \ - ExName(std::string error_message = "") \ + explicit ExName(const std::string& error_message = "") \ : ParentEx("["+ std::string(__FUNCTION__) +"] => "+ error_message) {} \ } #define DefineBaseException(ExName) DefineChildException(ExName, Exception) - -#endif - diff --git a/include/interfaces/alsa.hpp b/include/interfaces/alsa.hpp index 8e1a83af..5a678d0e 100644 --- a/include/interfaces/alsa.hpp +++ b/include/interfaces/alsa.hpp @@ -1,5 +1,4 @@ -#ifndef _INTERFACES_ALSA_HPP_ -#define _INTERFACES_ALSA_HPP_ +#pragma once #include <functional> #include <string> @@ -16,11 +15,14 @@ namespace alsa class Exception : public ::Exception { public: - Exception(const std::string& msg) : ::Exception("[Alsa] "+ msg){} + explicit Exception(const std::string& msg) : ::Exception("[Alsa] "+ msg){} }; - class ControlInterfaceError : public Exception { - using Exception::Exception; + class ControlInterfaceError : public Exception + { + public: + ControlInterfaceError(int code, const std::string& msg) + : Exception(msg +" ["+ std::to_string(code) +"]") {} }; class ControlInterface @@ -36,12 +38,12 @@ namespace alsa snd_ctl_elem_id_t *id; public: - ControlInterface(int numid) throw(ControlInterfaceError); + explicit ControlInterface(int numid); ~ControlInterface(); - bool wait(int timeout = -1) throw(ControlInterfaceError); + bool wait(int timeout = -1); - bool test_device_plugged() throw(ControlInterfaceError); + bool test_device_plugged(); }; @@ -57,10 +59,10 @@ namespace alsa snd_mixer_elem_t *mixer_element = nullptr; public: - Mixer(const std::string& mixer_control_name) throw(MixerError); + explicit Mixer(const std::string& mixer_control_name); ~Mixer(); - bool wait(int timeout = -1) throw(MixerError); + bool wait(int timeout = -1); int get_volume(); void set_volume(float percentage); @@ -72,5 +74,3 @@ namespace alsa void error_handler(const std::string& message); }; } - -#endif diff --git a/include/interfaces/mpd.hpp b/include/interfaces/mpd.hpp index d6e45744..8e047040 100644 --- a/include/interfaces/mpd.hpp +++ b/include/interfaces/mpd.hpp @@ -1,5 +1,4 @@ -#ifndef _INTERFACES_MPD_HPP_ -#define _INTERFACES_MPD_HPP_ +#pragma once #include <string> #include <stdlib.h> @@ -24,7 +23,7 @@ namespace mpd class ClientError : public Exception { public: - ClientError(const std::string& msg, mpd_error code, bool clearable) + explicit ClientError(const std::string& msg, mpd_error code, bool clearable) : Exception("[mpd::ClientError::"+ std::to_string(code) +"] "+ msg, clearable){} }; @@ -46,14 +45,14 @@ namespace mpd struct Song { Song(){} - Song(mpd_song *song); + explicit Song(mpd_song *song); std::shared_ptr<mpd_song> song; std::string get_artist(); std::string get_album(); std::string get_title(); - unsigned get_duration(); + // unsigned get_duration(); operator bool() { return this->song.get() != nullptr; @@ -69,7 +68,7 @@ namespace mpd } }; - Status(mpd_status *status); + explicit Status(mpd_status *status); std::unique_ptr<struct mpd_status, StatusDeleter> status; std::unique_ptr<Song> song; @@ -92,8 +91,8 @@ namespace mpd void update(int event); void update_timer(); - unsigned get_total_time(); - unsigned get_elapsed_time(); + // unsigned get_total_time(); + // unsigned get_elapsed_time(); unsigned get_elapsed_percentage(); std::string get_formatted_elapsed(); std::string get_formatted_total(); @@ -128,12 +127,14 @@ namespace mpd void check_errors(); public: + Connection() = default; + static std::shared_ptr<Connection> &get(); void connect(); void disconnect(); bool connected(); - bool retry_connection(int interval = 1); + // bool retry_connection(int interval = 1); void idle(); int noidle(); @@ -147,15 +148,15 @@ namespace mpd void play(); void pause(bool state); - void toggle(); + // void toggle(); void stop(); void prev(); void next(); void seek(int percentage); - void repeat(bool mode); - void random(bool mode); - void single(bool mode); + void set_repeat(bool mode); + void set_random(bool mode); + void set_single(bool mode); }; struct MpdStatus @@ -179,5 +180,3 @@ namespace mpd } }; } - -#endif diff --git a/include/interfaces/net.hpp b/include/interfaces/net.hpp index 91ddff98..193aea97 100644 --- a/include/interfaces/net.hpp +++ b/include/interfaces/net.hpp @@ -1,5 +1,4 @@ -#ifndef _INTERFACES_NET_HPP_ -#define _INTERFACES_NET_HPP_ +#pragma once #include <string> #include <memory> @@ -16,13 +15,12 @@ namespace net { bool is_wireless_interface(const std::string& ifname); - // // Network - // + class NetworkException : public Exception { public: - NetworkException(const std::string& msg) + explicit NetworkException(const std::string& msg) : Exception("[Network] "+ msg){} }; @@ -34,22 +32,21 @@ namespace net struct ifreq data; int fd; - bool test_interface() throw(NetworkException); - bool test_connection() throw(NetworkException); + bool test_interface(); + bool test_connection(); public: - Network(const std::string& interface) throw(NetworkException); + explicit Network(const std::string& interface); ~Network(); virtual bool connected(); virtual bool test(); - std::string get_ip() throw(NetworkException); + std::string get_ip(); }; - // // WiredNetwork - // + class WiredNetworkException : public NetworkException { using NetworkException::NetworkException; }; @@ -59,14 +56,13 @@ namespace net int linkspeed = 0; public: - WiredNetwork(const std::string& interface); + explicit WiredNetwork(const std::string& interface); std::string get_link_speed(); }; - // // WirelessNetwork - // + class WirelessNetworkException : public NetworkException { using NetworkException::NetworkException; }; @@ -76,14 +72,12 @@ namespace net struct iwreq iw; public: - WirelessNetwork(const std::string& interface); + explicit WirelessNetwork(const std::string& interface); - std::string get_essid() throw(WirelessNetworkException); - float get_signal_dbm() throw(WirelessNetworkException); + std::string get_essid(); + float get_signal_dbm(); float get_signal_quality(); }; } - -#endif diff --git a/include/lemonbuddy.hpp b/include/lemonbuddy.hpp index c8807a83..0536fe5c 100644 --- a/include/lemonbuddy.hpp +++ b/include/lemonbuddy.hpp @@ -1,5 +1,4 @@ -#ifndef _LEMONBUDDY_HPP_ -#define _LEMONBUDDY_HPP_ +#pragma once #include "exception.hpp" @@ -9,5 +8,3 @@ void register_pid(pid_t pid); void unregister_pid(pid_t pid); void register_command_handler(const std::string& module_name); - -#endif diff --git a/include/modules/backlight.hpp b/include/modules/backlight.hpp index 9f7957b4..e03517fa 100644 --- a/include/modules/backlight.hpp +++ b/include/modules/backlight.hpp @@ -1,5 +1,4 @@ -#ifndef _MODULES_BACKLIGHT_HPP_ -#define _MODULES_BACKLIGHT_HPP_ +#pragma once #include "config.hpp" #include "modules/base.hpp" @@ -10,9 +9,9 @@ namespace modules { DefineModule(BacklightModule, InotifyModule) { - const char *TAG_LABEL = "<label>"; - const char *TAG_BAR = "<bar>"; - const char *TAG_RAMP = "<ramp>"; + static constexpr auto TAG_LABEL = "<label>"; + static constexpr auto TAG_BAR = "<bar>"; + static constexpr auto TAG_RAMP = "<ramp>"; std::unique_ptr<drawtypes::Bar> bar; std::unique_ptr<drawtypes::Ramp> ramp; @@ -22,14 +21,17 @@ namespace modules std::string path_val, path_max; float val = 0, max = 0; - std::atomic<int> percentage; + concurrency::Atomic<int> percentage; public: - BacklightModule(const std::string& name); + explicit BacklightModule(const std::string& name); bool on_event(InotifyEvent *event); bool build(Builder *builder, const std::string& tag); + + void idle() const + { + std::this_thread::sleep_for(25ms); + } }; } - -#endif diff --git a/include/modules/base.hpp b/include/modules/base.hpp index 9a81561b..8ff00daa 100644 --- a/include/modules/base.hpp +++ b/include/modules/base.hpp @@ -1,5 +1,4 @@ -#ifndef _MODULES_BASE_HPP_ -#define _MODULES_BASE_HPP_ +#pragma once #include <chrono> #include <memory> @@ -10,24 +9,29 @@ #include <condition_variable> #include <map> #include <thread> -#include <atomic> #include <algorithm> #include "exception.hpp" #include "services/builder.hpp" #include "services/inotify.hpp" +#include "services/logger.hpp" #include "utils/config.hpp" #include "utils/string.hpp" #include "utils/concurrency.hpp" using namespace std::chrono_literals; -#define DEFAULT_FORMAT "format" +#define Concat(one, two) one ## two + +#define _Stringify(expr) #expr +#define Stringify(expr) _Stringify(expr) #define DefineModule(ModuleName, ModuleType) struct ModuleName : public ModuleType<ModuleName> #define CastModule(ModuleName) static_cast<ModuleName *>(this) #define ConstCastModule(ModuleName) static_cast<ModuleName const &>(*this) +#define DEFAULT_FORMAT "format" + DefineBaseException(ModuleError); DefineChildException(UndefinedFormat, ModuleError); DefineChildException(UndefinedFormatTag, ModuleError); @@ -75,10 +79,10 @@ class ModuleFormatter std::map<std::string, std::unique_ptr<Format>> formats; public: - ModuleFormatter(const std::string& module_name) + explicit ModuleFormatter(const std::string& module_name) : module_name(module_name) {} - void add(const std::string& name, const std::string& fallback, std::vector<std::string> &&tags, std::vector<std::string> &&whitelist = {}) throw(UndefinedFormatTag) + void add(const std::string& name, const std::string& fallback, std::vector<std::string> &&tags, std::vector<std::string> &&whitelist = {}) { auto format = std::make_unique<Format>(); @@ -106,7 +110,7 @@ class ModuleFormatter this->formats.insert(std::make_pair(name, std::move(format))); } - std::unique_ptr<Format>& get(const std::string& format_name) throw(UndefinedFormat) + std::unique_ptr<Format>& get(const std::string& format_name) { auto format = this->formats.find(format_name); if (format == this->formats.end()) @@ -114,7 +118,7 @@ class ModuleFormatter return format->second; } - bool has(const std::string& tag, const std::string& format_name) throw(UndefinedFormat) + bool has(const std::string& tag, const std::string& format_name) { auto format = this->formats.find(format_name); if (format == this->formats.end()) @@ -168,13 +172,12 @@ namespace modules std::vector<std::thread> threads; public: - Module(const std::string& name) + Module(const std::string& name, bool lazy_builder = true) + : name_("module/"+ name), builder(std::make_unique<Builder>(lazy_builder)) { - this->name_ = "module/" + name; this->enable(false); this->cache = ""; // this->builder = std::make_unique<Builder>(false); - this->builder = std::make_unique<Builder>(); this->formatter = std::make_unique<ModuleFormatter>(ConstCastModule(ModuleImpl).name()); } @@ -274,15 +277,9 @@ namespace modules template<typename ModuleImpl> class StaticModule : public Module<ModuleImpl> { - protected: - std::unique_ptr<Builder> builder; + using Module<ModuleImpl>::Module; public: - StaticModule(const std::string& name, bool lazybuilder = true) : Module<ModuleImpl>(name) - { - this->builder = std::make_unique<Builder>(lazybuilder); - } - void start() { this->enable(true); @@ -385,23 +382,33 @@ namespace modules } } + void idle() const + { + // std::this_thread::sleep_for(1s); + } + void poll_events() { std::lock_guard<concurrency::SpinLock> lck(this->update_lock); std::vector<std::unique_ptr<InotifyWatch>> watches; - for (auto &&w : this->watch_list) { + for (auto &&w : this->watch_list) watches.emplace_back(std::make_unique<InotifyWatch>(w.first, w.second)); - } while (this->enabled()) { + ConstCastModule(ModuleImpl).idle(); + for (auto &&w : watches) { log_trace("Polling inotify event for watch at "+ (*w)()); + if (w->has_event(500 / watches.size())) { std::unique_ptr<InotifyEvent> event = w->get_event(); + watches.clear(); + if (CastModule(ModuleImpl)->on_event(event.get())) CastModule(ModuleImpl)->broadcast(); + return; } } @@ -433,5 +440,3 @@ namespace modules } }; } - -#endif diff --git a/include/modules/battery.hpp b/include/modules/battery.hpp index 5d3fedd7..8130dc65 100644 --- a/include/modules/battery.hpp +++ b/include/modules/battery.hpp @@ -1,5 +1,4 @@ -#ifndef _MODULES_BATTERY_HPP_ -#define _MODULES_BATTERY_HPP_ +#pragma once #include <memory> #include <string> @@ -47,10 +46,10 @@ namespace modules concurrency::Atomic<int> percentage; int full_at; - void subthread_runner(); + void subthread_routine(); public: - BatteryModule(const std::string& name); + explicit BatteryModule(const std::string& name); void start(); @@ -59,5 +58,3 @@ namespace modules bool build(Builder *builder, const std::string& tag); }; } - -#endif diff --git a/include/modules/bspwm.hpp b/include/modules/bspwm.hpp index 0cab5f9b..ffd7a09b 100644 --- a/include/modules/bspwm.hpp +++ b/include/modules/bspwm.hpp @@ -1,5 +1,4 @@ -#ifndef _MODULES_BSPWM_HPP_ -#define _MODULES_BSPWM_HPP_ +#pragma once #include <memory> #include <string> @@ -49,10 +48,10 @@ namespace modules DefineModule(BspwmModule, EventModule) { - const char *TAG_LABEL_STATE = "<label:state>"; - const char *TAG_LABEL_MODE = "<label:mode>"; + static constexpr auto TAG_LABEL_STATE = "<label:state>"; + static constexpr auto TAG_LABEL_MODE = "<label:mode>"; - const char *EVENT_CLICK = "bwm"; + static constexpr auto EVENT_CLICK = "bwm"; std::map<Bspwm::Flag, std::unique_ptr<drawtypes::Label>> mode_labels; std::map<Bspwm::Flag, std::unique_ptr<drawtypes::Label>> state_labels; @@ -63,7 +62,7 @@ namespace modules std::unique_ptr<drawtypes::IconMap> icons; std::string monitor; - int socket_fd; + int socket_fd = -1; std::string prev_data; public: @@ -77,5 +76,3 @@ namespace modules bool handle_command(const std::string& cmd); }; } - -#endif diff --git a/include/modules/counter.hpp b/include/modules/counter.hpp index 7d2abcef..42291f69 100644 --- a/include/modules/counter.hpp +++ b/include/modules/counter.hpp @@ -1,5 +1,4 @@ -#ifndef _MODULES_COUNTER_HPP_ -#define _MODULES_COUNTER_HPP_ +#pragma once #include "modules/base.hpp" @@ -7,16 +6,14 @@ namespace modules { DefineModule(CounterModule, TimerModule) { - const char *TAG_COUNTER = "<counter>"; + static constexpr auto TAG_COUNTER = "<counter>"; concurrency::Atomic<int> counter; public: - CounterModule(const std::string& name); + explicit CounterModule(const std::string& name); bool update(); bool build(Builder *builder, const std::string& tag); }; } - -#endif diff --git a/include/modules/cpu.hpp b/include/modules/cpu.hpp index f89e40e2..01541f71 100644 --- a/include/modules/cpu.hpp +++ b/include/modules/cpu.hpp @@ -1,5 +1,4 @@ -#ifndef _MODULES_CPU_HPP_ -#define _MODULES_CPU_HPP_ +#pragma once #include <memory> #include <string> @@ -23,10 +22,10 @@ namespace modules DefineModule(CpuModule, TimerModule) { - const char *TAG_LABEL = "<label>"; - const char *TAG_BAR_LOAD = "<bar:load>"; - const char *TAG_RAMP_LOAD = "<ramp:load>"; - const char *TAG_RAMP_LOAD_PER_CORE = "<ramp:load_per_core>"; + static constexpr auto TAG_LABEL = "<label>"; + static constexpr auto TAG_BAR_LOAD = "<bar:load>"; + static constexpr auto TAG_RAMP_LOAD = "<ramp:load>"; + static constexpr auto TAG_RAMP_LOAD_PER_CORE = "<ramp:load_per_core>"; std::vector<std::unique_ptr<CpuTime>> cpu_times; std::vector<std::unique_ptr<CpuTime>> prev_cpu_times; @@ -37,18 +36,16 @@ namespace modules std::unique_ptr<drawtypes::Label> label; std::unique_ptr<drawtypes::Label> label_tokenized; - float current_total_load; + float current_total_load = 0; std::vector<float> current_load; bool read_values(); float get_load(int core); public: - CpuModule(const std::string& name); + explicit CpuModule(const std::string& name); bool update(); bool build(Builder *builder, const std::string& tag); }; } - -#endif diff --git a/include/modules/date.hpp b/include/modules/date.hpp index d57f9e94..e804f1e6 100644 --- a/include/modules/date.hpp +++ b/include/modules/date.hpp @@ -1,7 +1,4 @@ -#ifndef _MODULES_DATE_HPP_ -#define _MODULES_DATE_HPP_ - -#include <string> +#pragma once #include "modules/base.hpp" @@ -9,20 +6,20 @@ namespace modules { DefineModule(DateModule, TimerModule) { - const char *TAG_DATE = "<date>"; + static constexpr auto TAG_DATE = "<date>"; - const char *EVENT_TOGGLE = "datetoggle"; + static constexpr auto EVENT_TOGGLE = "datetoggle"; std::unique_ptr<Builder> builder; std::string date; std::string date_detailed; - char date_str[256]; + char date_str[256] = {}; bool detailed = false; public: - DateModule(const std::string& name); + explicit DateModule(const std::string& name); bool update(); bool build(Builder *builder, const std::string& tag); @@ -31,5 +28,3 @@ namespace modules bool handle_command(const std::string& cmd); }; } - -#endif diff --git a/include/modules/i3.hpp b/include/modules/i3.hpp index 028e9973..be0e96e4 100644 --- a/include/modules/i3.hpp +++ b/include/modules/i3.hpp @@ -1,14 +1,10 @@ -#ifndef _MODULES_I3_HPP_ -#define _MODULES_I3_HPP_ - -#include "config.hpp" +#pragma once #include <memory> -#include <string> #include <unistd.h> - #include <i3ipc++/ipc.hpp> +#include "config.hpp" #include "modules/base.hpp" #include "drawtypes/icon.hpp" #include "drawtypes/label.hpp" @@ -46,11 +42,9 @@ namespace modules DefineModule(i3Module, EventModule) { - const char *TAG_LABEL_STATE = "<label:state>"; + static constexpr auto TAG_LABEL_STATE = "<label:state>"; - const char *EVENT_CLICK = "i3"; - - concurrency::SpinLock update_lock; + static constexpr auto EVENT_CLICK = "i3"; std::unique_ptr<i3ipc::connection> ipc; @@ -66,7 +60,7 @@ namespace modules bool local_workspaces = true; std::size_t workspace_name_strip_nchars = 0; - int ipc_fd; + int ipc_fd = -1; public: i3Module(const std::string& name, const std::string& monitor); @@ -81,5 +75,3 @@ namespace modules bool handle_command(const std::string& cmd); }; } - -#endif diff --git a/include/modules/memory.hpp b/include/modules/memory.hpp index efe21922..d5c82916 100644 --- a/include/modules/memory.hpp +++ b/include/modules/memory.hpp @@ -1,5 +1,4 @@ -#ifndef _MODULES_MEMORY_HPP_ -#define _MODULES_MEMORY_HPP_ +#pragma once #include <atomic> @@ -12,9 +11,9 @@ namespace modules { DefineModule(MemoryModule, TimerModule) { - const char *TAG_LABEL = "<label>"; - const char *TAG_BAR_USED = "<bar:used>"; - const char *TAG_BAR_FREE = "<bar:free>"; + static constexpr auto TAG_LABEL = "<label>"; + static constexpr auto TAG_BAR_USED = "<bar:used>"; + static constexpr auto TAG_BAR_FREE = "<bar:free>"; std::unique_ptr<drawtypes::Bar> bar_used; std::unique_ptr<drawtypes::Bar> bar_free; @@ -25,11 +24,9 @@ namespace modules std::atomic<int> percentage_free; public: - MemoryModule(const std::string& name); + explicit MemoryModule(const std::string& name); bool update(); bool build(Builder *builder, const std::string& tag); }; } - -#endif diff --git a/include/modules/menu.hpp b/include/modules/menu.hpp index 610d7f2e..e982b38e 100644 --- a/include/modules/menu.hpp +++ b/include/modules/menu.hpp @@ -1,5 +1,4 @@ -#ifndef _MODULES_MENU_HPP_ -#define _MODULES_MENU_HPP_ +#pragma once #include <mutex> @@ -18,11 +17,11 @@ namespace modules DefineModule(MenuModule, StaticModule) { - const char *TAG_LABEL_TOGGLE = "<label:toggle>"; - const char *TAG_MENU = "<menu>"; + static constexpr auto TAG_LABEL_TOGGLE = "<label:toggle>"; + static constexpr auto TAG_MENU = "<menu>"; - const char *EVENT_MENU_OPEN = "menu_open:"; - const char *EVENT_MENU_CLOSE = "menu_close"; + static constexpr auto EVENT_MENU_OPEN = "menu_open:"; + static constexpr auto EVENT_MENU_CLOSE = "menu_close"; std::mutex output_mtx; std::mutex cmd_mtx; @@ -34,14 +33,12 @@ namespace modules std::unique_ptr<drawtypes::Label> label_close; public: - MenuModule(const std::string& name); + explicit MenuModule(const std::string& name); - std::string get_output() throw(UndefinedFormat); + std::string get_output(); bool build(Builder *builder, const std::string& tag); bool handle_command(const std::string& cmd); }; } - -#endif diff --git a/include/modules/mpd.hpp b/include/modules/mpd.hpp index cc7d1190..aeaf7aca 100644 --- a/include/modules/mpd.hpp +++ b/include/modules/mpd.hpp @@ -1,5 +1,4 @@ -#ifndef _MODULES_MPD_HPP_ -#define _MODULES_MPD_HPP_ +#pragma once #include "modules/base.hpp" #include "interfaces/mpd.hpp" @@ -14,32 +13,32 @@ namespace modules static const int PROGRESSBAR_THREAD_SYNC_COUNT = 10; const std::chrono::duration<double> PROGRESSBAR_THREAD_INTERVAL = 1s; - const char *FORMAT_ONLINE = "format:online"; - const char *TAG_BAR_PROGRESS = "<bar:progress>"; - const char *TAG_TOGGLE = "<toggle>"; - const char *TAG_LABEL_SONG = "<label:song>"; - const char *TAG_LABEL_TIME = "<label:time>"; - const char *TAG_ICON_RANDOM = "<icon:random>"; - const char *TAG_ICON_REPEAT = "<icon:repeat>"; - const char *TAG_ICON_REPEAT_ONE = "<icon:repeatone>"; - const char *TAG_ICON_PREV = "<icon:prev>"; - const char *TAG_ICON_STOP = "<icon:stop>"; - const char *TAG_ICON_PLAY = "<icon:play>"; - const char *TAG_ICON_PAUSE = "<icon:pause>"; - const char *TAG_ICON_NEXT = "<icon:next>"; + static constexpr auto FORMAT_ONLINE = "format:online"; + static constexpr auto TAG_BAR_PROGRESS = "<bar:progress>"; + static constexpr auto TAG_TOGGLE = "<toggle>"; + static constexpr auto TAG_LABEL_SONG = "<label:song>"; + static constexpr auto TAG_LABEL_TIME = "<label:time>"; + static constexpr auto TAG_ICON_RANDOM = "<icon:random>"; + static constexpr auto TAG_ICON_REPEAT = "<icon:repeat>"; + static constexpr auto TAG_ICON_REPEAT_ONE = "<icon:repeatone>"; + static constexpr auto TAG_ICON_PREV = "<icon:prev>"; + static constexpr auto TAG_ICON_STOP = "<icon:stop>"; + static constexpr auto TAG_ICON_PLAY = "<icon:play>"; + static constexpr auto TAG_ICON_PAUSE = "<icon:pause>"; + static constexpr auto TAG_ICON_NEXT = "<icon:next>"; - const char *FORMAT_OFFLINE = "format:offline"; - const char *TAG_LABEL_OFFLINE = "<label:offline>"; + static constexpr auto FORMAT_OFFLINE = "format:offline"; + static constexpr auto TAG_LABEL_OFFLINE = "<label:offline>"; - const char *EVENT_PLAY = "mpdplay"; - const char *EVENT_PAUSE = "mpdpause"; - const char *EVENT_STOP = "mpdstop"; - const char *EVENT_PREV = "mpdprev"; - const char *EVENT_NEXT = "mpdnext"; - const char *EVENT_REPEAT = "mpdrepeat"; - const char *EVENT_REPEAT_ONE = "mpdrepeatone"; - const char *EVENT_RANDOM = "mpdrandom"; - const char *EVENT_SEEK = "mpdseek"; + 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"; std::unique_ptr<drawtypes::Bar> bar_progress; std::unique_ptr<drawtypes::IconMap> icons; @@ -56,13 +55,13 @@ namespace modules std::shared_ptr<mpd::Connection> mpd; std::chrono::system_clock::time_point synced_at; - float sync_interval; + float sync_interval = 0.5f; bool clickable_progress = false; std::string progress_fill, progress_empty, progress_indicator; public: - MpdModule(const std::string& name); + explicit MpdModule(const std::string& name); ~MpdModule(); void start(); @@ -74,5 +73,3 @@ namespace modules bool handle_command(const std::string& cmd); }; } - -#endif diff --git a/include/modules/network.hpp b/include/modules/network.hpp index 10f217ec..9a6375ab 100644 --- a/include/modules/network.hpp +++ b/include/modules/network.hpp @@ -1,5 +1,4 @@ -#ifndef _MODULES_NETWORK_HPP_ -#define _MODULES_NETWORK_HPP_ +#pragma once #include <atomic> #include <chrono> @@ -18,15 +17,15 @@ namespace modules { DefineModule(NetworkModule, TimerModule) { - const char *FORMAT_CONNECTED = "format:connected"; - const char *FORMAT_PACKETLOSS = "format:packetloss"; - const char *FORMAT_DISCONNECTED = "format:disconnected"; + static constexpr auto FORMAT_CONNECTED = "format:connected"; + static constexpr auto FORMAT_PACKETLOSS = "format:packetloss"; + static constexpr auto FORMAT_DISCONNECTED = "format:disconnected"; - const char *TAG_RAMP_SIGNAL = "<ramp:signal>"; - const char *TAG_LABEL_CONNECTED = "<label:connected>"; - const char *TAG_LABEL_DISCONNECTED = "<label:disconnected>"; - const char *TAG_LABEL_PACKETLOSS = "<label:packetloss>"; - const char *TAG_ANIMATION_PACKETLOSS = "<animation:packetloss>"; + static constexpr auto TAG_RAMP_SIGNAL = "<ramp:signal>"; + static constexpr auto TAG_LABEL_CONNECTED = "<label:connected>"; + static constexpr auto TAG_LABEL_DISCONNECTED = "<label:disconnected>"; + static constexpr auto TAG_LABEL_PACKETLOSS = "<label:packetloss>"; + static constexpr auto TAG_ANIMATION_PACKETLOSS = "<animation:packetloss>"; std::unique_ptr<net::WiredNetwork> wired_network; std::unique_ptr<net::WirelessNetwork> wireless_network; @@ -51,7 +50,7 @@ namespace modules void subthread_routine(); public: - NetworkModule(const std::string& name); + explicit NetworkModule(const std::string& name); void start(); bool update(); @@ -62,5 +61,3 @@ namespace modules }; } - -#endif diff --git a/include/modules/script.hpp b/include/modules/script.hpp index dd728a67..de55ad52 100644 --- a/include/modules/script.hpp +++ b/include/modules/script.hpp @@ -1,5 +1,4 @@ -#ifndef _MODULES_SCRIPT_HPP_ -#define _MODULES_SCRIPT_HPP_ +#pragma once #include "modules/base.hpp" #include "services/command.hpp" @@ -8,7 +7,7 @@ namespace modules { DefineModule(ScriptModule, TimerModule) { - const char *TAG_OUTPUT = "<output>"; + static constexpr auto TAG_OUTPUT = "<output>"; std::unique_ptr<Builder> builder; @@ -25,12 +24,10 @@ namespace modules protected: public: - ScriptModule(const std::string& name); + explicit ScriptModule(const std::string& name); bool update(); bool build(Builder *builder, const std::string& tag); std::string get_output(); }; } - -#endif diff --git a/include/modules/text.hpp b/include/modules/text.hpp index 9bb76449..e8116d72 100644 --- a/include/modules/text.hpp +++ b/include/modules/text.hpp @@ -1,5 +1,4 @@ -#ifndef _MODULES_TEXT_HPP_ -#define _MODULES_TEXT_HPP_ +#pragma once #include "modules/base.hpp" @@ -7,14 +6,12 @@ namespace modules { DefineModule(TextModule, StaticModule) { - const char *FORMAT = "content"; + static constexpr auto FORMAT = "content"; public: - TextModule(const std::string& name) throw(UndefinedFormat); + explicit TextModule(const std::string& name); std::string get_format(); std::string get_output(); }; } - -#endif diff --git a/include/modules/torrent.hpp b/include/modules/torrent.hpp index f34d936f..0b70f9af 100644 --- a/include/modules/torrent.hpp +++ b/include/modules/torrent.hpp @@ -1,5 +1,4 @@ -#ifndef _MODULES_TORRENT_HPP_ -#define _MODULES_TORRENT_HPP_ +#pragma once #include "modules/base.hpp" #include "drawtypes/bar.hpp" @@ -19,8 +18,8 @@ namespace modules DefineModule(TorrentModule, InotifyModule) { - const char *TAG_LABEL = "<label>"; - const char *TAG_BAR_PROGRESS = "<bar:progress>"; + static constexpr auto TAG_LABEL = "<label>"; + static constexpr auto TAG_BAR_PROGRESS = "<bar:progress>"; std::vector<std::unique_ptr<Torrent>> torrents; std::unique_ptr<drawtypes::Label> label; @@ -31,12 +30,10 @@ namespace modules std::vector<std::unique_ptr<Torrent>> &read_data_into(std::vector<std::unique_ptr<Torrent>> &container); public: - TorrentModule(const std::string& name); + explicit TorrentModule(const std::string& name); void start(); bool on_event(InotifyEvent *event); bool build(Builder *builder, const std::string& tag); }; } - -#endif diff --git a/include/modules/volume.hpp b/include/modules/volume.hpp index 222e1197..6c85a5cc 100644 --- a/include/modules/volume.hpp +++ b/include/modules/volume.hpp @@ -1,5 +1,4 @@ -#ifndef _MODULES_VOLUME_HPP_ -#define _MODULES_VOLUME_HPP_ +#pragma once #include "modules/base.hpp" #include "interfaces/alsa.hpp" @@ -12,17 +11,17 @@ namespace modules { DefineModule(VolumeModule, EventModule) { - const char *FORMAT_VOLUME = "format:volume"; - const char *FORMAT_MUTED = "format:muted"; + static constexpr auto FORMAT_VOLUME = "format:volume"; + static constexpr auto FORMAT_MUTED = "format:muted"; - const char *TAG_RAMP_VOLUME = "<ramp:volume>"; - const char *TAG_BAR_VOLUME = "<bar:volume>"; - const char *TAG_LABEL_VOLUME = "<label:volume>"; - const char *TAG_LABEL_MUTED = "<label:muted>"; + static constexpr auto TAG_RAMP_VOLUME = "<ramp:volume>"; + static constexpr auto TAG_BAR_VOLUME = "<bar:volume>"; + static constexpr auto TAG_LABEL_VOLUME = "<label:volume>"; + static constexpr auto TAG_LABEL_MUTED = "<label:muted>"; - const char *EVENT_VOLUME_UP = "volup"; - const char *EVENT_VOLUME_DOWN = "voldown"; - const char *EVENT_TOGGLE_MUTE = "volmute"; + static constexpr auto EVENT_VOLUME_UP = "volup"; + static constexpr auto EVENT_VOLUME_DOWN = "voldown"; + static constexpr auto EVENT_TOGGLE_MUTE = "volmute"; std::unique_ptr<alsa::Mixer> master_mixer; std::unique_ptr<alsa::Mixer> speaker_mixer; @@ -43,7 +42,7 @@ namespace modules bool muted = false; public: - VolumeModule(const std::string& name) throw(ModuleError); + explicit VolumeModule(const std::string& name); ~VolumeModule(); bool has_event(); @@ -56,5 +55,3 @@ namespace modules bool handle_command(const std::string& cmd); }; } - -#endif diff --git a/include/registry.hpp b/include/registry.hpp index 85208eee..81202f50 100644 --- a/include/registry.hpp +++ b/include/registry.hpp @@ -1,22 +1,17 @@ -#ifndef _REGISTRY_HPP_ -#define _REGISTRY_HPP_ +#pragma once -#include <condition_variable> - -#include "exception.hpp" #include "modules/base.hpp" DefineBaseException(RegistryError); DefineChildException(ModuleNotFound, RegistryError); -struct ModuleEntry +struct RegistryModuleEntry { concurrency::Atomic<bool> warmedup; std::unique_ptr<modules::ModuleInterface> module; - ModuleEntry(std::unique_ptr<modules::ModuleInterface> &&module) + RegistryModuleEntry(std::unique_ptr<modules::ModuleInterface> &&module) : warmedup(false) { - this->warmedup = false; this->module.swap(module); } }; @@ -34,7 +29,7 @@ class Registry concurrency::Atomic<int> stage; - std::vector<std::unique_ptr<ModuleEntry>> modules; + std::vector<std::unique_ptr<RegistryModuleEntry>> modules; std::mutex wait_mtx; std::condition_variable wait_cv; @@ -49,9 +44,7 @@ class Registry bool wait(); void notify(const std::string& module_name); std::string get(const std::string& module_name); - std::unique_ptr<ModuleEntry>& find(const std::string& module_name) throw(ModuleNotFound); + std::unique_ptr<RegistryModuleEntry>& find(const std::string& module_name); }; std::shared_ptr<Registry> &get_registry(); - -#endif diff --git a/include/services/builder.hpp b/include/services/builder.hpp index dbef504b..32f9e224 100644 --- a/include/services/builder.hpp +++ b/include/services/builder.hpp @@ -1,5 +1,4 @@ -#ifndef _SERVICES_BUILDER_HPP_ -#define _SERVICES_BUILDER_HPP_ +#pragma once #include <string> #include <memory> @@ -43,7 +42,7 @@ class Builder void align_right(); public: - Builder(bool lazy_closing = true) : lazy_closing(lazy_closing){} + explicit Builder(bool lazy_closing = true) : lazy_closing(lazy_closing){} void set_lazy_closing(bool mode) { this->lazy_closing = mode; } @@ -93,10 +92,8 @@ class Builder void underline(const std::string& color = ""); void underline_close(bool force = false); - void invert(); + // void invert(); void cmd(int button, std::string action, bool condition = true); void cmd_close(bool force = false); }; - -#endif diff --git a/include/services/command.hpp b/include/services/command.hpp index 22518851..bc48f4cb 100644 --- a/include/services/command.hpp +++ b/include/services/command.hpp @@ -1,5 +1,4 @@ -#ifndef _SERVICES_COMMAND_HPP_ -#define _SERVICES_COMMAND_HPP_ +#pragma once #include <functional> #include <memory> @@ -9,9 +8,7 @@ #include "exception.hpp" #include "utils/proc.hpp" -class CommandException : public Exception { - using Exception::Exception; -}; +DefineBaseException(CommandException); class Command { @@ -25,21 +22,18 @@ class Command int fork_status; public: - Command(const std::string& cmd, int stdout[2] = nullptr, int stdin[2] = nullptr) - throw(CommandException); - ~Command() throw(CommandException); + Command(const std::string& cmd, int stdout[2] = nullptr, int stdin[2] = nullptr); + ~Command(); - int exec(bool wait_for_completion = true) throw(CommandException); - int wait() throw(CommandException); + int exec(bool wait_for_completion = true); + int wait(); void tail(std::function<void(std::string)> callback); int writeline(const std::string& data); int get_stdout(int); - int get_stdin(int); + // int get_stdin(int); - pid_t get_pid(); - int get_exit_status(); + // pid_t get_pid(); + // int get_exit_status(); }; - -#endif diff --git a/include/services/inotify.hpp b/include/services/inotify.hpp index a208a330..42223812 100644 --- a/include/services/inotify.hpp +++ b/include/services/inotify.hpp @@ -1,5 +1,4 @@ -#ifndef _SERVICES_INOTIFY_HPP_ -#define _SERVICES_INOTIFY_HPP_ +#pragma once #include <memory> #include <sys/inotify.h> @@ -9,7 +8,7 @@ class InotifyException : public Exception { public: - InotifyException(const std::string& msg) + explicit InotifyException(const std::string& msg) : Exception("[Inotify] "+ msg){} }; @@ -49,7 +48,7 @@ class InotifyWatch int fd = -1, wd = -1, mask; public: - InotifyWatch(const std::string& path, int mask = InotifyEvent::ALL) throw (InotifyException); + explicit InotifyWatch(const std::string& path, int mask = InotifyEvent::ALL); ~InotifyWatch(); std::string operator()() { @@ -59,5 +58,3 @@ class InotifyWatch bool has_event(int timeout_ms = 1000); std::unique_ptr<InotifyEvent> get_event(); }; - -#endif diff --git a/include/services/logger.hpp b/include/services/logger.hpp index 22ff0a62..3e5e6cdb 100644 --- a/include/services/logger.hpp +++ b/include/services/logger.hpp @@ -1,9 +1,9 @@ -#ifndef _SERVICES_LOGGER_HPP_ -#define _SERVICES_LOGGER_HPP_ +#pragma once #include <memory> #include <string> #include <mutex> +#include <unistd.h> #include "exception.hpp" #include "utils/streams.hpp" @@ -44,7 +44,7 @@ class Logger public: Logger(); - void set_level(int level); + // void set_level(int level); void add_level(int level); void fatal(const std::string& msg); @@ -65,5 +65,3 @@ class Logger }; std::shared_ptr<Logger> &get_logger(); - -#endif diff --git a/include/services/store.hpp b/include/services/store.hpp index d8bf334f..90dafe45 100644 --- a/include/services/store.hpp +++ b/include/services/store.hpp @@ -1,6 +1,9 @@ #if 0 #ifndef _SERVICES_STORE_HPP_ #define _SERVICES_STORE_HPP_ +======= +#pragma once +>>>>>>> task(core): Cleanup #include <string> #include <memory> @@ -33,6 +36,7 @@ struct Store Store(int size); ~Store() {} }; +<<<<<<< 78384e08923e669c65c68a8cdf81dba37a633d6c #endif #endif diff --git a/include/utils/cli.hpp b/include/utils/cli.hpp index c45f2e75..d74ea584 100644 --- a/include/utils/cli.hpp +++ b/include/utils/cli.hpp @@ -1,16 +1,12 @@ -#ifndef _UTILS_CLI_HPP_ -#define _UTILS_CLI_HPP_ +#pragma once -#include <string> #include <vector> #include "exception.hpp" namespace cli { - class CommandLineError : public Exception { - using Exception::Exception; - }; + DefineBaseException(CommandLineError); struct Option { @@ -40,5 +36,3 @@ namespace cli void usage(const std::string& usage, bool exit_success = true); } - -#endif diff --git a/include/utils/concurrency.hpp b/include/utils/concurrency.hpp index f7c028fc..8f0970cc 100644 --- a/include/utils/concurrency.hpp +++ b/include/utils/concurrency.hpp @@ -1,3 +1,5 @@ +#pragma once + #include <atomic> #include <mutex> #include <thread> @@ -59,7 +61,7 @@ namespace concurrency public: Atomic() = default; - Atomic(T init) { + explicit Atomic(T init) { this->operator=(init); } @@ -96,7 +98,7 @@ namespace concurrency public: Value() = default; - Value(T init) { + explicit Value(T init) { this->operator=(init); } diff --git a/include/utils/config.hpp b/include/utils/config.hpp index f689c9bf..a0833c11 100644 --- a/include/utils/config.hpp +++ b/include/utils/config.hpp @@ -1,62 +1,38 @@ -#ifndef _UTILS_CONFIG_HPP_ -#define _UTILS_CONFIG_HPP_ +#pragma once -#include <string> -#include <vector> #include <mutex> #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/ini_parser.hpp> #include "exception.hpp" -#include "services/logger.hpp" #include "utils/string.hpp" namespace config { - class ConfigException : public Exception { - using Exception::Exception; - }; - - class UnexistingFileError : public ConfigException { - using ConfigException::ConfigException; - }; - - class ParseError : public ConfigException { - using ConfigException::ConfigException; - }; - - class MissingValueException : public ConfigException { - using ConfigException::ConfigException; - }; - - class MissingListValueException : public ConfigException { - using ConfigException::ConfigException; - }; - - class InvalidVariableException : public ConfigException { - using ConfigException::ConfigException; - }; - - class InvalidReferenceException : public ConfigException { - using ConfigException::ConfigException; - }; + DefineBaseException(ConfigException); + DefineChildException(UnexistingFileError, ConfigException); + DefineChildException(ParseError, ConfigException); + DefineChildException(MissingValueException, ConfigException); + DefineChildException(MissingListValueException, ConfigException); + DefineChildException(InvalidVariableException, ConfigException); + DefineChildException(InvalidReferenceException, ConfigException); static std::recursive_mutex mtx; std::string get_bar_path(); void set_bar_path(const std::string& path); - void load(const std::string& path) throw(UnexistingFileError, ParseError); + void load(const std::string& path); void load(const char *dir, const std::string& path); - void reload() throw(ParseError); + // void reload(); boost::property_tree::ptree get_tree(); std::string build_path(const std::string& section, const std::string& key); template<typename T> - T dereference_var(const std::string& ref_section, const std::string& ref_key, const std::string& var, const T ref_val) throw (InvalidVariableException, InvalidReferenceException) + T dereference_var(const std::string& ref_section, const std::string& ref_key, const std::string& var, const T ref_val) { std::lock_guard<std::recursive_mutex> lck(config::mtx); @@ -85,7 +61,7 @@ namespace config } template<typename T> - T get(const std::string& section, const std::string& key) throw (MissingValueException) + T get(const std::string& section, const std::string& key) { std::lock_guard<std::recursive_mutex> lck(config::mtx); @@ -111,7 +87,7 @@ namespace config } template<typename T> - std::vector<T> get_list(const std::string& section, const std::string& key) throw (MissingListValueException) + std::vector<T> get_list(const std::string& section, const std::string& key) { std::lock_guard<std::recursive_mutex> lck(config::mtx); @@ -148,5 +124,3 @@ namespace config return vec; } } - -#endif diff --git a/include/utils/io.hpp b/include/utils/io.hpp index 672cf345..841ede44 100644 --- a/include/utils/io.hpp +++ b/include/utils/io.hpp @@ -1,5 +1,4 @@ -#ifndef _UTILS_IO_HPP_ -#define _UTILS_IO_HPP_ +#pragma once #include <string> #include <functional> @@ -30,9 +29,8 @@ namespace io std::string mode; FilePtr(const std::string& path, const std::string& mode = "a+") + : path(std::string(path)), mode(std::string(mode)) { - this->path = std::string(path); - this->mode = std::string(mode); this->fptr = fopen(this->path.c_str(), this->mode.c_str()); } @@ -69,12 +67,10 @@ namespace io void tail(int read_fd, int writeback_fd); bool poll_read(int fd, int timeout_ms = 1); - bool poll_write(int fd, int timeout_ms = 1); + // bool poll_write(int fd, int timeout_ms = 1); bool poll(int fd, short int events, int timeout_ms = 1); - int get_flags(int fd); - int set_blocking(int fd); - int set_non_blocking(int fd); + // int get_flags(int fd); + // int set_blocking(int fd); + // int set_non_blocking(int fd); } - -#endif diff --git a/include/utils/macros.hpp b/include/utils/macros.hpp new file mode 100644 index 00000000..28fd4e41 --- /dev/null +++ b/include/utils/macros.hpp @@ -0,0 +1,13 @@ +#pragma once + +#define writeln(s) std::cout << s << std::endl +#define writeln_ss(s) { std::stringstream ss; ss << s; writeln(ss.str()); std::stringstream s; } + +#define ToStr(s) std::string(s) +#define IntToStr(s) std::to_string(s) + +#define StrErrno() ToStr(std::strerror(errno)) +#define StrErrnoCustom(s) ToStr(std::strerror(s)) + +#define StrSignal(sig) IntToStr(sig) +#define StrSignalC(sig) strsignal(sig) diff --git a/include/utils/math.hpp b/include/utils/math.hpp index 30b92887..e6dfd5d6 100644 --- a/include/utils/math.hpp +++ b/include/utils/math.hpp @@ -1,5 +1,4 @@ -#ifndef _UTILS_MATH_HPP_ -#define _UTILS_MATH_HPP_ +#pragma once #include <string> #include <algorithm> @@ -14,5 +13,3 @@ namespace math return value; } } - -#endif diff --git a/include/utils/memory.hpp b/include/utils/memory.hpp index cc83c436..d9f223e5 100644 --- a/include/utils/memory.hpp +++ b/include/utils/memory.hpp @@ -1,5 +1,4 @@ -#ifndef _UTILS_MEMORY_HPP -#define _UTILS_MEMORY_HPP +#pragma once // Swap the two ints without the need of creating another tmp variable #define int_memswap(one, two) one += two; \ @@ -12,5 +11,3 @@ #define repeat_with(n, m) for (m = n; m--;) #define repeat_i i #define repeat_i_rev(n) (n - i - 1) - -#endif diff --git a/include/utils/proc.hpp b/include/utils/proc.hpp index bc37c253..c9ffd575 100644 --- a/include/utils/proc.hpp +++ b/include/utils/proc.hpp @@ -1,5 +1,4 @@ -#ifndef _UTILS_PROC_HPP_ -#define _UTILS_PROC_HPP_ +#pragma once #include <string> #include <errno.h> @@ -11,13 +10,6 @@ #define PIPE_READ 0 #define PIPE_WRITE 1 -#define STRERRNO std::string(std::strerror(errno)) -#define STRERRNO_VAL(s) std::string(std::strerror(s)) - -#define SIGCSTR(sig) strsignal(sig) -#define SIGNSTR(sig) std::to_string(sig) -#define SIGSTR(sig) std::string(SIGCSTR(sig)) - namespace proc { class ExecFailure : public Exception { @@ -25,14 +17,14 @@ namespace proc }; pid_t get_process_id(); - pid_t get_parent_process_id(); + // pid_t get_parent_process_id(); bool in_parent_process(pid_t pid); bool in_forked_process(pid_t pid); pid_t fork(); bool pipe(int fds[2]); - void exec(const std::string& cmd) throw(ExecFailure); + void exec(const std::string& cmd); bool kill(pid_t pid, int sig = SIGTERM); @@ -43,5 +35,3 @@ namespace proc pid_t wait_for_completion_nohang(int *status); pid_t wait_for_completion_nohang(); } - -#endif diff --git a/include/utils/streams.hpp b/include/utils/streams.hpp index 5cde2dc0..f9f3a8cd 100644 --- a/include/utils/streams.hpp +++ b/include/utils/streams.hpp @@ -1,5 +1,5 @@ -#ifndef _UTILS_STREAMS_HPP_ -#define _UTILS_STREAMS_HPP_ +#if 0 +#pragma once #include <iostream> #include <streambuf> @@ -43,5 +43,4 @@ namespace streams } }; } - #endif diff --git a/include/utils/string.hpp b/include/utils/string.hpp index b864c985..495329b7 100644 --- a/include/utils/string.hpp +++ b/include/utils/string.hpp @@ -1,17 +1,13 @@ -#ifndef _UTILS_STRING_HPP_ -#define _UTILS_STRING_HPP_ +#pragma once #include <string> #include <vector> -#define STR(s) std::string(s) -#define STRI(s) std::to_string(s) - namespace string { bool compare(const std::string& s1, const std::string& s2); - std::string upper(const std::string& s); + // std::string upper(const std::string& s); std::string lower(const std::string& s); std::string replace(const std::string& haystack, const std::string& needle, const std::string& replacement); @@ -19,7 +15,7 @@ namespace string std::string squeeze(const std::string& haystack, const char &needle); - std::string strip(const std::string& haystack, const char &needle); + // std::string strip(const std::string& haystack, const char &needle); std::string strip_trailing_newline(const std::string& s); std::string trim(const std::string& haystack, const char &needle); @@ -33,5 +29,3 @@ namespace string std::size_t find_nth(const std::string& haystack, std::size_t pos, const std::string& needle, std::size_t nth); } - -#endif diff --git a/include/utils/timer.hpp b/include/utils/timer.hpp index 0828c74d..35b2b9f4 100644 --- a/include/utils/timer.hpp +++ b/include/utils/timer.hpp @@ -1,10 +1,9 @@ -#ifndef _UTILS_TIMER_HPP_ -#define _UTILS_TIMER_HPP_ +#if 0 +#pragma once namespace timer { - unsigned int seconds_to_microseconds(float seconds); - void sleep(float seconds); + // unsigned int seconds_to_microseconds(float seconds); + // void sleep(float seconds); } - #endif diff --git a/include/utils/xlib.hpp b/include/utils/xlib.hpp index 660fee36..be69916b 100644 --- a/include/utils/xlib.hpp +++ b/include/utils/xlib.hpp @@ -1,5 +1,4 @@ -#ifndef _UTILS_XLIB_HPP_ -#define _UTILS_XLIB_HPP_ +#pragma once #include <sstream> #include <memory> @@ -26,9 +25,7 @@ namespace xlib } }; - std::unique_ptr<Monitor> get_monitor(const std::string& monitor_name); + // std::unique_ptr<Monitor> get_monitor(const std::string& monitor_name); std::vector<std::unique_ptr<Monitor>> get_sorted_monitorlist(); } - -#endif diff --git a/src/bar.cpp b/src/bar.cpp index d772e3c1..554429bc 100644 --- a/src/bar.cpp +++ b/src/bar.cpp @@ -44,14 +44,10 @@ const Options& bar_opts() { /** * Bar constructor */ -Bar::Bar() +Bar::Bar() : config_path(config::get_bar_path()), opts(std::make_unique<Options>()) { - this->config_path = config::get_bar_path(); - struct Options defaults; - this->opts = std::make_unique<Options>(); - try { this->opts->locale = config::get<std::string>(this->config_path, "locale"); std::locale::global(std::locale(this->opts->locale.c_str())); diff --git a/src/drawtypes/animation.cpp b/src/drawtypes/animation.cpp index 3bb27243..c640285c 100644 --- a/src/drawtypes/animation.cpp +++ b/src/drawtypes/animation.cpp @@ -31,9 +31,9 @@ namespace drawtypes } Animation::Animation(std::vector<std::unique_ptr<Icon>> &&frames, int framerate_ms) + : frames(std::move(frames)) { this->framerate_ms = framerate_ms; - this->frames = std::move(frames); this->num_frames = this->frames.size(); this->updated_at = std::chrono::system_clock::now(); } diff --git a/src/drawtypes/bar.cpp b/src/drawtypes/bar.cpp index 8c4d229e..2a267ad1 100644 --- a/src/drawtypes/bar.cpp +++ b/src/drawtypes/bar.cpp @@ -28,11 +28,10 @@ namespace drawtypes return bar; } - Bar::Bar(int width, const std::string& format, bool lazy_builder_closing) + Bar::Bar(int width, const std::string& fmt, bool lazy_builder_closing) + : builder(std::make_unique<Builder>(lazy_builder_closing)), format(fmt) { this->width = width; - this->format = format; - this->builder = std::make_unique<Builder>(lazy_builder_closing); } void Bar::set_fill(std::unique_ptr<Icon> &&fill) { @@ -63,7 +62,6 @@ namespace drawtypes int fill_width = (int) this->width * percentage / 100 + add; int empty_width = this->width - fill_width; int color_step = this->width / this->colors.size() + 0.5f; - int i = 0, j = 0; auto output = std::string(this->format); @@ -83,9 +81,10 @@ namespace drawtypes this->fill->fg = this->colors[color-1]; while (fill_width--) this->builder->node(this->fill); } else { + int i = 0; for (auto color : this->colors) { i += 1; - j = 0; + int j = 0; if ((i-1) * color_step >= fill_width) break; diff --git a/src/eventloop.cpp b/src/eventloop.cpp index 291a569e..7acf4a0a 100644 --- a/src/eventloop.cpp +++ b/src/eventloop.cpp @@ -8,25 +8,23 @@ #include "eventloop.hpp" #include "services/command.hpp" #include "utils/io.hpp" +#include "utils/macros.hpp" EventLoop::EventLoop(std::string input_pipe) + : bar(get_bar()), + registry(get_registry()), + logger(get_logger()), + state(STATE_STOPPED), + pipe_filename(input_pipe) { - this->bar = get_bar(); - this->registry = get_registry(); - this->logger = get_logger(); - - this->state = STATE_STOPPED; - - this->pipe_filename = input_pipe; - - if (!this->pipe_filename.empty()) { - if (!io::file::is_fifo(this->pipe_filename)) { - if (io::file::exists(this->pipe_filename)) - unlink(this->pipe_filename.c_str()); - if (mkfifo(this->pipe_filename.c_str(), 0600) == -1) - throw Exception(STRERRNO); - } - } + if (this->pipe_filename.empty()) + return; + if (io::file::is_fifo(this->pipe_filename)) + return; + if (io::file::exists(this->pipe_filename)) + unlink(this->pipe_filename.c_str()); + if (mkfifo(this->pipe_filename.c_str(), 0600) == -1) + throw EventLoopTerminate(StrErrno()); } bool EventLoop::running() @@ -83,7 +81,7 @@ void EventLoop::wait() sigaddset(&this->wait_mask, SIGTERM); if (pthread_sigmask(SIG_BLOCK, &this->wait_mask, nullptr) == -1) - logger->fatal(STRERRNO); + logger->fatal(StrErrno()); // Wait for termination signal sigwait(&this->wait_mask, &sig); @@ -145,8 +143,8 @@ void EventLoop::loop_read() { while (!this->pipe_filename.empty() && this->running()) { try { - if ((this->fd_stdin = open(this->pipe_filename.c_str(), O_RDONLY)) == -1) - throw Exception(STRERRNO); + if ((this->fd_stdin = ::open(this->pipe_filename.c_str(), O_RDONLY)) == -1) + throw EventLoopTerminate(StrErrno()); this->read_stdin(); } catch (Exception &e) { diff --git a/src/interfaces/alsa.cpp b/src/interfaces/alsa.cpp index 5f89deb9..551b0ed1 100644 --- a/src/interfaces/alsa.cpp +++ b/src/interfaces/alsa.cpp @@ -4,10 +4,11 @@ #include "utils/config.hpp" #include "utils/memory.hpp" #include "utils/proc.hpp" +#include "utils/macros.hpp" namespace alsa { - ControlInterface::ControlInterface(int numid) throw(ControlInterfaceError) + ControlInterface::ControlInterface(int numid) { int err; @@ -19,22 +20,22 @@ namespace alsa snd_ctl_elem_info_set_id(this->info, this->id); if ((err = snd_ctl_open(&this->ctl, ALSA_SOUNDCARD, SND_CTL_NONBLOCK | SND_CTL_READONLY)) < 0) - throw ControlInterfaceError("Could not open control \""+ STR(ALSA_SOUNDCARD) +"\": "+ STRSNDERR(err)); + throw ControlInterfaceError(err, "Could not open control \""+ ToStr(ALSA_SOUNDCARD) +"\": "+ STRSNDERR(err)); if ((err = snd_ctl_elem_info(this->ctl, this->info)) < 0) - throw ControlInterfaceError("Could not get control data: "+ STRSNDERR(err)); + throw ControlInterfaceError(err, "Could not get control data: "+ STRSNDERR(err)); snd_ctl_elem_info_get_id(this->info, this->id); if ((err = snd_hctl_open(&this->hctl, ALSA_SOUNDCARD, 0)) < 0) - throw ControlInterfaceError(STRSNDERR(err)); + throw ControlInterfaceError(err, STRSNDERR(err)); if ((err = snd_hctl_load(this->hctl)) < 0) - throw ControlInterfaceError(STRSNDERR(err)); + throw ControlInterfaceError(err, STRSNDERR(err)); if ((elem = snd_hctl_find_elem(this->hctl, this->id)) == nullptr) - throw ControlInterfaceError("Could not find control with id "+ STRI(snd_ctl_elem_id_get_numid(this->id))); + throw ControlInterfaceError(err, "Could not find control with id "+ IntToStr(snd_ctl_elem_id_get_numid(this->id))); if ((err = snd_ctl_subscribe_events(this->ctl, 1)) < 0) - throw ControlInterfaceError("Could not subscribe to events: "+ STRI(snd_ctl_elem_id_get_numid(this->id))); + throw ControlInterfaceError(err, "Could not subscribe to events: "+ IntToStr(snd_ctl_elem_id_get_numid(this->id))); log_trace("Successfully initialized control interface"); } @@ -45,20 +46,23 @@ namespace alsa snd_hctl_close(this->hctl); } - bool ControlInterface::wait(int timeout) throw(ControlInterfaceError) + bool ControlInterface::wait(int timeout) { std::lock_guard<std::mutex> lck(this->mtx); int err; if ((err = snd_ctl_wait(this->ctl, timeout)) < 0) - throw ControlInterfaceError("Failed to wait for events: "+ STRSNDERR(err)); + throw ControlInterfaceError(err, "Failed to wait for events: "+ STRSNDERR(err)); snd_ctl_event_t *event; snd_ctl_event_alloca(&event); - if ((err = snd_ctl_read(this->ctl, event)) < 0) + if ((err = snd_ctl_read(this->ctl, event)) < 0) { + log_trace(err); return false; + } + if (snd_ctl_event_get_type(event) != SND_CTL_EVENT_ELEM) return false; @@ -67,7 +71,7 @@ namespace alsa return mask & SND_CTL_EVENT_MASK_VALUE; } - bool ControlInterface::test_device_plugged() throw(ControlInterfaceError) + bool ControlInterface::test_device_plugged() { int err; @@ -75,13 +79,13 @@ namespace alsa return false; if ((err = snd_hctl_elem_read(this->elem, this->value)) < 0) - throw ControlInterfaceError("Could not read control value: "+ STRSNDERR(err)); + throw ControlInterfaceError(err, "Could not read control value: "+ STRSNDERR(err)); return snd_ctl_elem_value_get_boolean(this->value, 0); } - Mixer::Mixer(const std::string& mixer_control_name) throw(MixerError) + Mixer::Mixer(const std::string& mixer_control_name) { snd_mixer_selem_id_t *mixer_id; @@ -112,7 +116,7 @@ namespace alsa snd_mixer_close(this->hardware_mixer); } - bool Mixer::wait(int timeout) throw(MixerError) + bool Mixer::wait(int timeout) { std::lock_guard<std::mutex> lck(this->mtx); diff --git a/src/interfaces/mpd.cpp b/src/interfaces/mpd.cpp index e1530594..6da6b864 100644 --- a/src/interfaces/mpd.cpp +++ b/src/interfaces/mpd.cpp @@ -56,23 +56,23 @@ namespace mpd return this->connection.get() != nullptr; } - bool Connection::retry_connection(int interval) - { - if (this->connected()) - return true; - - while (true) { - try { - this->connect(); - return true; - } catch (Exception &e) { - get_logger()->debug(e.what()); - } - - std::this_thread::sleep_for( - std::chrono::duration<double>(interval)); - } - } + // bool Connection::retry_connection(int interval) + // { + // if (this->connected()) + // return true; + // + // while (true) { + // try { + // this->connect(); + // return true; + // } catch (Exception &e) { + // get_logger()->debug(e.what()); + // } + // + // std::this_thread::sleep_for( + // std::chrono::duration<double>(interval)); + // } + // } void Connection::idle() { @@ -159,16 +159,16 @@ namespace mpd } } - void Connection::toggle() - { - try { - this->check_prerequisites_commands_list(); - mpd_run_toggle_pause(this->connection.get()); - this->check_errors(); - } catch (Exception &e) { - log_error(e.what()); - } - } + // void Connection::toggle() + // { + // try { + // this->check_prerequisites_commands_list(); + // mpd_run_toggle_pause(this->connection.get()); + // this->check_errors(); + // } catch (Exception &e) { + // log_error(e.what()); + // } + // } void Connection::stop() { @@ -222,7 +222,7 @@ namespace mpd } } - void Connection::repeat(bool mode) + void Connection::set_repeat(bool mode) { try { this->check_prerequisites_commands_list(); @@ -233,7 +233,7 @@ namespace mpd } } - void Connection::random(bool mode) + void Connection::set_random(bool mode) { try { this->check_prerequisites_commands_list(); @@ -244,7 +244,7 @@ namespace mpd } } - void Connection::single(bool mode) + void Connection::set_single(bool mode) { try { this->check_prerequisites_commands_list(); @@ -315,13 +315,13 @@ namespace mpd this->updated_at = std::chrono::system_clock::now(); } - unsigned Status::get_total_time() { - return this->total_time; - } + // unsigned Status::get_total_time() { + // return this->total_time; + // } - unsigned Status::get_elapsed_time() { - return this->elapsed_time; - } + // unsigned Status::get_elapsed_time() { + // return this->elapsed_time; + // } unsigned Status::get_elapsed_percentage() { @@ -360,8 +360,9 @@ namespace mpd return std::make_unique<Song>(song); } - Song::Song(struct mpd_song *song) { - this->song = std::shared_ptr<struct mpd_song>(song, mpd_song_free); + Song::Song(struct mpd_song *song) + : song(std::shared_ptr<struct mpd_song>(song, mpd_song_free)) + { } std::string Song::get_artist() @@ -391,9 +392,9 @@ namespace mpd return std::string(tag); } - unsigned Song::get_duration() - { - assert(this->song); - return mpd_song_get_duration(this->song.get()); - } + // unsigned Song::get_duration() + // { + // assert(this->song); + // return mpd_song_get_duration(this->song.get()); + // } } diff --git a/src/interfaces/net.cpp b/src/interfaces/net.cpp index 15535df5..85602fb6 100644 --- a/src/interfaces/net.cpp +++ b/src/interfaces/net.cpp @@ -15,6 +15,7 @@ #include "services/logger.hpp" #include "interfaces/net.hpp" #include "utils/io.hpp" +#include "utils/macros.hpp" #include "utils/string.hpp" using namespace net; @@ -26,15 +27,14 @@ bool net::is_wireless_interface(const std::string& ifname) { // Network -Network::Network(const std::string& interface) throw(NetworkException) +Network::Network(const std::string& interface) + : interface(interface) { - this->interface = interface; - if (if_nametoindex(this->interface.c_str()) == 0) throw NetworkException("Invalid network interface \""+ this->interface +"\""); if ((this->fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) - throw NetworkException("Failed to open socket: "+ STRERRNO); + throw NetworkException("Failed to open socket: "+ StrErrno()); std::memset(&this->data, 0, sizeof(this->data)); std::strncpy(this->data.ifr_name, this->interface.data(), IFNAMSIZ-1); @@ -43,17 +43,18 @@ Network::Network(const std::string& interface) throw(NetworkException) Network::~Network() { if (close(this->fd) == -1) - log_error("Failed to close Network socket FD: "+ STRERRNO); + log_error("Failed to close Network socket FD: "+ StrErrno()); } -bool Network::test_interface() throw(NetworkException) +bool Network::test_interface() { if ((ioctl(this->fd, SIOCGIFFLAGS, &this->data)) == -1) - throw NetworkException(STRERRNO); + throw NetworkException(StrErrno()); return this->data.ifr_flags & IFF_UP; } -bool Network::test_connection() throw(NetworkException) { +bool Network::test_connection() +{ int status = EXIT_FAILURE; try { @@ -91,7 +92,7 @@ bool Network::connected() } } -std::string Network::get_ip() throw(NetworkException) +std::string Network::get_ip() { if (!this->test_interface()) throw NetworkException("Interface is not up"); @@ -99,7 +100,7 @@ std::string Network::get_ip() throw(NetworkException) this->data.ifr_addr.sa_family = AF_INET; if (ioctl(this->fd, SIOCGIFADDR, &this->data) == -1) - throw NetworkException(STRERRNO); + throw NetworkException(StrErrno()); return inet_ntoa(((struct sockaddr_in *) &this->data.ifr_addr)->sin_addr); } @@ -130,7 +131,7 @@ WirelessNetwork::WirelessNetwork(const std::string& interface) : Network(interfa std::strcpy((char *) &this->iw.ifr_ifrn.ifrn_name, this->interface.c_str()); } -std::string WirelessNetwork::get_essid() throw(WirelessNetworkException) +std::string WirelessNetwork::get_essid() { char essid[IW_ESSID_MAX_SIZE+1]; @@ -140,7 +141,7 @@ std::string WirelessNetwork::get_essid() throw(WirelessNetworkException) this->iw.u.essid.length = sizeof(essid); if (ioctl(this->fd, SIOCGIWESSID, &this->iw) == -1) - throw WirelessNetworkException(STRERRNO); + throw WirelessNetworkException(StrErrno()); return string::trim(essid, ' '); } @@ -151,13 +152,13 @@ float WirelessNetwork::get_signal_quality() return 2 * (dbm + 100); } -float WirelessNetwork::get_signal_dbm() throw(WirelessNetworkException) +float WirelessNetwork::get_signal_dbm() { this->iw.u.data.pointer = (iw_statistics *) std::malloc(sizeof(iw_statistics)); this->iw.u.data.length = sizeof(iw_statistics); if (ioctl(this->fd, SIOCGIWSTATS, &this->iw) == -1) - throw WirelessNetworkException(STRERRNO); + throw WirelessNetworkException(StrErrno()); auto signal = ((iw_statistics *) this->iw.u.data.pointer)->qual.level - 256; diff --git a/src/lemonbuddy.cpp b/src/lemonbuddy.cpp index 62b209c8..ee58496e 100644 --- a/src/lemonbuddy.cpp +++ b/src/lemonbuddy.cpp @@ -14,6 +14,7 @@ #include "utils/cli.hpp" #include "utils/config.hpp" #include "utils/io.hpp" +#include "utils/macros.hpp" #include "utils/proc.hpp" #include "utils/string.hpp" #include "utils/timer.hpp" @@ -25,8 +26,6 @@ * TODO: Simplify overall flow */ -#define writeln(s) std::cout << s << std::endl; - std::unique_ptr<EventLoop> eventloop; std::mutex pid_mtx; @@ -56,7 +55,7 @@ int main(int argc, char **argv) sigemptyset(&pipe_mask); sigaddset(&pipe_mask, SIGPIPE); if (pthread_sigmask(SIG_BLOCK, &pipe_mask, nullptr) == -1) - logger->fatal(STRERRNO); + logger->fatal(StrErrno()); try { auto usage = "Usage: "+ std::string(argv[0]) + " bar_name [OPTION...]"; @@ -169,7 +168,7 @@ int main(int argc, char **argv) + std::to_string(proc::get_process_id()); auto fptr = std::make_unique<io::file::FilePtr>(pipe_file, "a+"); if (!*fptr) - throw Exception(STRERRNO); + throw ApplicationError(StrErrno()); } } @@ -192,7 +191,7 @@ int main(int argc, char **argv) * Terminate forked sub processes */ if (!pids.empty()) { - logger->info("Terminating "+ STRI(pids.size()) +" spawned process"+ (pids.size() > 1 ? "es" : "")); + logger->info("Terminating "+ IntToStr(pids.size()) +" spawned process"+ (pids.size() > 1 ? "es" : "")); for (auto &&pid : pids) proc::kill(pid, SIGKILL); diff --git a/src/modules/backlight.cpp b/src/modules/backlight.cpp index 560ee744..3548e2ef 100644 --- a/src/modules/backlight.cpp +++ b/src/modules/backlight.cpp @@ -6,6 +6,10 @@ using namespace modules; BacklightModule::BacklightModule(const std::string& name_) : InotifyModule(name_) { + // Load configuration values + auto card = config::get<std::string>(name(), "card"); + + // Add formats and elements this->formatter->add(DEFAULT_FORMAT, TAG_LABEL, { TAG_LABEL, TAG_BAR, TAG_RAMP }); if (this->formatter->has(TAG_LABEL)) @@ -18,8 +22,7 @@ BacklightModule::BacklightModule(const std::string& name_) : InotifyModule(name_ if (this->label) this->label_tokenized = this->label->clone(); - auto card = config::get<std::string>(name(), "card"); - + // Build path to the file where the current/maximum brightness value is located this->path_val = string::replace(PATH_BACKLIGHT_VAL, "%card%", card); this->path_max = string::replace(PATH_BACKLIGHT_MAX, "%card%", card); @@ -28,7 +31,8 @@ BacklightModule::BacklightModule(const std::string& name_) : InotifyModule(name_ if (!io::file::exists(this->path_max)) throw ModuleError("[BacklightModule] The file \""+ this->path_max +"\" does not exist"); - this->watch(this->path_val); + // Add inotify watch + this->watch(string::replace(PATH_BACKLIGHT_VAL, "%card%", card)); } bool BacklightModule::on_event(InotifyEvent *event) @@ -42,13 +46,13 @@ bool BacklightModule::on_event(InotifyEvent *event) auto max = io::file::get_contents(this->path_max); this->max = std::stoull(max.c_str(), 0, 10); - this->percentage = (int) float(this->val) / float(this->max) * 100.f + 0.5f; + this->percentage = (int) float(this->val) / float(this->max) * 100.0f + 0.5f; if (!this->label) return true; this->label_tokenized->text = this->label->text; - this->label_tokenized->replace_token("%percentage%", std::to_string(this->percentage)+"%"); + this->label_tokenized->replace_token("%percentage%", std::to_string(this->percentage())+"%"); return true; } @@ -56,9 +60,9 @@ bool BacklightModule::on_event(InotifyEvent *event) bool BacklightModule::build(Builder *builder, const std::string& tag) { if (tag == TAG_BAR) - builder->node(this->bar, this->percentage); + builder->node(this->bar, this->percentage()); else if (tag == TAG_RAMP) - builder->node(this->ramp, this->percentage); + builder->node(this->ramp, this->percentage()); else if (tag == TAG_LABEL) builder->node(this->label_tokenized); else diff --git a/src/modules/battery.cpp b/src/modules/battery.cpp index 088faaf2..b0f7525b 100644 --- a/src/modules/battery.cpp +++ b/src/modules/battery.cpp @@ -7,6 +7,7 @@ #include "utils/config.hpp" #include "utils/io.hpp" #include "utils/math.hpp" +#include "utils/macros.hpp" #include "utils/string.hpp" using namespace modules; @@ -68,10 +69,10 @@ BatteryModule::BatteryModule(const std::string& name_) : InotifyModule(name_) void BatteryModule::start() { this->InotifyModule::start(); - this->threads.emplace_back(std::thread(&BatteryModule::subthread_runner, this)); + this->threads.emplace_back(std::thread(&BatteryModule::subthread_routine, this)); } -void BatteryModule::subthread_runner() +void BatteryModule::subthread_routine() { std::this_thread::yield(); @@ -149,13 +150,13 @@ bool BatteryModule::on_event(InotifyEvent *event) this->label_full_tokenized = this->label_full->clone(); this->label_charging_tokenized->text = this->label_charging->text; - this->label_charging_tokenized->replace_token("%percentage%", std::to_string(percentage) + "%"); + this->label_charging_tokenized->replace_token("%percentage%", IntToStr(percentage) + "%"); this->label_discharging_tokenized->text = this->label_discharging->text; - this->label_discharging_tokenized->replace_token("%percentage%", std::to_string(percentage) + "%"); + this->label_discharging_tokenized->replace_token("%percentage%", IntToStr(percentage) + "%"); this->label_full_tokenized->text = this->label_full->text; - this->label_full_tokenized->replace_token("%percentage%", std::to_string(percentage) + "%"); + this->label_full_tokenized->replace_token("%percentage%", IntToStr(percentage) + "%"); this->state = state; this->percentage = percentage; diff --git a/src/modules/bspwm.cpp b/src/modules/bspwm.cpp index 7a76a94e..48c850e9 100644 --- a/src/modules/bspwm.cpp +++ b/src/modules/bspwm.cpp @@ -17,10 +17,9 @@ using namespace Bspwm; #define DEFAULT_WS_ICON "workspace_icon:default" #define DEFAULT_WS_LABEL "%icon% %name%" -BspwmModule::BspwmModule(const std::string& name_, const std::string& monitor) : EventModule(name_) +BspwmModule::BspwmModule(const std::string& name_, const std::string& monitor) + : EventModule(name_), monitor(monitor) { - this->monitor = monitor; - this->formatter->add(DEFAULT_FORMAT, TAG_LABEL_STATE, { TAG_LABEL_STATE }, { TAG_LABEL_MODE }); if (this->formatter->has(TAG_LABEL_STATE)) { @@ -86,25 +85,29 @@ bool BspwmModule::update() if (data.empty()) return false; - auto prefix = std::string(BSPWM_STATUS_PREFIX); + const auto prefix = std::string(BSPWM_STATUS_PREFIX); - if (data.find(prefix) != 0) { + if (data.compare(0, prefix.length(), prefix) != 0) { log_error("Received unknown status -> "+ data); return false; } + const auto needle_active = "M"+ this->monitor +":"; + const auto needle_inactive = "m"+ this->monitor +":"; + // Cut out the relevant section for the current monitor - if ((n = data.find(prefix +"M"+ this->monitor +":")) != std::string::npos) { + if ((n = data.find(prefix + needle_active)) != std::string::npos) { if ((m = data.find(":m")) != std::string::npos) data = data.substr(n, m); - } else if ((n = data.find(prefix +"m"+ this->monitor +":")) != std::string::npos) { + } else if ((n = data.find(prefix + needle_inactive)) != std::string::npos) { if ((m = data.find(":M")) != std::string::npos) data = data.substr(n, m); - } else if ((n = data.find("M"+ this->monitor +":")) != std::string::npos) { + } else if ((n = data.find(needle_active)) != std::string::npos) { data.erase(0, n); - } else if ((n = data.find("m"+ this->monitor +":")) != std::string::npos) { + } else if ((n = data.find(needle_inactive)) != std::string::npos) { data.erase(0, n); } - if (data.find(prefix) == 0) data.erase(0, 1); + if (data.compare(0, prefix.length(), prefix) == 0) + data.erase(0, 1); log_trace(data); diff --git a/src/modules/cpu.cpp b/src/modules/cpu.cpp index 36e06c7b..e318d0ac 100644 --- a/src/modules/cpu.cpp +++ b/src/modules/cpu.cpp @@ -89,9 +89,10 @@ bool CpuModule::read_values() std::ifstream in(PATH_CPU_INFO); std::string str; - while (std::getline(in, str) && str.find("cpu") == 0) { + while (std::getline(in, str) && str.compare(0, 3, "cpu") == 0) { // skip the accumulated line - if (str.find("cpu ") == 0) continue; + if (str.compare(0, 4, "cpu ") == 0) + continue; auto values = string::split(str, ' '); auto cpu = std::make_unique<CpuTime>(); diff --git a/src/modules/date.cpp b/src/modules/date.cpp index 1dca332b..24e32db4 100644 --- a/src/modules/date.cpp +++ b/src/modules/date.cpp @@ -6,9 +6,9 @@ using namespace modules; -DateModule::DateModule(const std::string& name_) : TimerModule(name_, 1s) +DateModule::DateModule(const std::string& name_) + : TimerModule(name_, 1s), builder(std::make_unique<Builder>()) { - this->builder = std::make_unique<Builder>(); this->interval = std::chrono::duration<double>( config::get<float>(name(), "interval", 1)); diff --git a/src/modules/i3.cpp b/src/modules/i3.cpp index 39df6c77..aeb83b5b 100644 --- a/src/modules/i3.cpp +++ b/src/modules/i3.cpp @@ -11,6 +11,7 @@ #include "modules/i3.hpp" #include "utils/config.hpp" #include "utils/io.hpp" +#include "utils/macros.hpp" #include "utils/string.hpp" using namespace modules; @@ -128,7 +129,7 @@ bool i3Module::update() // if (!monitor_focused) // flag = i3::WORKSPACE_DIMMED; - auto workspace_name = STR(ws->name); + auto workspace_name = ToStr(ws->name); if (this->workspace_name_strip_nchars > 0 && workspace_name.length() > this->workspace_name_strip_nchars) workspace_name.erase(0, this->workspace_name_strip_nchars); diff --git a/src/modules/memory.cpp b/src/modules/memory.cpp index d8139de9..c6069301 100644 --- a/src/modules/memory.cpp +++ b/src/modules/memory.cpp @@ -1,6 +1,7 @@ #include "config.hpp" #include "modules/memory.hpp" #include "utils/config.hpp" +#include "utils/macros.hpp" using namespace modules; @@ -48,7 +49,7 @@ bool MemoryModule::update() kbytes_total = 0; // kbytes_free = 0; kbytes_available = 0; - log_error("Failed to read memory values: "+ STR(e.what())); + log_error("Failed to read memory values: "+ ToStr(e.what())); } if (kbytes_total > 0) diff --git a/src/modules/menu.cpp b/src/modules/menu.cpp index c9056e29..0063340c 100644 --- a/src/modules/menu.cpp +++ b/src/modules/menu.cpp @@ -52,7 +52,7 @@ MenuModule::MenuModule(const std::string& name_) : StaticModule(name_) register_command_handler(name()); } -std::string MenuModule::get_output() throw(UndefinedFormat) +std::string MenuModule::get_output() { this->builder->node(this->Module::get_output()); @@ -98,7 +98,7 @@ bool MenuModule::handle_command(const std::string& cmd) { std::lock_guard<std::mutex> lck(this->cmd_mtx); - if (cmd.find(EVENT_MENU_OPEN) == 0) { + if (cmd.compare(0, std::strlen(EVENT_MENU_OPEN), EVENT_MENU_OPEN) == 0) { auto level = cmd.substr(std::strlen(EVENT_MENU_OPEN)); if (level.empty()) diff --git a/src/modules/mpd.cpp b/src/modules/mpd.cpp index 774834b7..369f1065 100644 --- a/src/modules/mpd.cpp +++ b/src/modules/mpd.cpp @@ -10,10 +10,9 @@ using namespace modules; using namespace mpd; -MpdModule::MpdModule(const std::string& name_) : EventModule(name_) +MpdModule::MpdModule(const std::string& name_) + : EventModule(name_), icons(std::make_unique<drawtypes::IconMap>()) { - this->icons = std::make_unique<drawtypes::IconMap>(); - this->formatter->add(FORMAT_ONLINE, TAG_LABEL_SONG, { TAG_BAR_PROGRESS, TAG_TOGGLE, TAG_LABEL_SONG, TAG_LABEL_TIME, TAG_ICON_RANDOM, TAG_ICON_REPEAT, TAG_ICON_REPEAT_ONE, TAG_ICON_PREV, @@ -69,7 +68,7 @@ void MpdModule::start() this->mpd = mpd::Connection::get(); this->synced_at = std::chrono::system_clock::now(); - this->sync_interval = config::get<float>(name(), "interval", 0.5) * 1000; + this->sync_interval = config::get<float>(name(), "interval", this->sync_interval) * 1000; try { mpd->connect(); @@ -273,22 +272,20 @@ bool MpdModule::handle_command(const std::string& cmd) mpd->next(); else if (cmd == EVENT_REPEAT_ONE) if (this->status) - mpd->single(!this->status->single); + mpd->set_single(!this->status->single); else - mpd->single(true); + mpd->set_single(true); else if (cmd == EVENT_REPEAT) if (this->status) -#undef repeat - mpd->repeat(!this->status->repeat); + mpd->set_repeat(!this->status->repeat); else - mpd->repeat(true); -#define repeat _repeat(n) + mpd->set_repeat(true); else if (cmd == EVENT_RANDOM) if (this->status) - mpd->random(!this->status->random); + mpd->set_random(!this->status->random); else - mpd->random(true); - else if (cmd.find(EVENT_SEEK) == 0) { + mpd->set_random(true); + else if (cmd.compare(0, std::strlen(EVENT_SEEK), EVENT_SEEK) == 0) { auto s = cmd.substr(std::strlen(EVENT_SEEK)); int perc = 0; if (s.empty()) diff --git a/src/modules/network.cpp b/src/modules/network.cpp index 06b30782..ab173353 100644 --- a/src/modules/network.cpp +++ b/src/modules/network.cpp @@ -12,7 +12,8 @@ using namespace modules; // TODO: Add up-/download speed (check how ifconfig read the bytes) -NetworkModule::NetworkModule(const std::string& name_) : TimerModule(name_, 1s) +NetworkModule::NetworkModule(const std::string& name_) + : TimerModule(name_, 1s), connected(false), conseq_packetloss(false) { static const auto DEFAULT_FORMAT_CONNECTED = TAG_LABEL_CONNECTED; static const auto DEFAULT_FORMAT_DISCONNECTED = TAG_LABEL_DISCONNECTED; @@ -22,9 +23,6 @@ NetworkModule::NetworkModule(const std::string& name_) : TimerModule(name_, 1s) static const auto DEFAULT_LABEL_DISCONNECTED = ""; static const auto DEFAULT_LABEL_PACKETLOSS = ""; - this->connected = false; - this->conseq_packetloss = false; - // Load configuration values this->interface = config::get<std::string>(name(), "interface"); this->interval = std::chrono::duration<double>(config::get<float>(name(), "interval", 1)); @@ -147,7 +145,6 @@ bool NetworkModule::update() if (this->wired_network) { label->replace_token("%linkspeed%", linkspeed); } else if (this->wireless_network) { - // label->replace_token("%essid%", essid); label->replace_token("%essid%", !essid.empty() ? essid : "No network"); label->replace_token("%signal%", std::to_string(signal_quality)+"%"); } diff --git a/src/modules/script.cpp b/src/modules/script.cpp index c695c7d0..78e9be39 100644 --- a/src/modules/script.cpp +++ b/src/modules/script.cpp @@ -6,11 +6,9 @@ using namespace modules; -ScriptModule::ScriptModule(const std::string& name_) : TimerModule(name_, 1s) +ScriptModule::ScriptModule(const std::string& name_) + : TimerModule(name_, 1s), builder(std::make_unique<Builder>(true)), counter(0) { - this->counter = 0; - this->builder = std::make_unique<Builder>(true); - this->exec = config::get<std::string>(name(), "exec"); this->interval = std::chrono::duration<double>( diff --git a/src/modules/text.cpp b/src/modules/text.cpp index f4abb5bd..49536acb 100644 --- a/src/modules/text.cpp +++ b/src/modules/text.cpp @@ -5,7 +5,7 @@ using namespace modules; -TextModule::TextModule(const std::string& name_) throw(UndefinedFormat) : StaticModule(name_) { +TextModule::TextModule(const std::string& name_) : StaticModule(name_) { this->formatter->add(FORMAT, "", {}); if (this->formatter->get(FORMAT)->value.empty()) throw UndefinedFormat(FORMAT); diff --git a/src/modules/volume.cpp b/src/modules/volume.cpp index b5922676..4d7761bb 100644 --- a/src/modules/volume.cpp +++ b/src/modules/volume.cpp @@ -1,15 +1,12 @@ -#include <thread> - #include "lemonbuddy.hpp" #include "bar.hpp" -#include "services/builder.hpp" -#include "utils/config.hpp" #include "utils/math.hpp" +#include "utils/macros.hpp" #include "modules/volume.hpp" using namespace modules; -VolumeModule::VolumeModule(const std::string& name_) throw(ModuleError) : EventModule(name_) +VolumeModule::VolumeModule(const std::string& name_) : EventModule(name_) { auto speaker_mixer = config::get<std::string>(name(), "speaker_mixer", ""); auto headphone_mixer = config::get<std::string>(name(), "headphone_mixer", ""); @@ -33,7 +30,7 @@ VolumeModule::VolumeModule(const std::string& name_) throw(ModuleError) : EventM try { mixer = std::make_unique<alsa::Mixer>(mixer_name); } catch (alsa::MixerError &e) { - log_error("Failed to open \""+ mixer_name +"\" mixer => "+ STR(e.what())); + log_error("Failed to open \""+ mixer_name +"\" mixer => "+ ToStr(e.what())); mixer.reset(); } @@ -56,7 +53,7 @@ VolumeModule::VolumeModule(const std::string& name_) throw(ModuleError) : EventM try { this->headphone_ctrl = std::make_unique<alsa::ControlInterface>(this->headphone_ctrl_numid); } catch (alsa::ControlInterfaceError &e) { - log_error("Failed to open headphone control interface => "+ STR(e.what())); + log_error("Failed to open headphone control interface => "+ ToStr(e.what())); this->headphone_ctrl.reset(); } } diff --git a/src/registry.cpp b/src/registry.cpp index bec969f5..a35b5e33 100644 --- a/src/registry.cpp +++ b/src/registry.cpp @@ -30,7 +30,7 @@ bool Registry::ready() void Registry::insert(std::unique_ptr<modules::ModuleInterface> &&module) { log_trace("Inserting module: "+ module->name()); - this->modules.emplace_back(std::make_unique<ModuleEntry>(std::move(module))); + this->modules.emplace_back(std::make_unique<RegistryModuleEntry>(std::move(module))); } void Registry::load() @@ -149,7 +149,7 @@ std::string Registry::get(const std::string& module_name) return (*this->find(module_name)->module)(); } -std::unique_ptr<ModuleEntry>& Registry::find(const std::string& module_name) throw(ModuleNotFound) +std::unique_ptr<RegistryModuleEntry>& Registry::find(const std::string& module_name) { for (auto &&entry : this->modules) if (entry->module->name() == module_name) diff --git a/src/services/builder.cpp b/src/services/builder.cpp index 36c42415..d91a51ae 100644 --- a/src/services/builder.cpp +++ b/src/services/builder.cpp @@ -287,9 +287,9 @@ void Builder::remove_trailing_space(int width) this->output = this->output.substr(0, this->output.length()-spacing); } -void Builder::invert() { - this->tag_open('R', ""); -} +// void Builder::invert() { +// this->tag_open('R', ""); +// } // Fonts diff --git a/src/services/command.cpp b/src/services/command.cpp index a018804d..c3d93fa8 100644 --- a/src/services/command.cpp +++ b/src/services/command.cpp @@ -8,8 +8,9 @@ #include "lemonbuddy.hpp" #include "services/command.hpp" #include "services/logger.hpp" -#include "utils/string.hpp" #include "utils/io.hpp" +#include "utils/macros.hpp" +#include "utils/string.hpp" /** * auto cmd = std::make_unique<Command>("cat /etc/rc.local"); @@ -25,10 +26,9 @@ * std::cout << cmd->readline(); //---> 1 * std::cout << cmd->readline() << cmd->readline(); //---> 23 */ -Command::Command(const std::string& cmd, int stdout[2], int stdin[2]) throw(CommandException) +Command::Command(const std::string& cmd, int stdout[2], int stdin[2]) + : cmd(cmd) { - this->cmd = cmd; - if (stdin != nullptr) { this->stdin[PIPE_READ] = stdin[PIPE_READ]; this->stdin[PIPE_WRITE] = stdin[PIPE_WRITE]; @@ -40,29 +40,29 @@ Command::Command(const std::string& cmd, int stdout[2], int stdin[2]) throw(Comm this->stdout[PIPE_WRITE] = stdout[PIPE_WRITE]; } else if (false == proc::pipe(this->stdout)) { if ((this->stdin[PIPE_READ] = close(this->stdin[PIPE_READ])) == -1) - throw CommandException("Failed to close fd: "+ STRERRNO); + throw CommandException("Failed to close fd: "+ StrErrno()); if ((this->stdin[PIPE_WRITE] = close(this->stdin[PIPE_WRITE])) == -1) - throw CommandException("Failed to close fd: "+ STRERRNO); + throw CommandException("Failed to close fd: "+ StrErrno()); throw CommandException("Failed to allocate pipe"); } } -Command::~Command() throw(CommandException) +Command::~Command() { if (this->stdin[PIPE_READ] > 0 && (close(this->stdin[PIPE_READ]) == -1)) - throw CommandException("Failed to close fd: "+ STRERRNO); + log_error("Failed to close fd: "+ StrErrno()); if (this->stdin[PIPE_WRITE] > 0 && (close(this->stdin[PIPE_WRITE]) == -1)) - throw CommandException("Failed to close fd: "+ STRERRNO); + log_error("Failed to close fd: "+ StrErrno()); if (this->stdout[PIPE_READ] > 0 && (close(this->stdout[PIPE_READ]) == -1)) - throw CommandException("Failed to close fd: "+ STRERRNO); + log_error("Failed to close fd: "+ StrErrno()); if (this->stdout[PIPE_WRITE] > 0 && (close(this->stdout[PIPE_WRITE]) == -1)) - throw CommandException("Failed to close fd: "+ STRERRNO); + log_error("Failed to close fd: "+ StrErrno()); } -int Command::exec(bool wait_for_completion) throw(CommandException) +int Command::exec(bool wait_for_completion) { if ((this->fork_pid = proc::fork()) == -1) - throw CommandException("Failed to fork process: "+ STRERRNO); + throw CommandException("Failed to fork process: "+ StrErrno()); if (proc::in_forked_process(this->fork_pid)) { if (dup2(this->stdin[PIPE_READ], STDIN_FILENO) == -1) @@ -74,13 +74,13 @@ int Command::exec(bool wait_for_completion) throw(CommandException) // Close file descriptors that won't be used by forked process if ((this->stdin[PIPE_READ] = close(this->stdin[PIPE_READ])) == -1) - throw CommandException("Failed to close fd: "+ STRERRNO); + throw CommandException("Failed to close fd: "+ StrErrno()); if ((this->stdin[PIPE_WRITE] = close(this->stdin[PIPE_WRITE])) == -1) - throw CommandException("Failed to close fd: "+ STRERRNO); + throw CommandException("Failed to close fd: "+ StrErrno()); if ((this->stdout[PIPE_READ] = close(this->stdout[PIPE_READ])) == -1) - throw CommandException("Failed to close fd: "+ STRERRNO); + throw CommandException("Failed to close fd: "+ StrErrno()); if ((this->stdout[PIPE_WRITE] = close(this->stdout[PIPE_WRITE])) == -1) - throw CommandException("Failed to close fd: "+ STRERRNO); + throw CommandException("Failed to close fd: "+ StrErrno()); // Replace the forked process with the given command proc::exec(cmd); @@ -90,9 +90,9 @@ int Command::exec(bool wait_for_completion) throw(CommandException) // Close file descriptors that won't be used by parent process if ((this->stdin[PIPE_READ] = close(this->stdin[PIPE_READ])) == -1) - throw CommandException("Failed to close fd: "+ STRERRNO); + throw CommandException("Failed to close fd: "+ StrErrno()); if ((this->stdout[PIPE_WRITE] = close(this->stdout[PIPE_WRITE])) == -1) - throw CommandException("Failed to close fd: "+ STRERRNO); + throw CommandException("Failed to close fd: "+ StrErrno()); if (wait_for_completion) return this->wait(); @@ -101,7 +101,7 @@ int Command::exec(bool wait_for_completion) throw(CommandException) return EXIT_SUCCESS; } -int Command::wait() throw(CommandException) +int Command::wait() { // Wait for the child processs to finish do { @@ -110,19 +110,19 @@ int Command::wait() throw(CommandException) if ((pid = proc::wait_for_completion(this->fork_pid, &this->fork_status, WCONTINUED | WUNTRACED)) == -1) { unregister_pid(this->fork_pid); - throw CommandException("Process did not finish successfully ("+ STRI(this->fork_status) +")"); + throw CommandException("Process did not finish successfully ("+ IntToStr(this->fork_status) +")"); } - if WIFEXITED(this->fork_status) + if (WIFEXITED(this->fork_status)) sprintf(msg, "exited with status %d", WEXITSTATUS(this->fork_status)); - else if WIFSIGNALED(this->fork_status) - sprintf(msg, "got killed by signal %d (%s)", WTERMSIG(this->fork_status), SIGCSTR(WTERMSIG(this->fork_status))); - else if WIFSTOPPED(this->fork_status) - sprintf(msg, "stopped by signal %d (%s)", WSTOPSIG(this->fork_status), SIGCSTR(WSTOPSIG(this->fork_status))); - else if WIFCONTINUED(this->fork_status) + else if (WIFSIGNALED(this->fork_status)) + sprintf(msg, "got killed by signal %d (%s)", WTERMSIG(this->fork_status), StrSignalC(WTERMSIG(this->fork_status))); + else if (WIFSTOPPED(this->fork_status)) + sprintf(msg, "stopped by signal %d (%s)", WSTOPSIG(this->fork_status), StrSignalC(WSTOPSIG(this->fork_status))); + else if (WIFCONTINUED(this->fork_status)) sprintf(msg, "continued"); - get_logger()->debug("Command "+ STR(msg)); + get_logger()->debug("Command "+ ToStr(msg)); } while (!WIFEXITED(this->fork_status) && !WIFSIGNALED(this->fork_status)); unregister_pid(this->fork_pid); @@ -142,14 +142,14 @@ int Command::get_stdout(int c) { return this->stdout[c]; } -int Command::get_stdin(int c) { - return this->stdin[c]; -} +// int Command::get_stdin(int c) { +// return this->stdin[c]; +// } -pid_t Command::get_pid() { - return this->fork_pid; -} +// pid_t Command::get_pid() { +// return this->fork_pid; +// } -int Command::get_exit_status() { - return this->fork_status; -} +// int Command::get_exit_status() { +// return this->fork_status; +// } diff --git a/src/services/inotify.cpp b/src/services/inotify.cpp index 6a20aa08..92aadf6b 100644 --- a/src/services/inotify.cpp +++ b/src/services/inotify.cpp @@ -5,16 +5,17 @@ #include "services/inotify.hpp" #include "services/logger.hpp" #include "utils/io.hpp" +#include "utils/macros.hpp" #include "utils/proc.hpp" -InotifyWatch::InotifyWatch(const std::string& path, int mask) throw (InotifyException) +InotifyWatch::InotifyWatch(const std::string& path, int mask) { log_trace("Installing watch at: "+ path); if ((this->fd = inotify_init()) < 0) - throw InotifyException(STRERRNO); + throw InotifyException(StrErrno()); if ((this->wd = inotify_add_watch(this->fd, path.c_str(), mask)) < 0) - throw InotifyException(STRERRNO); + throw InotifyException(StrErrno()); this->path = path; this->mask = mask; @@ -25,10 +26,10 @@ InotifyWatch::~InotifyWatch() log_trace("Uninstalling watch at: "+ this->path); if ((this->fd > 0 || this->wd > 0) && inotify_rm_watch(this->fd, this->wd) == -1) - log_error("Failed to remove inotify watch: "+ STRERRNO); + log_error("Failed to remove inotify watch: "+ StrErrno()); if (this->fd > 0 && close(this->fd) == -1) - log_error("Failed to close inotify watch fd: "+ STRERRNO); + log_error("Failed to close inotify watch fd: "+ StrErrno()); } bool InotifyWatch::has_event(int timeout_ms) { diff --git a/src/services/logger.cpp b/src/services/logger.cpp index 93e9725c..27605507 100644 --- a/src/services/logger.cpp +++ b/src/services/logger.cpp @@ -21,10 +21,10 @@ Logger::Logger() } } -void Logger::set_level(int mask) -{ - this->level = mask; -} +// void Logger::set_level(int mask) +// { +// this->level = mask; +// } void Logger::add_level(int mask) { diff --git a/src/utils/cli.cpp b/src/utils/cli.cpp index 7420b3ff..324debf2 100644 --- a/src/utils/cli.cpp +++ b/src/utils/cli.cpp @@ -88,9 +88,10 @@ namespace cli void usage(const std::string& usage, bool exit_success) { - int longest_n = 0, n; + int longest_n = 0; for (auto &o : options) { + int n; if ((n = o.flag_long.length() + o.placeholder.length() + 1) > longest_n) longest_n = n; } diff --git a/src/utils/config.cpp b/src/utils/config.cpp index 832c9d51..672cd43f 100644 --- a/src/utils/config.cpp +++ b/src/utils/config.cpp @@ -1,3 +1,4 @@ +#include "services/logger.hpp" #include "utils/config.hpp" #include "utils/io.hpp" @@ -17,7 +18,7 @@ namespace config return bar_path; } - void load(const std::string& path) throw(UnexistingFileError, ParseError) + void load(const std::string& path) { if (!io::file::exists(path)) { throw UnexistingFileError("Could not find configuration file \""+ path + "\""); @@ -38,14 +39,14 @@ namespace config load(std::string(dir != nullptr ? dir : "") +"/"+ path); } - void reload() throw(ParseError) - { - try { - boost::property_tree::read_ini(file_path, pt); - } catch (std::exception &e) { - throw ParseError(e.what()); - } - } + // void reload() + // { + // try { + // boost::property_tree::read_ini(file_path, pt); + // } catch (std::exception &e) { + // throw ParseError(e.what()); + // } + // } boost::property_tree::ptree get_tree() { return pt; diff --git a/src/utils/io.cpp b/src/utils/io.cpp index 0c01228a..2757adcd 100644 --- a/src/utils/io.cpp +++ b/src/utils/io.cpp @@ -12,6 +12,7 @@ #include "utils/io.hpp" #include "utils/proc.hpp" #include "utils/string.hpp" +#include "utils/macros.hpp" namespace io { @@ -23,7 +24,7 @@ namespace io struct sockaddr_un sock_addr; if ((fd = ::socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { - log_error("[io::socket::open] Error opening socket: "+ STRERRNO); + log_error("[io::socket::open] Error opening socket: "+ StrErrno()); return -1; } @@ -31,7 +32,7 @@ namespace io std::snprintf(sock_addr.sun_path, sizeof(sock_addr.sun_path), "%s", path.c_str()); if (connect(fd, (struct sockaddr *) &sock_addr, sizeof(sock_addr)) == -1) { - log_error("[io::socket::open] Error connecting to socket: "+ STRERRNO); + log_error("[io::socket::open] Error connecting to socket: "+ StrErrno()); return -1; } @@ -42,7 +43,7 @@ namespace io { int bytes = ::send(fd, data.c_str(), data.size()+1, flags); if (bytes == -1) - log_error("[io::socket::send] Error sending data: "+ STRERRNO); + log_error("[io::socket::send] Error sending data: "+ StrErrno()); return bytes; } @@ -52,7 +53,7 @@ namespace io if (bytes > 0) buffer[bytes] = 0; else if (bytes == -1) - log_error("[io::socket::recv] Error receiving data: "+ STRERRNO); + log_error("[io::socket::recv] Error receiving data: "+ StrErrno()); return bytes; } } @@ -93,7 +94,6 @@ namespace io std::size_t write(io::file::FilePtr *fptr, const std::string& data) { auto buf = data.c_str(); return fwrite(buf, sizeof(char), sizeof(buf), (*fptr)()); - return 0; } std::size_t write(const std::string& fpath, const std::string& data) { @@ -111,7 +111,7 @@ namespace io status_loc = 0; if ((bytes_read_loc = ::read(read_fd, &buffer, bytes_to_read)) > 0) { - buffer[bytes_read_loc] = 0; + // buffer[bytes_read_loc] = 0; } else if (bytes_read_loc == 0) { get_logger()->debug("Reached EOF"); status_loc = -1; @@ -184,9 +184,9 @@ namespace io return poll(fd, POLLIN, timeout_ms); } - bool poll_write(int fd, int timeout_ms) { - return poll(fd, POLLOUT, timeout_ms); - } + // bool poll_write(int fd, int timeout_ms) { + // return poll(fd, POLLOUT, timeout_ms); + // } bool poll(int fd, short int events, int timeout_ms) { @@ -202,19 +202,19 @@ namespace io return fds[0].revents & events; } - int get_flags(int fd) - { - int flags; - if ((flags = fcntl(fd, F_GETFL, 0)) == -1) - return 0; - return flags; - } + // int get_flags(int fd) + // { + // int flags; + // if ((flags = fcntl(fd, F_GETFL, 0)) == -1) + // return 0; + // return flags; + // } - int set_blocking(int fd) { - return fcntl(fd, F_SETFL, io::get_flags(fd) & ~O_NONBLOCK); - } + // int set_blocking(int fd) { + // return fcntl(fd, F_SETFL, io::get_flags(fd) & ~O_NONBLOCK); + // } - int set_non_blocking(int fd) { - return fcntl(fd, F_SETFL, io::get_flags(fd) | O_NONBLOCK); - } + // int set_non_blocking(int fd) { + // return fcntl(fd, F_SETFL, io::get_flags(fd) | O_NONBLOCK); + // } } diff --git a/src/utils/proc.cpp b/src/utils/proc.cpp index 23d45da0..f64c22fa 100644 --- a/src/utils/proc.cpp +++ b/src/utils/proc.cpp @@ -3,6 +3,7 @@ #include <sys/wait.h> #include "services/logger.hpp" +#include "utils/macros.hpp" #include "utils/proc.hpp" #include "utils/string.hpp" @@ -12,9 +13,9 @@ namespace proc return getpid(); } - pid_t get_parent_process_id() { - return getppid(); - } + // pid_t get_parent_process_id() { + // return getppid(); + // } bool in_parent_process(pid_t pid) { return pid != -1 && pid != 0; @@ -29,7 +30,7 @@ namespace proc pid_t pid = ::fork(); if (pid < 0) { - log_error("Failed to fork process: "+ STRERRNO +" ("+ std::to_string(errno) +")"); + log_error("Failed to fork process: "+ StrErrno() +" ("+ std::to_string(errno) +")"); return -1; } @@ -50,7 +51,7 @@ namespace proc return true; } - void exec(const std::string& cmd) throw(ExecFailure) + void exec(const std::string& cmd) { // log_trace(string::replace_all(cmd, "\n", " ")); @@ -71,7 +72,7 @@ namespace proc ::execvp(c_args[0], c_args.data()); - throw ExecFailure("Failed to execute command:\n-> "+ STRERRNO+ " ("+ std::to_string(errno) + ")"); + throw ExecFailure("Failed to execute command:\n-> "+ StrErrno()+ " ("+ std::to_string(errno) + ")"); } bool kill(pid_t pid, int sig) { diff --git a/src/utils/string.cpp b/src/utils/string.cpp index bfc3fd75..3f0e35bf 100644 --- a/src/utils/string.cpp +++ b/src/utils/string.cpp @@ -8,13 +8,13 @@ namespace string return lower(s1) == lower(s2); } - std::string upper(const std::string& s) - { - std::string str(s); - for (auto &c : str) - c = std::toupper(c); - return str; - } + // std::string upper(const std::string& s) + // { + // std::string str(s); + // for (auto &c : str) + // c = std::toupper(c); + // return str; + // } std::string lower(const std::string& s) { @@ -41,14 +41,14 @@ namespace string return replace_all(haystack, {needle, needle}, {needle}); } - std::string strip(const std::string& haystack, const char &needle) - { - std::string str(haystack); - std::string::size_type pos; - while ((pos = str.find(needle)) != std::string::npos) - str.erase(pos, 1); - return str; - } + // std::string strip(const std::string& haystack, const char &needle) + // { + // std::string str(haystack); + // std::string::size_type pos; + // while ((pos = str.find(needle)) != std::string::npos) + // str.erase(pos, 1); + // return str; + // } std::string strip_trailing_newline(const std::string& haystack) { diff --git a/src/utils/timer.cpp b/src/utils/timer.cpp index 1d312c13..f60cd981 100644 --- a/src/utils/timer.cpp +++ b/src/utils/timer.cpp @@ -1,3 +1,4 @@ +#if 0 #include <unistd.h> #include "utils/timer.hpp" @@ -12,3 +13,4 @@ namespace timer usleep(seconds_to_microseconds(seconds)); } } +#endif diff --git a/src/utils/xlib.cpp b/src/utils/xlib.cpp index 040eef7d..eccbda92 100644 --- a/src/utils/xlib.cpp +++ b/src/utils/xlib.cpp @@ -1,8 +1,7 @@ -#include <string> #include <algorithm> -#include <cstring> -#include <X11/Xos.h> -#include <X11/Xutil.h> +// #include <cstring> +// #include <X11/Xos.h> +// #include <X11/Xutil.h> #include <X11/extensions/Xrandr.h> #include "utils/memory.hpp" @@ -63,37 +62,37 @@ namespace xlib return monitors; } - std::unique_ptr<Monitor> get_monitor(const std::string& n_monitorsame) - { - auto monitor = std::make_unique<Monitor>(); - int n_monitors; - - Display *display = XOpenDisplay(nullptr); - int screen = XDefaultScreen(display); - Window root = XRootWindow(display, screen); - XRRMonitorInfo *info = XRRGetMonitors(display, root, 1, &n_monitors); - - repeat(n_monitors) - { - char *name = XGetAtomName(display, info[repeat_i_rev(n_monitors)].name); - - if (std::strcmp(name, n_monitorsame.c_str()) != 0) { - continue; - } - - monitor->name = std::string(name); - monitor->width = info[repeat_i_rev(n_monitors)].width; - monitor->height = info[repeat_i_rev(n_monitors)].height; - monitor->x = info[repeat_i_rev(n_monitors)].x; - monitor->y = info[repeat_i_rev(n_monitors)].y; - - std::free(name); - } - - std::free(info); - - XCloseDisplay(display); - - return monitor; - } + // std::unique_ptr<Monitor> get_monitor(const std::string& n_monitorsame) + // { + // auto monitor = std::make_unique<Monitor>(); + // int n_monitors; + // + // Display *display = XOpenDisplay(nullptr); + // int screen = XDefaultScreen(display); + // Window root = XRootWindow(display, screen); + // XRRMonitorInfo *info = XRRGetMonitors(display, root, 1, &n_monitors); + // + // repeat(n_monitors) + // { + // char *name = XGetAtomName(display, info[repeat_i_rev(n_monitors)].name); + // + // if (std::strcmp(name, n_monitorsame.c_str()) != 0) { + // continue; + // } + // + // monitor->name = std::string(name); + // monitor->width = info[repeat_i_rev(n_monitors)].width; + // monitor->height = info[repeat_i_rev(n_monitors)].height; + // monitor->x = info[repeat_i_rev(n_monitors)].x; + // monitor->y = info[repeat_i_rev(n_monitors)].y; + // + // std::free(name); + // } + // + // std::free(info); + // + // XCloseDisplay(display); + // + // return monitor; + // } }