refactor: simplify temperature conversion function usage (#1326)
* refactor: simplify temperature conversion function usage Just make it a function on the temperature type enum. * fix sysinfo variant * simple test
This commit is contained in:
parent
10a37c263a
commit
ab9331140a
|
@ -8,9 +8,7 @@ use crate::app::Filter;
|
||||||
|
|
||||||
use crate::app::layout_manager::UsedWidgets;
|
use crate::app::layout_manager::UsedWidgets;
|
||||||
use crate::data_harvester::memory::MemHarvest;
|
use crate::data_harvester::memory::MemHarvest;
|
||||||
use crate::data_harvester::temperature::{
|
use crate::data_harvester::temperature::{is_temp_filtered, TempHarvest, TemperatureType};
|
||||||
convert_temp_unit, is_temp_filtered, TempHarvest, TemperatureType,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub static NVML_DATA: Lazy<Result<Nvml, NvmlError>> = Lazy::new(Nvml::init);
|
pub static NVML_DATA: Lazy<Result<Nvml, NvmlError>> = Lazy::new(Nvml::init);
|
||||||
|
|
||||||
|
@ -52,8 +50,8 @@ pub fn get_nvidia_vecs(
|
||||||
}
|
}
|
||||||
if widgets_to_harvest.use_temp && is_temp_filtered(filter, &name) {
|
if widgets_to_harvest.use_temp && is_temp_filtered(filter, &name) {
|
||||||
if let Ok(temperature) = device.temperature(TemperatureSensor::Gpu) {
|
if let Ok(temperature) = device.temperature(TemperatureSensor::Gpu) {
|
||||||
let temperature = temperature as f32;
|
let temperature = temp_type.convert_temp_unit(temperature as f32);
|
||||||
let temperature = convert_temp_unit(temperature, temp_type);
|
|
||||||
temp_vec.push(TempHarvest {
|
temp_vec.push(TempHarvest {
|
||||||
name: name.clone(),
|
name: name.clone(),
|
||||||
temperature,
|
temperature,
|
||||||
|
|
|
@ -29,6 +29,9 @@ pub enum TemperatureType {
|
||||||
Fahrenheit,
|
Fahrenheit,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl TemperatureType {
|
||||||
|
/// Given a temperature in Celsius, covert it if necessary for a different unit.
|
||||||
|
pub fn convert_temp_unit(&self, temp_celsius: f32) -> f32 {
|
||||||
fn convert_celsius_to_kelvin(celsius: f32) -> f32 {
|
fn convert_celsius_to_kelvin(celsius: f32) -> f32 {
|
||||||
celsius + 273.15
|
celsius + 273.15
|
||||||
}
|
}
|
||||||
|
@ -37,11 +40,11 @@ fn convert_celsius_to_fahrenheit(celsius: f32) -> f32 {
|
||||||
(celsius * (9.0 / 5.0)) + 32.0
|
(celsius * (9.0 / 5.0)) + 32.0
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn convert_temp_unit(temp: f32, temp_type: &TemperatureType) -> f32 {
|
match self {
|
||||||
match temp_type {
|
TemperatureType::Celsius => temp_celsius,
|
||||||
TemperatureType::Celsius => temp,
|
TemperatureType::Kelvin => convert_celsius_to_kelvin(temp_celsius),
|
||||||
TemperatureType::Kelvin => convert_celsius_to_kelvin(temp),
|
TemperatureType::Fahrenheit => convert_celsius_to_fahrenheit(temp_celsius),
|
||||||
TemperatureType::Fahrenheit => convert_celsius_to_fahrenheit(temp),
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,3 +62,23 @@ pub fn is_temp_filtered(filter: &Option<Filter>, text: &str) -> bool {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use crate::app::data_harvester::temperature::TemperatureType;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn temp_conversions() {
|
||||||
|
const TEMP: f32 = 100.0;
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
TemperatureType::Celsius.convert_temp_unit(TEMP),
|
||||||
|
TEMP,
|
||||||
|
"celsius to celsius is the same"
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(TemperatureType::Kelvin.convert_temp_unit(TEMP), 373.15);
|
||||||
|
|
||||||
|
assert_eq!(TemperatureType::Fahrenheit.convert_temp_unit(TEMP), 212.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ use anyhow::Result;
|
||||||
use hashbrown::{HashMap, HashSet};
|
use hashbrown::{HashMap, HashSet};
|
||||||
|
|
||||||
use super::{is_temp_filtered, TempHarvest, TemperatureType};
|
use super::{is_temp_filtered, TempHarvest, TemperatureType};
|
||||||
use crate::app::{data_harvester::temperature::convert_temp_unit, Filter};
|
use crate::app::Filter;
|
||||||
|
|
||||||
const EMPTY_NAME: &str = "Unknown";
|
const EMPTY_NAME: &str = "Unknown";
|
||||||
|
|
||||||
|
@ -272,7 +272,7 @@ fn hwmon_temperatures(temp_type: &TemperatureType, filter: &Option<Filter>) -> H
|
||||||
let name = finalize_name(hwmon_name, sensor_label, &sensor_name, &mut seen_names);
|
let name = finalize_name(hwmon_name, sensor_label, &sensor_name, &mut seen_names);
|
||||||
|
|
||||||
if is_temp_filtered(filter, &name) {
|
if is_temp_filtered(filter, &name) {
|
||||||
let temp = if should_read_temp {
|
let temp_celsius = if should_read_temp {
|
||||||
if let Ok(temp) = read_temp(&temp_path) {
|
if let Ok(temp) = read_temp(&temp_path) {
|
||||||
temp
|
temp
|
||||||
} else {
|
} else {
|
||||||
|
@ -284,7 +284,7 @@ fn hwmon_temperatures(temp_type: &TemperatureType, filter: &Option<Filter>) -> H
|
||||||
|
|
||||||
temperatures.push(TempHarvest {
|
temperatures.push(TempHarvest {
|
||||||
name,
|
name,
|
||||||
temperature: convert_temp_unit(temp, temp_type),
|
temperature: temp_type.convert_temp_unit(temp_celsius),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -324,12 +324,12 @@ fn add_thermal_zone_temperatures(
|
||||||
if let Some(name) = read_to_string_lossy(name_path) {
|
if let Some(name) = read_to_string_lossy(name_path) {
|
||||||
if is_temp_filtered(filter, &name) {
|
if is_temp_filtered(filter, &name) {
|
||||||
let temp_path = file_path.join("temp");
|
let temp_path = file_path.join("temp");
|
||||||
if let Ok(temp) = read_temp(&temp_path) {
|
if let Ok(temp_celsius) = read_temp(&temp_path) {
|
||||||
let name = counted_name(&mut seen_names, name);
|
let name = counted_name(&mut seen_names, name);
|
||||||
|
|
||||||
temperatures.push(TempHarvest {
|
temperatures.push(TempHarvest {
|
||||||
name,
|
name,
|
||||||
temperature: convert_temp_unit(temp, temp_type),
|
temperature: temp_type.convert_temp_unit(temp_celsius),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,10 +2,7 @@
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
|
||||||
use super::{
|
use super::{is_temp_filtered, TempHarvest, TemperatureType};
|
||||||
convert_celsius_to_fahrenheit, convert_celsius_to_kelvin, is_temp_filtered, TempHarvest,
|
|
||||||
TemperatureType,
|
|
||||||
};
|
|
||||||
use crate::app::Filter;
|
use crate::app::Filter;
|
||||||
|
|
||||||
pub fn get_temperature_data(
|
pub fn get_temperature_data(
|
||||||
|
@ -22,13 +19,7 @@ pub fn get_temperature_data(
|
||||||
if is_temp_filtered(filter, &name) {
|
if is_temp_filtered(filter, &name) {
|
||||||
temperature_vec.push(TempHarvest {
|
temperature_vec.push(TempHarvest {
|
||||||
name,
|
name,
|
||||||
temperature: match temp_type {
|
temperature: temp_type.convert_temp_unit(component.temperature()),
|
||||||
TemperatureType::Celsius => component.temperature(),
|
|
||||||
TemperatureType::Kelvin => convert_celsius_to_kelvin(component.temperature()),
|
|
||||||
TemperatureType::Fahrenheit => {
|
|
||||||
convert_celsius_to_fahrenheit(component.temperature())
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue