From e008298187c3dc57f37e9511763e9e35d7dca80b Mon Sep 17 00:00:00 2001 From: Serguey Parkhomovsky Date: Sat, 21 Mar 2026 17:33:46 -0700 Subject: Separate some fields into prusa and bambu structs --- src/lib.rs | 58 ++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs index ce2d40a..b704849 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -19,6 +19,22 @@ pub trait UpdateFrom { fn update_from(&mut self, source: &T); } +#[derive(Debug, Default, Serialize, Clone)] +pub struct BambuPrinterState { + pub layer_num: u32, + pub total_layer_num: u32, + pub print_speed: Option, +} + +#[derive(Debug, Default, Serialize, Clone)] +pub struct PrusaPrinterState { + pub flow: u32, + pub speed: u32, + pub fan_hotend: u32, + pub fan_print: u32, + pub time_printing: u32, +} + #[derive(Debug, Default, Serialize, Clone)] pub struct PrinterState { pub status: PrintStatus, @@ -26,16 +42,10 @@ pub struct PrinterState { pub target_bed_temp: f32, pub nozzle_temp: f32, pub target_nozzle_temp: f32, - pub flow: u32, - pub speed: u32, - pub fan_hotend: u32, - pub fan_print: u32, pub progress: f32, pub time_remaining: u32, - pub time_printing: u32, - pub layer_num: u32, - pub total_layer_num: u32, - pub print_speed: Option, + pub prusa: Option, + pub bambu: Option, } #[derive(Debug, Deserialize)] @@ -105,14 +115,16 @@ impl UpdateFrom for PrinterState { self.target_bed_temp = p.target_bed; self.nozzle_temp = p.temp_nozzle; self.target_nozzle_temp = p.target_nozzle; - self.flow = p.flow; - self.speed = p.speed; - self.fan_hotend = p.fan_hotend; - self.fan_print = p.fan_print; + self.prusa = Some(PrusaPrinterState { + flow: p.flow, + speed: p.speed, + fan_hotend: p.fan_hotend, + fan_print: p.fan_print, + time_printing: status.job.as_ref().map_or(0, |j| j.time_printing), + }); if let Some(job) = &status.job { self.progress = job.progress; self.time_remaining = job.time_remaining; - self.time_printing = job.time_printing; } } } @@ -155,15 +167,21 @@ impl UpdateFrom for PrinterState { self.progress = v as f32; } if let Some(v) = print.mc_remaining_time { - self.time_remaining = v; - } - if let Some(v) = print.layer_num { - self.layer_num = v; + // Bambu remaining time is in minutes + self.time_remaining = v * 60; } - if let Some(v) = print.total_layer_num { - self.total_layer_num = v; + if print.layer_num.is_some() || print.total_layer_num.is_some() || print.print_speed.is_some() { + let bambu = self.bambu.get_or_insert_with(BambuPrinterState::default); + if let Some(v) = print.layer_num { + bambu.layer_num = v; + } + if let Some(v) = print.total_layer_num { + bambu.total_layer_num = v; + } + if print.print_speed.is_some() { + bambu.print_speed = print.print_speed.clone(); + } } - self.print_speed = print.print_speed.clone(); if let Some(gcode_state) = &print.gcode_state { self.status = match gcode_state { BambuState::Prepare => PrintStatus::Prepare, -- cgit v1.2.3