From 4800b56492b9628a6302150f143463bb9b018bec Mon Sep 17 00:00:00 2001 From: alfrix Date: Tue, 8 Aug 2023 21:34:10 -0300 Subject: [PATCH] refactor tempstore initialization fixes #1074 --- ks_includes/printer.py | 10 +++++----- panels/main_menu.py | 23 ++++++----------------- panels/temperature.py | 1 + screen.py | 13 +++++++++++-- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/ks_includes/printer.py b/ks_includes/printer.py index 4f171e01..201c2ba0 100644 --- a/ks_includes/printer.py +++ b/ks_includes/printer.py @@ -330,14 +330,14 @@ class Printer: return True def init_temp_store(self, tempstore): - if not tempstore or 'result' not in tempstore: - return - if self.tempstore and list(self.tempstore) != list(tempstore['result']): + if not tempstore: + logging.debug("Tempstore not ready") + if self.tempstore and list(self.tempstore) != list(tempstore): logging.debug("Tempstore has changed") - self.tempstore = tempstore['result'] + self.tempstore = tempstore self.change_state(self.state) else: - self.tempstore = tempstore['result'] + self.tempstore = tempstore for device in self.tempstore: for x in self.tempstore[device]: length = len(self.tempstore[device][x]) diff --git a/panels/main_menu.py b/panels/main_menu.py index 067dfa1a..df6397dd 100644 --- a/panels/main_menu.py +++ b/panels/main_menu.py @@ -11,7 +11,6 @@ from ks_includes.widgets.keypad import Keypad class Panel(MenuPanel): def __init__(self, screen, title, items=None): super().__init__(screen, title, items) - self.graph_retry_timeout = None self.left_panel = None self.devices = {} self.graph_update = None @@ -20,7 +19,6 @@ class Panel(MenuPanel): self.main_menu = self._gtk.HomogeneousGrid() self.main_menu.set_hexpand(True) self.main_menu.set_vexpand(True) - self.graph_retry = 0 scroll = self._gtk.ScrolledWindow() self.numpad_visible = False @@ -41,18 +39,12 @@ class Panel(MenuPanel): self.content.add(self.main_menu) def update_graph_visibility(self): - if self.left_panel is None or not self._printer.get_temp_store_devices(): - if self._printer.get_temp_store_devices(): - logging.info("Retrying to create left panel") - self._gtk.reset_temp_color() - self.main_menu.attach(self.create_left_panel(), 0, 0, 1, 1) - self.graph_retry += 1 - if self.graph_retry < 5: - if self.graph_retry_timeout is None: - self.graph_retry_timeout = GLib.timeout_add_seconds(5, self.update_graph_visibility) - else: - logging.debug(f"Could not create graph {self.left_panel} {self._printer.get_temp_store_devices()}") - return False + if self.left_panel is None: + logging.info("No left panel") + return + if not self._printer.get_temp_store_devices(): + logging.debug(f"Could not create graph tempstore: {self._printer.get_temp_store_devices()}") + return count = 0 for device in self.devices: visible = self._config.get_config().getboolean(f"graph {self._screen.connected_printer}", @@ -87,9 +79,6 @@ class Panel(MenuPanel): if self.graph_update is not None: GLib.source_remove(self.graph_update) self.graph_update = None - if self.graph_retry_timeout is not None: - GLib.source_remove(self.graph_retry_timeout) - self.graph_retry_timeout = None if self.active_heater is not None: self.hide_numpad() diff --git a/panels/temperature.py b/panels/temperature.py index 8ed60163..1013b15d 100644 --- a/panels/temperature.py +++ b/panels/temperature.py @@ -164,6 +164,7 @@ class Panel(ScreenPanel): def update_graph_visibility(self): if not self._printer.get_temp_store_devices(): + logging.debug(f"Could not create graph tempstore: {self._printer.get_temp_store_devices()}") return count = 0 for device in self.devices: diff --git a/screen.py b/screen.py index 7c65fb14..8f7c4fd3 100755 --- a/screen.py +++ b/screen.py @@ -888,7 +888,8 @@ class KlipperScreen(Gtk.Window): extra_items)) if data is False: return self._init_printer("Error getting printer object data with extra items") - self.init_tempstore() + if len(self.printer.get_tools() + self.printer.get_heaters()) > 0: + self.init_tempstore() self.files.initialize() self.files.refresh_files() @@ -902,7 +903,15 @@ class KlipperScreen(Gtk.Window): return False def init_tempstore(self): - self.printer.init_temp_store(self.apiclient.send_request("server/temperature_store")) + tempstore = self.apiclient.send_request("server/temperature_store") + if tempstore and 'result' in tempstore: + self.printer.init_temp_store(tempstore['result']) + if hasattr(self.panels[self._cur_panels[-1]], "update_graph_visibility"): + self.panels[self._cur_panels[-1]].update_graph_visibility() + else: + logging.error(f'Tempstore not ready: {tempstore} Retrying in 5 seconds') + GLib.timeout_add_seconds(5, self.init_tempstore) + return server_config = self.apiclient.send_request("server/config") if server_config: try: