summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClement Tsang <clementjhtsang@gmail.com>2019-09-25 00:27:43 -0400
committerClementTsang <clementjhtsang@gmail.com>2019-09-25 01:59:47 -0400
commitbc3169a4df3c0749f6ea08fbca7b235cce3f77d7 (patch)
tree7e9fc0aaf0fe187c73b7fb6fe811fd1a277239ac
parentcb9ec2cdca7fe8d49a54d254bb590d23cf84229f (diff)
Added some more support for windows.
-rw-r--r--Cargo.toml3
-rw-r--r--src/app/data_collection.rs5
-rw-r--r--src/app/data_collection/temperature.rs33
-rw-r--r--src/convert_data.rs25
-rw-r--r--src/main.rs25
5 files changed, 67 insertions, 24 deletions
diff --git a/Cargo.toml b/Cargo.toml
index e25596bf..54b96f33 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "bottom"
-version = "0.1.0-alpha.2"
+version = "0.1.0-alpha.3"
authors = ["Clement Tsang <clementjhtsang@gmail.com>"]
edition = "2018"
repository = "https://github.com/ClementTsang/bottom"
@@ -24,6 +24,7 @@ futures-util = "0.2.1"
heim = "0.0.7"
heim-common = "0.0.7"
log = "0.4"
+rayon = "1.2"
sysinfo = "0.9.4"
tokio = "0.2.0-alpha.4"
diff --git a/src/app/data_collection.rs b/src/app/data_collection.rs
index 793d9e1b..642fc723 100644
--- a/src/app/data_collection.rs
+++ b/src/app/data_collection.rs
@@ -100,7 +100,10 @@ impl DataState {
set_if_valid(&disks::get_disk_usage_list().await, &mut self.data.list_of_disks);
push_if_valid(&disks::get_io_usage_list(false).await, &mut self.data.list_of_io);
//push_if_valid(&disks::get_io_usage_list(true).await, &mut self.data.list_of_physical_io); // Removed, seems irrelevant for now...
- set_if_valid(&temperature::get_temperature_data(&self.temperature_type).await, &mut self.data.list_of_temperature_sensor);
+ set_if_valid(
+ &temperature::get_temperature_data(&self.sys, &self.temperature_type).await,
+ &mut self.data.list_of_temperature_sensor,
+ );
if self.first_run {
self.data = Data::default();
diff --git a/src/app/data_collection/temperature.rs b/src/app/data_collection/temperature.rs
index f650592e..8c05a5f6 100644
--- a/src/app/data_collection/temperature.rs
+++ b/src/app/data_collection/temperature.rs
@@ -1,4 +1,5 @@
use heim_common::{prelude::StreamExt, units::thermodynamic_temperature};
+use sysinfo::{ComponentExt, System, SystemExt};
#[derive(Clone)]
pub struct TempData {
@@ -19,18 +20,34 @@ impl Default for TemperatureType {
}
}
-pub async fn get_temperature_data(temp_type : &TemperatureType) -> crate::utils::error::Result<Vec<TempData>> {
+pub async fn get_temperature_data(sys : &System, temp_type : &TemperatureType) -> crate::utils::error::Result<Vec<TempData>> {
let mut temperature_vec : Vec<TempData> = Vec::new();
- let mut sensor_data = heim::sensors::temperatures();
- while let Some(sensor) = sensor_data.next().await {
- if let Ok(sensor) = sensor {
+ if cfg!(target_os = "linux") {
+ let mut sensor_data = heim::sensors::temperatures();
+ while let Some(sensor) = sensor_data.next().await {
+ if let Ok(sensor) = sensor {
+ temperature_vec.push(TempData {
+ component_name : Box::from(sensor.unit()),
+ temperature : match temp_type {
+ TemperatureType::Celsius => sensor.current().get::<thermodynamic_temperature::degree_celsius>(),
+ TemperatureType::Kelvin => sensor.current().get::<thermodynamic_temperature::kelvin>(),
+ TemperatureType::Fahrenheit => sensor.current().get::<thermodynamic_temperature::degree_fahrenheit>(),
+ },
+ });
+ }
+ }
+ }
+ else if cfg!(target_os = "windows") {
+ let sensor_data = sys.get_components_list();
+ debug!("TEMPS: {:?}", sensor_data);
+ for component in sensor_data {
temperature_vec.push(TempData {
- component_name : Box::from(sensor.unit()),
+ component_name : Box::from(component.get_label()),
temperature : match temp_type {
- TemperatureType::Celsius => sensor.current().get::<thermodynamic_temperature::degree_celsius>(),
- TemperatureType::Kelvin => sensor.current().get::<thermodynamic_temperature::kelvin>(),
- TemperatureType::Fahrenheit => sensor.current().get::<thermodynamic_temperature::degree_fahrenheit>(),
+ TemperatureType::Celsius => component.get_temperature(),
+ TemperatureType::Kelvin => component.get_temperature() + 273.15,
+ TemperatureType::Fahrenheit => (component.get_temperature() * (9.0 / 5.0)) + 32.0,
},
});
}
diff --git a/src/convert_data.rs b/src/convert_data.rs
index 93452dae..60ab963b 100644
--- a/src/convert_data.rs
+++ b/src/convert_data.rs
@@ -4,16 +4,21 @@ use constants::*;
pub fn update_temp_row(app_data : &data_collection::Data, temp_type : &data_collection::temperature::TemperatureType) -> Vec<Vec<String>> {
let mut sensor_vector : Vec<Vec<String>> = Vec::new();
- for sensor in &app_data.list_of_temperature_sensor {
- sensor_vector.push(vec![
- sensor.component_name.to_string(),
- (sensor.temperature.ceil() as u64).to_string()
- + match temp_type {
- data_collection::temperature::TemperatureType::Celsius => "C",
- data_collection::temperature::TemperatureType::Kelvin => "K",
- data_collection::temperature::TemperatureType::Fahrenheit => "F",
- },
- ]);
+ if (&app_data.list_of_temperature_sensor).is_empty() {
+ sensor_vector.push(vec!["None Found".to_string(), "".to_string()])
+ }
+ else {
+ for sensor in &app_data.list_of_temperature_sensor {
+ sensor_vector.push(vec![
+ sensor.component_name.to_string(),
+ (sensor.temperature.ceil() as u64).to_string()
+ + match temp_type {
+ data_collection::temperature::TemperatureType::Celsius => "C",
+ data_collection::temperature::TemperatureType::Kelvin => "K",
+ data_collection::temperature::TemperatureType::Fahrenheit => "F",
+ },
+ ]);
+ }
}
sensor_vector
diff --git a/src/main.rs b/src/main.rs
index 6caf99bd..19fe5493 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -7,8 +7,13 @@ extern crate clap;
#[macro_use]
extern crate failure;
-use crossterm::{input, AlternateScreen, InputEvent, KeyEvent, MouseButton, MouseEvent};
-use std::{sync::mpsc, thread, time::Duration};
+use crossterm::{input, queue, AlternateScreen, InputEvent, KeyEvent, MouseButton, MouseEvent};
+use std::{
+ io::{stdout, Write},
+ sync::mpsc,
+ thread,
+ time::Duration,
+};
use tui_temp_fork::{backend::CrosstermBackend, Terminal};
pub mod app;
@@ -84,9 +89,18 @@ fn main() -> error::Result<()> {
// Set up up tui and crossterm
let screen = AlternateScreen::to_alternate(true)?;
- let stdout = std::io::stdout();
+ let mut stdout = stdout();
+
+ if cfg!(target_os = "windows") {
+ screen.to_main()?;
+ queue!(stdout, crossterm::Clear(crossterm::ClearType::All), crossterm::BlinkOff)?;
+
+ stdout.flush()?;
+ }
+
let backend = CrosstermBackend::with_alternate_screen(stdout, screen)?;
let mut terminal = Terminal::new(backend)?;
+ terminal.set_cursor(0, 0)?;
terminal.hide_cursor()?;
terminal.clear()?;
@@ -96,7 +110,10 @@ fn main() -> error::Result<()> {
let tx = tx.clone();
thread::spawn(move || {
let input = input();
- input.enable_mouse_mode().unwrap();
+ // TODO: Temp!
+ if !(cfg!(target_os = "windows")) {
+ input.enable_mouse_mode().unwrap(); // TODO: I think this is broken on windows...
+ }
let reader = input.read_sync();
for event in reader {
match event {