From 3ffef288c08b5639113d796f760ad2c280247b74 Mon Sep 17 00:00:00 2001 From: Avii Date: Mon, 17 Aug 2026 02:03:35 +0200 Subject: [PATCH] 1786925015 --- dashboard/src/battery.rs | 8 ++++---- dashboard/src/error.rs | 3 --- dashboard/src/main.rs | 2 +- dashboard/src/messages.rs | 1 + dashboard/src/ui.rs | 12 +++++++++++- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/dashboard/src/battery.rs b/dashboard/src/battery.rs index 95c8f05..857fc20 100644 --- a/dashboard/src/battery.rs +++ b/dashboard/src/battery.rs @@ -46,10 +46,10 @@ impl From<&Battery> for RawBatteryData { pub async fn battery_listener(s2c_tx: UnboundedSender) -> Result<(), AppError> { let manager = ::battery::Manager::new()?; - let mut battery = manager - .batteries()? - .next() - .ok_or_else(|| AppError::NoBattery)??; + let Some(Ok(mut battery)) = manager.batteries()?.next() else { + s2c_tx.send(EventMessage::NoBattery).ok(); + return Ok(()); + }; tokio::spawn({ let s2c_tx = s2c_tx.clone(); diff --git a/dashboard/src/error.rs b/dashboard/src/error.rs index 68220ac..ce2ac99 100644 --- a/dashboard/src/error.rs +++ b/dashboard/src/error.rs @@ -12,9 +12,6 @@ pub enum AppError { #[error("Unsupported HASS_URL scheme: {0}")] InvalidScheme(String), - #[error("No battery found")] - NoBattery, - #[error(transparent)] SlintPlatform(#[from] slint::PlatformError), diff --git a/dashboard/src/main.rs b/dashboard/src/main.rs index 5b0be0c..0be889e 100644 --- a/dashboard/src/main.rs +++ b/dashboard/src/main.rs @@ -38,7 +38,7 @@ async fn main() -> Result<(), AppError> { tokio::spawn({ let s2c_tx = s2c_tx.clone(); async move { - battery::battery_listener(s2c_tx).await.unwrap(); + battery::battery_listener(s2c_tx).await.ok(); } }); diff --git a/dashboard/src/messages.rs b/dashboard/src/messages.rs index 244c89d..9160539 100644 --- a/dashboard/src/messages.rs +++ b/dashboard/src/messages.rs @@ -18,4 +18,5 @@ pub enum EventMessage { EntityRemoved(HassEntity), CalendarUpdated(Vec), Battery(RawBatteryData), + NoBattery, } diff --git a/dashboard/src/ui.rs b/dashboard/src/ui.rs index 562e264..4c80e87 100644 --- a/dashboard/src/ui.rs +++ b/dashboard/src/ui.rs @@ -9,7 +9,7 @@ use crate::{ use hass_rs::HassEntity; use paste::paste; -use slint::{Model, ModelRc, VecModel, Weak, language::ColorScheme}; +use slint::{Model, ModelRc, ToSharedString, VecModel, Weak, language::ColorScheme}; use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender}; macro_rules! apply_model { @@ -201,6 +201,16 @@ pub async fn update_listener( EventMessage::Battery(batt) => { apply_battery(&app_weak, batt); } + EventMessage::NoBattery => { + if let Err(err) = app_weak.upgrade_in_event_loop(move |app| { + app.set_battery(BatteryData { + state: "No Battery".to_shared_string(), + percent: 0., + }); + }) { + eprintln!("Failed to upgrade in event loop.\n\t{:?}", err); + } + } } } }