printer: change how the tempstore is initialized and updated, to avoid unnecesary retries

This commit is contained in:
alfrix 2024-01-26 22:43:29 -03:00
parent 051a53ec22
commit 3c911ba7c7
4 changed files with 21 additions and 9 deletions

View File

@ -38,12 +38,11 @@ class Printer:
self.fancount = 0
self.ledcount = 0
self.output_pin_count = 0
self.tempstore = {}
if not self.store_timeout:
self.store_timeout = GLib.timeout_add_seconds(1, self._update_temp_store)
self.tempstore = None
self.tempstore_size = 1200
self.available_commands = {}
self.temp_devices = self.sensors = None
self.stop_tempstore_updates()
for x in self.config.keys():
if x[:8] == "extruder":
@ -106,6 +105,12 @@ class Printer:
logging.info(f"# Output pins: {self.output_pin_count}")
logging.info(f"# Leds: {self.ledcount}")
def stop_tempstore_updates(self):
logging.info("Stopping tempstore")
if self.store_timeout is not None:
GLib.source_remove(self.store_timeout)
self.store_timeout = None
def process_update(self, data):
if self.data is None:
return
@ -336,11 +341,10 @@ class Printer:
return 0
def get_temp_store_devices(self):
if self.tempstore is not None:
return list(self.tempstore)
return list(self.tempstore) if self.tempstore is not None else self.tempstore
def device_has_target(self, device):
return "target" in self.devices[device] or (device in self.tempstore and "targets" in self.tempstore[device])
return "target" in self.devices[device]
def get_temp_store(self, device, section=False, results=0):
if device not in self.tempstore:
@ -390,6 +394,8 @@ class Printer:
for _ in range(1, self.tempstore_size - length):
self.tempstore[device][x].insert(0, 0)
logging.info(f"Temp store: {list(self.tempstore)}")
if not self.store_timeout:
self.store_timeout = GLib.timeout_add_seconds(1, self._update_temp_store)
def config_section_exists(self, section):
return section in self.get_config_section_list()

View File

@ -67,10 +67,11 @@ class Panel(MenuPanel):
if self.graph_update is not None:
GLib.source_remove(self.graph_update)
self.graph_update = None
self.graph_retry = 0
return False
def activate(self):
if self._printer.tempstore is None:
self._screen.init_tempstore()
self.update_graph_visibility()
def deactivate(self):

View File

@ -186,6 +186,8 @@ class Panel(ScreenPanel):
self.graph_update = None
def activate(self):
if self._printer.tempstore is None:
self._screen.init_tempstore()
self.update_graph_visibility()
def deactivate(self):

View File

@ -654,6 +654,7 @@ class KlipperScreen(Gtk.Window):
self.show_panel("printer_select", _("Printer Select"), remove_all=True)
def websocket_disconnected(self, msg):
logging.debug("### websocket_disconnected")
self.printer_initializing(msg, remove=True)
self.printer.state = "disconnected"
self.connecting = True
@ -663,6 +664,7 @@ class KlipperScreen(Gtk.Window):
def state_disconnected(self):
logging.debug("### Going to disconnected")
self.printer.stop_tempstore_updates()
self.close_screensaver()
self.initialized = False
self.reinit_count = 0
@ -704,6 +706,7 @@ class KlipperScreen(Gtk.Window):
def state_shutdown(self):
self.close_screensaver()
self.printer.stop_tempstore_updates()
msg = self.printer.get_stat("webhooks", "state_message")
msg = msg if "ready" not in msg else ""
self.printer_initializing(_("Klipper has shutdown") + "\n\n" + msg, remove=True)
@ -977,8 +980,6 @@ class KlipperScreen(Gtk.Window):
extra_items))
if data is False:
return self._init_printer("Error getting printer object data with extra items")
if len(self.printer.get_temp_devices()) > 0:
self.init_tempstore()
self.files.set_gcodes_path()
self.files.refresh_files()
@ -992,6 +993,8 @@ class KlipperScreen(Gtk.Window):
return False
def init_tempstore(self):
if len(self.printer.get_temp_devices()) == 0:
return
tempstore = self.apiclient.send_request("server/temperature_store")
if tempstore and 'result' in tempstore and tempstore['result']:
self.printer.init_temp_store(tempstore['result'])