From 6e4160dc532069e3fe5136f8424d036ad0abbb86 Mon Sep 17 00:00:00 2001 From: ico277 Date: Tue, 22 Oct 2024 03:49:52 +0200 Subject: [PATCH 1/4] add an option to seach by hwmon name for the temperature module --- src/modules/temperature.cpp | 43 +++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/src/modules/temperature.cpp b/src/modules/temperature.cpp index 30287763..9ae5c1fb 100644 --- a/src/modules/temperature.cpp +++ b/src/modules/temperature.cpp @@ -1,6 +1,7 @@ #include "modules/temperature.hpp" #include +#include #include #if defined(__FreeBSD__) @@ -20,12 +21,42 @@ waybar::modules::Temperature::Temperature(const std::string& id, const Json::Val if (check_set_path(item.asString())) break; }; - // if hwmon_path is an array, loop to find first valid item - traverseAsArray(config_["hwmon-path"], [this](const std::string& path) { - if (!std::filesystem::exists(path)) return false; - file_path_ = path; - return true; - }); + if (config_["hwmon-by-name"].isString() && config_["input-filename"].isString()) { + auto name = config_["hwmon-by-name"].asString(); + auto input_filename = config_["input-filename"].asString(); + for (const auto& entry : std::filesystem::directory_iterator("/sys/class/hwmon/")) { + if (std::filesystem::is_directory(entry) && file_path_.empty()) { + std::string name_filepath = entry.path().string() + "/name"; + std::string input_filepath = entry.path().string() + "/" + input_filename; + + if (std::filesystem::exists(name_filepath) && std::filesystem::exists(input_filepath)) { + std::ifstream name_file(name_filepath); + if (!name_file.is_open()) { + throw std::runtime_error("Error: Could not open file " + name_filepath); + } + + std::string line; + while (std::getline(name_file, line)) { + if (line.find(name) != std::string::npos) { + file_path_ = input_filepath; + break; + } + } + } + } + } + if (file_path_.empty()) + throw std::runtime_error("Could not find hwmon by name " + name); + } + + if (file_path_.empty()) { + // if hwmon_path is an array, loop to find first valid item + traverseAsArray(config_["hwmon-path"], [this](const std::string& path) { + if (!std::filesystem::exists(path)) return false; + file_path_ = path; + return true; + }); + } if (file_path_.empty() && config_["input-filename"].isString()) { // fallback to hwmon_paths-abs From 8cae35d49f2da063af422d5b3538b962768da078 Mon Sep 17 00:00:00 2001 From: ico277 Date: Tue, 22 Oct 2024 18:23:24 +0200 Subject: [PATCH 2/4] try to adhere more to the rest of the coding style --- src/modules/temperature.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/temperature.cpp b/src/modules/temperature.cpp index 9ae5c1fb..fae1c1f6 100644 --- a/src/modules/temperature.cpp +++ b/src/modules/temperature.cpp @@ -26,8 +26,8 @@ waybar::modules::Temperature::Temperature(const std::string& id, const Json::Val auto input_filename = config_["input-filename"].asString(); for (const auto& entry : std::filesystem::directory_iterator("/sys/class/hwmon/")) { if (std::filesystem::is_directory(entry) && file_path_.empty()) { - std::string name_filepath = entry.path().string() + "/name"; - std::string input_filepath = entry.path().string() + "/" + input_filename; + auto name_filepath = entry.path().string() + "/name"; + auto input_filepath = entry.path().string() + "/" + input_filename; if (std::filesystem::exists(name_filepath) && std::filesystem::exists(input_filepath)) { std::ifstream name_file(name_filepath); From b92394cd4dd51183d0184937cedc8f1802009802 Mon Sep 17 00:00:00 2001 From: ico277 Date: Tue, 22 Oct 2024 18:53:13 +0200 Subject: [PATCH 3/4] man page edit for the configuration addition --- man/waybar-temperature.5.scd | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/man/waybar-temperature.5.scd b/man/waybar-temperature.5.scd index 541bf3af..4ca17410 100644 --- a/man/waybar-temperature.5.scd +++ b/man/waybar-temperature.5.scd @@ -29,7 +29,12 @@ Addressed by *temperature* *input-filename*: ++ typeof: string ++ - The temperature filename of your *hwmon-path-abs*, e.g. *temp1_input* + The temperature filename of your *hwmon-path-abs* (also used by *hwmon-by-name*), e.g. *temp1_input* + +*hwmon-by-name*: ++ + typeof: string ++ + The substring to search for in */sys/class/hwmon/hwmonX/name* (where hwmonX is any folder in */sys/class/hwmon/*). + Waybar will search for every directory in */sys/class/hwmon/* and uses the directory in which the *name* matches *hwmon-by-name*. *critical-threshold*: ++ typeof: integer ++ From 00e5cb7568107d6416536dc484f4a7ccb293ec8f Mon Sep 17 00:00:00 2001 From: ico277 Date: Tue, 22 Oct 2024 18:56:10 +0200 Subject: [PATCH 4/4] clang-format run --- src/modules/temperature.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/modules/temperature.cpp b/src/modules/temperature.cpp index fae1c1f6..ec0f585e 100644 --- a/src/modules/temperature.cpp +++ b/src/modules/temperature.cpp @@ -43,10 +43,9 @@ waybar::modules::Temperature::Temperature(const std::string& id, const Json::Val } } } - } + } } - if (file_path_.empty()) - throw std::runtime_error("Could not find hwmon by name " + name); + if (file_path_.empty()) throw std::runtime_error("Could not find hwmon by name " + name); } if (file_path_.empty()) {