|
|
|
@ -1,13 +1,8 @@ |
|
|
|
|
use std::sync::{atomic::AtomicBool, Arc}; |
|
|
|
|
|
|
|
|
|
use systemstat::Platform; |
|
|
|
|
|
|
|
|
|
use crate::{ |
|
|
|
|
blocks::{BlockInfo, Color}, |
|
|
|
|
Block, |
|
|
|
|
}; |
|
|
|
|
use crate::{blocks::BlockInfo, Block}; |
|
|
|
|
|
|
|
|
|
use super::{BlockEvent, BlockPartName, BlockUpdate}; |
|
|
|
|
use super::{BlockEvent, BlockUpdate}; |
|
|
|
|
|
|
|
|
|
pub struct CpuBlock { |
|
|
|
|
pub id: usize, |
|
|
|
@ -23,41 +18,16 @@ impl Block for CpuBlock { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fn run(&mut self, _event_r: flume::Receiver<BlockEvent>, update_s: flume::Sender<BlockUpdate>) { |
|
|
|
|
let on = Arc::new(AtomicBool::new(false)); |
|
|
|
|
{ |
|
|
|
|
let on = on.clone(); |
|
|
|
|
std::thread::spawn(move || loop { |
|
|
|
|
let event = _event_r.recv().unwrap(); |
|
|
|
|
if let BlockPartName::Named(name) = event.part_name { |
|
|
|
|
if name == "icon" { |
|
|
|
|
let on_value = on.load(std::sync::atomic::Ordering::Relaxed); |
|
|
|
|
on.store(!on_value, std::sync::atomic::Ordering::Relaxed); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
let sys = systemstat::System::new(); |
|
|
|
|
loop { |
|
|
|
|
let cpu = sys.cpu_load_aggregate().unwrap(); |
|
|
|
|
std::thread::sleep(std::time::Duration::from_millis(1000)); |
|
|
|
|
let cpu = cpu.done().unwrap(); |
|
|
|
|
let load_percentage = 100.0 * cpu.user; |
|
|
|
|
let fg_color = if on.load(std::sync::atomic::Ordering::Relaxed) { |
|
|
|
|
Color::Rgb(0, 255, 0) |
|
|
|
|
} else { |
|
|
|
|
Color::Rgb(0, 0, 255) |
|
|
|
|
}; |
|
|
|
|
let update = BlockUpdate::Multi(vec![ |
|
|
|
|
BlockInfo::from_unnamed(String::from(" ")).build(), |
|
|
|
|
BlockInfo::from_named(String::from("icon"), String::from("\u{f3fd}")) |
|
|
|
|
.fg_color(fg_color) |
|
|
|
|
.bg_color(Color::Rgb(255, 255, 0)) |
|
|
|
|
.build(), |
|
|
|
|
BlockInfo::from_unnamed(format!("{:>5.2}% ", load_percentage)) |
|
|
|
|
.fg_color(Color::Rgb(0, 255, 0)) |
|
|
|
|
.build(), |
|
|
|
|
]); |
|
|
|
|
|
|
|
|
|
let update = BlockUpdate::Single( |
|
|
|
|
BlockInfo::from_unnamed(format!(" \u{f3fd}{:>5.2}% ", load_percentage)).build(), |
|
|
|
|
); |
|
|
|
|
update_s.send(update).unwrap(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|