gui: don't recompute a misleading static forecast after a run ends

On DONE/Stop, the forecast used to revert to show_schedule() seeded
with the *current* temperature - which by then is wherever the brew
ended up (e.g. near the last step's target), so walking the whole
original schedule again from there produced a nonsensical total
("152 min" for a brew that actually took ~250). Now it just leaves the
dynamic view's last frame (the real measured history) up instead.
Recomputing from the current temperature is still correct for a fresh
Load, where no run has happened yet - distinguished via whether
sud_start_time was set before this transition.
This commit is contained in:
2026-06-21 14:37:52 +02:00
parent 746692bad7
commit c27a3b06d4
+17 -3
View File
@@ -783,13 +783,27 @@ class Window(QtWidgets.QMainWindow, Ui_MainWindow):
# fresh for this run.
self.forecast_history = []
elif self.sud_state not in SUD_RUNNING_STATES and self.sud_state != SUD_PAUSED_STATE:
was_running = self.sud_start_time is not None
self.sud_start_time = None
self.sud_paused_total = 0.0
self.sud_pause_started_at = None
# on_plot_timer() only redraws the dynamic forecast while
# sud_start_time is set - revert to the static view now,
# rather than leaving the last dynamic draw frozen.
if self.sud_schedule:
# sud_start_time is set.
if was_running:
# A run just finished or was stopped - leave the
# dynamic view's last frame (the actual measured
# history) up rather than recomputing a "static"
# plan from here, which would walk the *whole*
# original schedule again starting from wherever
# the brew happens to have ended up (e.g. close to
# the last step's target), producing a nonsensical
# total.
pass
elif self.sud_schedule:
# Fresh load (or reconnecting to an already-idle
# server) - no run has happened yet, so the upfront
# plan starting from the current temperature is
# exactly right.
start_theta = self.plot_temp_ist if self.plot_temp_ist else 20.0
self.forecast_plot.show_schedule(self.sud_schedule, start_theta, self.sud_name)