From 8bb402416a028d3763bf88f3e25f9a1e5d3094de Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sun, 21 Jun 2026 11:39:40 +0200 Subject: [PATCH] gui: show remaining hold duration in the status line The status bar now appends "(MM:SS remaining)" to a hold step's text, kept live by recomputing it on every HoldRemaining message (not just when the step itself changes) - tasks/sud.py already sent this, the GUI just wasn't tracking/displaying it. --- client/brewpi_gui.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/client/brewpi_gui.py b/client/brewpi_gui.py index 1a48e74..ec4bf8e 100755 --- a/client/brewpi_gui.py +++ b/client/brewpi_gui.py @@ -269,6 +269,8 @@ class Window(QtWidgets.QMainWindow, Ui_MainWindow): self.sud_name = '' self.sud_schedule = [] self.sud_step_index = None + self.sud_step_descr = None + self.sud_step_type = None self.sud_hold_remaining = 0.0 # [(t_min, theta), ...] actually measured since the current run # started - the "already happened" part of the dynamic forecast. @@ -462,6 +464,8 @@ class Window(QtWidgets.QMainWindow, Ui_MainWindow): self.sud_name = '' self.sud_schedule = [] self.sud_step_index = None + self.sud_step_descr = None + self.sud_step_type = None self.sud_hold_remaining = 0.0 self.forecast_history = [] self.set_sud_cooling(False) @@ -732,17 +736,26 @@ class Window(QtWidgets.QMainWindow, Ui_MainWindow): self.sud_user_message = msg['UserMessage'] elif "Step" in key: step = msg['Step'] - descr = step.get('Descr') - if descr: - self.statusBar().showMessage("Step {}: {}".format(step.get('Index'), descr)) - else: - self.statusBar().clearMessage() self.sud_step_index = step.get('Index') + self.sud_step_descr = step.get('Descr') + self.sud_step_type = step.get('Type') self.set_sud_cooling(step.get('Cooling', False)) + self.update_status_step_label() elif "HoldRemaining" in key: self.sud_hold_remaining = msg['HoldRemaining'] + self.update_status_step_label() self.update_sud_actions() + def update_status_step_label(self): + if not self.sud_step_descr: + self.statusBar().clearMessage() + return + text = "Step {}: {}".format(self.sud_step_index, self.sud_step_descr) + if self.sud_step_type == 'hold': + remaining = max(self.sud_hold_remaining, 0.0) + text += " ({:.0f}:{:02.0f} remaining)".format(remaining // 60, remaining % 60) + self.statusBar().showMessage(text) + def update_sud_forecast(self, doc): try: name, _, schedule, _, _ = Sud._parse_data(doc)