From 2c30bdeddf38b6cb3af7da7f776f55f2d457c07f Mon Sep 17 00:00:00 2001 From: alfrix Date: Thu, 17 Nov 2022 21:24:54 -0300 Subject: [PATCH] printer: cleanup --- ks_includes/printer.py | 82 ++++++++++++++---------------------------- panels/temperature.py | 2 +- screen.py | 57 +++++++++-------------------- 3 files changed, 44 insertions(+), 97 deletions(-) diff --git a/ks_includes/printer.py b/ks_includes/printer.py index d86ebeba..3088e2ff 100644 --- a/ks_includes/printer.py +++ b/ks_includes/printer.py @@ -6,68 +6,54 @@ from gi.repository import Gdk, GLib class Printer: - def __init__(self, printer_info, data, state_execute_cb): - self.klipper = {"version": printer_info['software_version']} - self.tempstore = None + def __init__(self, state_cb): self.config = None + self.data = None self.state = "disconnected" - self.state_cb = state_execute_cb - self.power_devices = {} - self.store_timeout = False - self.data = data + self.state_cb = state_cb + self.state_callbacks = None self.devices = {} self.power_devices = {} - self.state_callbacks = { - "disconnected": None, - "error": None, - "paused": None, - "printing": None, - "ready": None, - "startup": None, - "shutdown": None - } self.tools = [] self.extrudercount = 0 self.tempdevcount = 0 self.fancount = 0 self.output_pin_count = 0 + self.store_timeout = None + self.tempstore = {} def reset(self): - GLib.source_remove(self.store_timeout) - self.store_timeout = None + self.config = None + self.data = None self.state = None self.state_cb = None - self.data = None + self.state_callbacks = None self.devices = None self.power_devices = None - self.state_callbacks = None self.tools = None self.extrudercount = None self.tempdevcount = None self.fancount = None - self.config = None - self.klipper = None - self.tempstore = None self.output_pin_count = None + self.store_timeout = None + self.tempstore = None + if self.store_timeout is not None: + GLib.source_remove(self.store_timeout) + self.store_timeout = None def reinit(self, printer_info, data): self.config = data['configfile']['config'] + self.data = data + self.devices = {} + self.tools = [] self.extrudercount = 0 self.tempdevcount = 0 self.fancount = 0 self.output_pin_count = 0 - self.tools = [] - self.devices = {} - self.data = data - self.klipper = {} self.tempstore = {} if not self.store_timeout: self.store_timeout = GLib.timeout_add_seconds(1, self._update_temp_store) - self.klipper = { - "version": printer_info['software_version'] - } - for x in self.config.keys(): if x[:8] == "extruder": self.tools.append(x) @@ -99,10 +85,8 @@ class Printer: name = x.split()[1] if len(x.split()) > 1 else x if not name.startswith("_"): self.fancount += 1 - if x.startswith('output_pin '): - # Support for hiding devices by name - if not x.split()[1].startswith("_"): - self.output_pin_count += 1 + if x.startswith('output_pin ') and not x.split()[1].startswith("_"): + self.output_pin_count += 1 if x.startswith('bed_mesh '): r = self.config[x] r['x_count'] = int(r['x_count']) @@ -114,7 +98,7 @@ class Printer: r['points'] = [[float(j.strip()) for j in i.split(",")] for i in r['points'].strip().split("\n")] self.process_update(data) - logging.info(f"Klipper version: {self.klipper['version']}") + logging.info(f"Klipper version: {printer_info['software_version']}") logging.info(f"# Extruders: {self.extrudercount}") logging.info(f"# Temperature devices: {self.tempdevcount}") logging.info(f"# Fans: {self.fancount}") @@ -138,12 +122,12 @@ class Printer: def evaluate_state(self): # webhooks states: startup, ready, shutdown, error - if self.data['webhooks']['state'] == "ready": - if self.data['print_stats']: # standby, printing, paused, error, complete - if self.data['print_stats']['state'] == 'paused' or self.data.get('pause_resume').get('is_paused'): - return "paused" - if self.data['print_stats']['state'] == 'printing': - return "printing" + # print_stats: standby, printing, paused, error, complete + if self.data['webhooks']['state'] == "ready" and self.data['print_stats']: + if self.data['print_stats']['state'] == 'paused' or self.data.get('pause_resume').get('is_paused'): + return "paused" + if self.data['print_stats']['state'] == 'printing': + return "printing" return self.data['webhooks']['state'] def process_status_update(self): @@ -246,9 +230,6 @@ class Printer: return data - def get_klipper_version(self): - return self.klipper['version'] - def get_power_devices(self): return list(self.power_devices) @@ -264,9 +245,6 @@ class Printer: return self.data[stat][substat] if substat in self.data[stat] else {} return self.data[stat] - def get_state(self): - return self.state - def set_dev_temps(self, dev, temp, target=None, power=None): if dev in self.devices: self.devices[dev]['temperature'] = temp @@ -306,9 +284,6 @@ class Printer: return self.config[pin]["value"] return 0 - def get_extruder_count(self): - return self.extrudercount - def get_temp_store_devices(self): if self.tempstore is not None: return list(self.tempstore) @@ -356,11 +331,6 @@ class Printer: def config_section_exists(self, section): return section in self.get_config_section_list() - def set_callbacks(self, callbacks): - for name, cb in callbacks.items(): - if name in list(self.state_callbacks): - self.state_callbacks[name] = cb - def set_dev_stat(self, dev, stat, value): if dev not in self.devices: return diff --git a/panels/temperature.py b/panels/temperature.py index ede93dc6..53868f55 100644 --- a/panels/temperature.py +++ b/panels/temperature.py @@ -34,7 +34,7 @@ class TemperaturePanel(ScreenPanel): self.grid.attach(self.create_left_panel(), 0, 0, 1, 1) # When printing start in temp_delta mode and only select tools - state = self._printer.get_state() + state = self._printer.state logging.info(state) selection = [] if state not in ["printing", "paused"]: diff --git a/screen.py b/screen.py index 990dddfa..70ce52f3 100644 --- a/screen.py +++ b/screen.py @@ -160,18 +160,8 @@ class KlipperScreen(Gtk.Window): } self.connecting_to_printer = name - - # Cleanup - if self.files is not None: - self.files.reset() - self.files = None - if self.printer is not None: - self.printer.reset() - self.printer = None - for printer in self._config.get_printers(): pname = list(printer)[0] - if pname != name: continue data = printer[pname] @@ -183,26 +173,15 @@ class KlipperScreen(Gtk.Window): logging.info(f"Connecting to printer: {name}") self.apiclient = KlippyRest(data["moonraker_host"], data["moonraker_port"], data["moonraker_api_key"]) - - self.printer = Printer({ - "software_version": "Unknown" - }, { - 'configfile': { - 'config': {} - }, - 'print_stats': { - 'state': 'disconnected' - }, - 'virtual_sdcard': { - 'is_active': False - } - }, self.state_execute) - - self._remove_all_panels() - self.base_panel.show_printer_select(True) - self.printer_initializing(_("Connecting to %s") % name) - - self.printer.set_callbacks({ + # Cleanup + if self.files is not None: + self.files.reset() + self.files = None + if self.printer is not None: + self.printer.reset() + self.printer = None + self.printer = Printer(self.state_execute) + self.printer.state_callbacks = { "disconnected": self.state_disconnected, "error": self.state_error, "paused": self.state_paused, @@ -210,7 +189,10 @@ class KlipperScreen(Gtk.Window): "ready": self.state_ready, "startup": self.state_startup, "shutdown": self.state_shutdown - }) + } + self._remove_all_panels() + self.base_panel.show_printer_select(True) + self.printer_initializing(_("Connecting to %s") % name) self._ws = KlippyWebsocket(self, { @@ -225,7 +207,6 @@ class KlipperScreen(Gtk.Window): self.files = KlippyFiles(self) self._ws.initial_connect() self.connecting = False - self.connected_printer = name self.base_panel.set_ks_printer_cfg(name) logging.debug(f"Connected to printer: {name}") @@ -487,9 +468,6 @@ class KlipperScreen(Gtk.Window): Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION ) - def is_printing(self): - return self.printer.get_state() == "printing" - def is_updating(self): return self.updating @@ -748,9 +726,8 @@ class KlipperScreen(Gtk.Window): self.printer.change_state(self.printer.state) def _websocket_callback(self, action, data): - if self.connecting is True: + if self.connecting: return - if action == "notify_klippy_disconnected": self.printer.change_state("disconnected") return @@ -758,7 +735,7 @@ class KlipperScreen(Gtk.Window): self.printer.change_state("shutdown") elif action == "notify_klippy_ready": self.printer.change_state("ready") - elif action == "notify_status_update" and self.printer.get_state() != "shutdown": + elif action == "notify_status_update" and self.printer.state != "shutdown": self.printer.process_update(data) elif action == "notify_filelist_changed": if self.files is not None: @@ -771,13 +748,13 @@ class KlipperScreen(Gtk.Window): logging.debug("Power status changed: %s", data) self.printer.process_power_update(data) self.panels['splash_screen'].check_power_status() - elif self.printer.get_state() not in ["error", "shutdown"] and action == "notify_gcode_response": + elif action == "notify_gcode_response" and self.printer.state not in ["error", "shutdown"]: if not (data.startswith("B:") or data.startswith("T:")): if data.startswith("echo: "): self.show_popup_message(data[6:], 1) elif data.startswith("!! "): self.show_popup_message(data[3:], 3) - if "SAVE_CONFIG" in data and self.printer.get_state() == "ready": + if "SAVE_CONFIG" in data and self.printer.state == "ready": script = {"script": "SAVE_CONFIG"} self._confirm_send_action( None,