Merge remote-tracking branch 'origin/master' into ico277/master
# Conflicts: # src/modules/temperature.cpp
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#include "modules/temperature.hpp"
|
||||
|
||||
#include <filesystem>
|
||||
#include <optional>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
|
||||
@@ -48,6 +49,24 @@ 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);
|
||||
}
|
||||
|
||||
auto find_hwmon_by_name = [](const std::string& name) -> std::optional<std::filesystem::path> {
|
||||
for (const auto& entry : std::filesystem::directory_iterator("/sys/class/hwmon")) {
|
||||
std::ifstream f(entry.path() / "name");
|
||||
std::string hwname;
|
||||
if (f >> hwname && hwname == name) {
|
||||
return entry.path();
|
||||
}
|
||||
}
|
||||
return std::nullopt;
|
||||
};
|
||||
|
||||
// ensure either hwmon-name OR old paths are used, not both
|
||||
if (config_["hwmon-name"].isString() &&
|
||||
(!config_["hwmon-path"].isNull() || !config_["hwmon-path-abs"].isNull())) {
|
||||
throw std::runtime_error(
|
||||
"hwmon-name cannot be used together with hwmon-path or hwmon-path-abs");
|
||||
}
|
||||
|
||||
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) {
|
||||
@@ -70,6 +89,20 @@ waybar::modules::Temperature::Temperature(const std::string& id, const Json::Val
|
||||
});
|
||||
}
|
||||
|
||||
if (file_path_.empty() && config_["hwmon-name"].isString()) {
|
||||
if (!config_["input-filename"].isString()) {
|
||||
throw std::runtime_error("hwmon-name requires input-filename to be set");
|
||||
}
|
||||
|
||||
auto hwmon = find_hwmon_by_name(config_["hwmon-name"].asString());
|
||||
|
||||
if (!hwmon) {
|
||||
throw std::runtime_error("hwmon-name '" + config_["hwmon-name"].asString() + "' not found");
|
||||
}
|
||||
|
||||
file_path_ = hwmon->string() + "/" + config_["input-filename"].asString();
|
||||
}
|
||||
|
||||
if (file_path_.empty()) {
|
||||
auto zone = config_["thermal-zone"].isInt() ? config_["thermal-zone"].asInt() : 0;
|
||||
file_path_ = fmt::format("/sys/class/thermal/thermal_zone{}/temp", zone);
|
||||
@@ -104,12 +137,14 @@ auto waybar::modules::Temperature::update() -> void {
|
||||
if (critical) {
|
||||
format = config_["format-critical"].isString() ? config_["format-critical"].asString() : format;
|
||||
label_.get_style_context()->add_class("critical");
|
||||
} else if (warning) {
|
||||
format = config_["format-warning"].isString() ? config_["format-warning"].asString() : format;
|
||||
label_.get_style_context()->add_class("warning");
|
||||
} else {
|
||||
label_.get_style_context()->remove_class("critical");
|
||||
label_.get_style_context()->remove_class("warning");
|
||||
if (warning) {
|
||||
format = config_["format-warning"].isString() ? config_["format-warning"].asString() : format;
|
||||
label_.get_style_context()->add_class("warning");
|
||||
} else {
|
||||
label_.get_style_context()->remove_class("warning");
|
||||
}
|
||||
}
|
||||
|
||||
if (format.empty()) {
|
||||
@@ -129,7 +164,7 @@ auto waybar::modules::Temperature::update() -> void {
|
||||
if (config_["tooltip-format"].isString()) {
|
||||
tooltip_format = config_["tooltip-format"].asString();
|
||||
}
|
||||
label_.set_tooltip_text(fmt::format(
|
||||
label_.set_tooltip_markup(fmt::format(
|
||||
fmt::runtime(tooltip_format), fmt::arg("temperatureC", temperature_c),
|
||||
fmt::arg("temperatureF", temperature_f), fmt::arg("temperatureK", temperature_k)));
|
||||
}
|
||||
@@ -183,3 +218,7 @@ bool waybar::modules::Temperature::isCritical(uint16_t temperature_c) {
|
||||
return config_["critical-threshold"].isInt() &&
|
||||
temperature_c >= config_["critical-threshold"].asInt();
|
||||
}
|
||||
|
||||
void waybar::modules::Temperature::suspend() { thread_.pause(); }
|
||||
|
||||
void waybar::modules::Temperature::resume() { thread_.resume(); }
|
||||
|
||||
Reference in New Issue
Block a user