From 0f0c6f9b6e00cd800b0d6731e627f8e5bb9d1914 Mon Sep 17 00:00:00 2001 From: alfrix Date: Wed, 14 Dec 2022 11:31:40 -0300 Subject: [PATCH] always maintain printers data, should avoid a bunch of issues --- ks_includes/printer.py | 33 +++++---------------- screen.py | 66 ++++++++++++++++++++---------------------- 2 files changed, 38 insertions(+), 61 deletions(-) diff --git a/ks_includes/printer.py b/ks_includes/printer.py index f8981ed4..280872e8 100644 --- a/ks_includes/printer.py +++ b/ks_includes/printer.py @@ -7,12 +7,12 @@ from gi.repository import GLib class Printer: - def __init__(self, state_cb): - self.config = None - self.data = None + def __init__(self, state_cb, state_callbacks, busy_cb): + self.config = {} + self.data = {} self.state = "disconnected" self.state_cb = state_cb - self.state_callbacks = None + self.state_callbacks = state_callbacks self.devices = {} self.power_devices = {} self.tools = [] @@ -22,28 +22,9 @@ class Printer: self.output_pin_count = 0 self.store_timeout = None self.tempstore = {} - self.busy_cb = None - self.busy = None - self.temperature_store_size = None - - def reset(self): - self.config = None - self.data = None - self.state = None - self.state_cb = None - self.state_callbacks = None - self.devices = None - self.power_devices = None - self.tools = None - self.extrudercount = None - self.tempdevcount = None - self.fancount = None - self.output_pin_count = None - self.store_timeout = None - self.tempstore = None - self.busy_cb = None - self.busy = None - self.temperature_store_size = None + self.busy_cb = busy_cb + self.busy = False + self.tempstore_size = 1200 def reinit(self, printer_info, data): self.config = data['configfile']['config'] diff --git a/screen.py b/screen.py index ef81fe95..8e9b4089 100755 --- a/screen.py +++ b/screen.py @@ -82,7 +82,7 @@ class KlipperScreen(Gtk.Window): panels = {} popup_message = None screensaver = None - printer = None + printers = printer = None subscriptions = [] updating = False _ws = None @@ -151,13 +151,24 @@ class KlipperScreen(Gtk.Window): self.initial_connection() def initial_connection(self): - printers = self._config.get_printers() + self.printers = self._config.get_printers() + state_callbacks = { + "disconnected": self.state_disconnected, + "error": self.state_error, + "paused": self.state_paused, + "printing": self.state_printing, + "ready": self.state_ready, + "startup": self.state_startup, + "shutdown": self.state_shutdown + } + for printer in self.printers: + printer["data"] = Printer(state_execute, state_callbacks, self.process_busy_state) default_printer = self._config.get_main_config().get('default_printer') logging.debug(f"Default printer: {default_printer}") - if [True for p in printers if default_printer in p]: + if [True for p in self.printers if default_printer in p]: self.connect_printer(default_printer) - elif len(printers) == 1: - pname = list(printers[0])[0] + elif len(self.printers) == 1: + pname = list(self.printers[0])[0] self.connect_printer(pname) else: self.base_panel.show_printer_select(True) @@ -168,40 +179,27 @@ class KlipperScreen(Gtk.Window): if self._ws is not None and self._ws.connected: self._ws.close() self.connected_printer = None + self.printer.state = "disconnected" if self.files: self.files.reset() self.files = None - if self.printer: - self.printer.reset() - self.printer = None + self.connecting = True self.initialized = False - data = { - "moonraker_host": "127.0.0.1", - "moonraker_port": "7125", - "moonraker_api_key": False - } logging.info(f"Connecting to printer: {name}") - for printer in self._config.get_printers(): - pname = list(printer)[0] - if pname != name: - continue - data = printer[pname] - break + for printer in self.printers: + if name == list(printer)[0]: + ind = self.printers.index(printer) + break + + self.printer = self.printers[ind]["data"] + self.apiclient = KlippyRest( + self.printers[ind][name]["moonraker_host"], + self.printers[ind][name]["moonraker_port"], + self.printers[ind][name]["moonraker_api_key"], + ) - self.apiclient = KlippyRest(data["moonraker_host"], data["moonraker_port"], data["moonraker_api_key"]) - self.printer = Printer(state_execute) - self.printer.state_callbacks = { - "disconnected": self.state_disconnected, - "error": self.state_error, - "paused": self.state_paused, - "printing": self.state_printing, - "ready": self.state_ready, - "startup": self.state_startup, - "shutdown": self.state_shutdown - } - self.printer.busy_cb = self.process_busy_state self.printer_initializing(_("Connecting to %s") % name, remove=True) self._ws = KlippyWebsocket(self, @@ -210,8 +208,8 @@ class KlipperScreen(Gtk.Window): "on_message": self._websocket_callback, "on_close": self.websocket_disconnected }, - data["moonraker_host"], - data["moonraker_port"] + self.printers[ind][name]["moonraker_host"], + self.printers[ind][name]["moonraker_port"], ) self.files = KlippyFiles(self) @@ -627,8 +625,6 @@ class KlipperScreen(Gtk.Window): self.connected_printer = None self.files.reset() self.files = None - self.printer.reset() - self.printer = None self.initialized = False self.connect_printer(self.connecting_to_printer)