From 534b6cde9916c5827f74ea3b53929017cb6e967f Mon Sep 17 00:00:00 2001 From: electria Date: Sun, 16 Aug 2026 10:49:41 -0700 Subject: [PATCH] feat: add uptime to title it will be displayed somewhere else later, hopefully with better formatting too. --- src/app/mod.rs | 11 +++++++++++ src/sysinfo_snapshot.rs | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/app/mod.rs b/src/app/mod.rs index 260003e..37d6376 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -1,3 +1,5 @@ +use std::time::Duration; + use iced::{ Color, Element, Length, Renderer, Task, Theme, application, futures::SinkExt, stream, theme, widget, @@ -14,6 +16,8 @@ enum Message { #[derive(Default)] struct State { + uptime: Duration, + total_cpu_graph: Graph, cpu_graphs: Vec, memory_graph: Graph, @@ -47,6 +51,8 @@ impl State { fn update(&mut self, message: Message) -> Task { match message { Message::Info(snapshot) => { + self.uptime = snapshot.uptime(); + self.total_cpu_graph.update(snapshot.cpu_total); self.memory_graph @@ -103,10 +109,15 @@ impl State { ]) .into() } + + fn title(&self) -> String { + format!("itop {:?}", self.uptime) + } } pub fn run() -> Result<(), impl std::error::Error> { application(State::new, State::update, State::view) + .title(State::title) .theme(theme::Theme::custom( "high-contrast-dark", theme::Palette { diff --git a/src/sysinfo_snapshot.rs b/src/sysinfo_snapshot.rs index 340a215..c4bee85 100644 --- a/src/sysinfo_snapshot.rs +++ b/src/sysinfo_snapshot.rs @@ -1,5 +1,9 @@ +use std::time::Duration; + #[derive(Clone, Debug)] pub struct SysinfoSnapshot { + uptime: u64, + pub cpu_total: f32, pub cpus: Vec, @@ -8,10 +12,17 @@ pub struct SysinfoSnapshot { pub swap: u64, pub swap_total: u64, } +impl SysinfoSnapshot { + pub fn uptime(&self) -> Duration { + Duration::from_secs(self.uptime) + } +} impl From<&sysinfo::System> for SysinfoSnapshot { fn from(value: &sysinfo::System) -> Self { Self { + uptime: sysinfo::System::uptime(), + cpu_total: value.global_cpu_usage(), cpus: value.cpus().iter().map(|cpu| cpu.cpu_usage()).collect(),