printer: cleanup

This commit is contained in:
alfrix 2022-11-17 21:24:54 -03:00
parent 09f992d3b5
commit 2c30bdeddf
3 changed files with 44 additions and 97 deletions

View File

@ -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

View File

@ -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"]:

View File

@ -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,