From 96ceba92c2abf5cee472e8e916ea962e45ee5e59 Mon Sep 17 00:00:00 2001 From: ClementTsang Date: Sun, 8 Sep 2019 01:25:53 -0400 Subject: [PATCH] Started terminal UI. --- Cargo.toml | 1 + src/main.rs | 19 ++++++++----------- src/window/mod.rs | 23 ++++++++++++++--------- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 60898d01..ab26928e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,5 +13,6 @@ futures-util = "0.2.1" heim = "0.0.7" heim-common = "0.0.7" sysinfo = "0.9.4" +termion = "1.5.3" tokio = "0.2.0-alpha.4" tui = "0.6.2" diff --git a/src/main.rs b/src/main.rs index 2d6715a6..520f473c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,7 +12,7 @@ fn set_if_valid(result : &Result, value_t } #[tokio::main] -async fn main() { +async fn main() -> Result<(), std::io::Error> { // Initialize let refresh_interval = 1; // TODO: Make changing this possible! let mut sys = System::new(); @@ -27,29 +27,26 @@ async fn main() { let mut list_of_processes = Vec::new(); let mut list_of_disks = Vec::new(); + window::create_terminal()?; + loop { - println!("Start data loop..."); sys.refresh_system(); sys.refresh_network(); // What we want to do: For timed data, if there is an error, just do not add. For other data, just don't update! - // TODO: Joining all would be better... set_if_valid(&network::get_network_data(&sys), &mut network); + set_if_valid(&cpu::get_cpu_data_list(&sys), &mut list_of_cpu_packages); + // TODO: Joining all futures would be better... set_if_valid(&processes::get_sorted_processes_list(processes::ProcessSorting::NAME, false).await, &mut list_of_processes); set_if_valid(&disks::get_disk_usage_list().await, &mut list_of_disks); - set_if_valid(&disks::get_io_usage_list(false).await, &mut list_of_io); set_if_valid(&disks::get_io_usage_list(true).await, &mut list_of_physical_io); - set_if_valid(&mem::get_mem_data_list().await, &mut memory); set_if_valid(&mem::get_swap_data_list().await, &mut swap); set_if_valid(&temperature::get_temperature_data().await, &mut list_of_temperature); - set_if_valid(&cpu::get_cpu_data_list(&sys), &mut list_of_cpu_packages); - - println!("End data loop..."); - + /* // DEBUG - output results for process in &list_of_processes { println!( @@ -83,9 +80,9 @@ async fn main() { } println!("Network: {} rx, {} tx", network.rx, network.tx); + */ - // Send to drawing module - window::draw_terminal(); + // TODO: Send to drawing module // Repeat on interval std::thread::sleep(std::time::Duration::from_secs(refresh_interval)); diff --git a/src/window/mod.rs b/src/window/mod.rs index 9b34bb7a..585767c0 100644 --- a/src/window/mod.rs +++ b/src/window/mod.rs @@ -1,14 +1,19 @@ use std::io; +use termion::raw::IntoRawMode; use tui::{ - backend::Backend, - layout::{Constraint, Direction, Layout, Rect}, - style::{Color, Modifier, Style}, - widgets::{ - canvas::{Canvas, Line, Map, MapResolution, Rectangle}, - Axis, Borders, Chart, List, - }, - Frame, Terminal, + backend::TermionBackend, + layout::{Constraint, Direction, Layout}, + widgets::{Block, Borders, Widget}, + Terminal, }; -pub fn draw_terminal() { +pub fn create_terminal() -> Result<(), io::Error> { + let stdout = io::stdout().into_raw_mode()?; + let backend = TermionBackend::new(stdout); + let mut terminal = Terminal::new(backend)?; + terminal.clear()?; + terminal.draw(|mut f| { + let size = f.size(); + Block::default().title("CPU Usage").borders(Borders::ALL).render(&mut f, size); + }) }