diff options
Diffstat (limited to 'src/app/data_harvester/temperature/sysinfo.rs')
-rw-r--r-- | src/app/data_harvester/temperature/sysinfo.rs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/app/data_harvester/temperature/sysinfo.rs b/src/app/data_harvester/temperature/sysinfo.rs new file mode 100644 index 00000000..f0f79b1a --- /dev/null +++ b/src/app/data_harvester/temperature/sysinfo.rs @@ -0,0 +1,47 @@ +//! Gets temperature data via sysinfo. + +use super::{is_temp_filtered, temp_vec_sort, TempHarvest, TemperatureType}; +use crate::app::Filter; + +pub async fn get_temperature_data( + sys: &sysinfo::System, temp_type: &TemperatureType, actually_get: bool, filter: &Option<Filter>, +) -> crate::utils::error::Result<Option<Vec<TempHarvest>>> { + use sysinfo::{ComponentExt, SystemExt}; + + if !actually_get { + return Ok(None); + } + + fn convert_celsius_to_kelvin(celsius: f32) -> f32 { + celsius + 273.15 + } + + fn convert_celsius_to_fahrenheit(celsius: f32) -> f32 { + (celsius * (9.0 / 5.0)) + 32.0 + } + + let mut temperature_vec: Vec<TempHarvest> = Vec::new(); + + let sensor_data = sys.get_components(); + for component in sensor_data { + let name = component.get_label().to_string(); + + if is_temp_filtered(filter, &name) { + temperature_vec.push(TempHarvest { + name, + temperature: match temp_type { + TemperatureType::Celsius => component.get_temperature(), + TemperatureType::Kelvin => { + convert_celsius_to_kelvin(component.get_temperature()) + } + TemperatureType::Fahrenheit => { + convert_celsius_to_fahrenheit(component.get_temperature()) + } + }, + }); + } + } + + temp_vec_sort(&mut temperature_vec); + Ok(Some(temperature_vec)) +} |