summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs58
1 files changed, 38 insertions, 20 deletions
diff --git a/src/lib.rs b/src/lib.rs
index ce2d40a..b704849 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -20,22 +20,32 @@ pub trait UpdateFrom<T> {
}
#[derive(Debug, Default, Serialize, Clone)]
+pub struct BambuPrinterState {
+ pub layer_num: u32,
+ pub total_layer_num: u32,
+ pub print_speed: Option<String>,
+}
+
+#[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,
pub bed_temp: f32,
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<String>,
+ pub prusa: Option<PrusaPrinterState>,
+ pub bambu: Option<BambuPrinterState>,
}
#[derive(Debug, Deserialize)]
@@ -105,14 +115,16 @@ impl UpdateFrom<PrusaStatus> 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<BambuStatus> 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,