diff --git a/ks_includes/printer.py b/ks_includes/printer.py index 41b65cbb..0af3f463 100644 --- a/ks_includes/printer.py +++ b/ks_includes/printer.py @@ -28,6 +28,7 @@ class Printer: self.cameras = [] self.available_commands = {} self.spoolman = False + self.temp_devices = self.sensors = None def reinit(self, printer_info, data): self.config = data['configfile']['config'] @@ -45,6 +46,7 @@ class Printer: self.store_timeout = GLib.timeout_add_seconds(1, self._update_temp_store) self.tempstore_size = 1200 self.available_commands = {} + self.temp_devices = self.sensors = None for x in self.config.keys(): if x[:8] == "extruder": @@ -201,15 +203,12 @@ class Printer: fans = [] if self.config_section_exists("fan"): fans.append("fan") - fan_types = ["controller_fan", "fan_generic", "heater_fan"] - for fan_type in fan_types: + for fan_type in ["controller_fan", "fan_generic", "heater_fan"]: fans.extend(iter(self.get_config_section_list(f"{fan_type} "))) return fans def get_output_pins(self): - output_pins = [] - output_pins.extend(iter(self.get_config_section_list("output_pin "))) - return output_pins + return self.get_config_section_list("output_pin ") def get_gcode_macros(self): macros = [] @@ -235,9 +234,10 @@ class Printer: return self.get_config_section_list("temperature_sensor") def get_filament_sensors(self): - sensors = list(self.get_config_section_list("filament_switch_sensor ")) - sensors.extend(iter(self.get_config_section_list("filament_motion_sensor "))) - return sensors + if self.sensors is None: + self.sensors = list(self.get_config_section_list("filament_switch_sensor ")) + self.sensors.extend(iter(self.get_config_section_list("filament_motion_sensor "))) + return self.sensors def get_probe(self): probe_types = ["probe", "bltouch", "smart_effector", "dockable_probe"] @@ -372,12 +372,14 @@ class Printer: return temp def get_temp_devices(self): - devices = [ - device - for device in self.tools - if not device.startswith('extruder_stepper') - ] - return devices + self.get_heaters() + self.get_temp_sensors() + self.get_temp_fans() + if self.temp_devices is None: + devices = [ + device + for device in self.tools + if not device.startswith('extruder_stepper') + ] + self.temp_devices = devices + self.get_heaters() + self.get_temp_sensors() + self.get_temp_fans() + return self.temp_devices def get_tools(self): return self.tools diff --git a/panels/base_panel.py b/panels/base_panel.py index d6974eaa..f9c79ea9 100644 --- a/panels/base_panel.py +++ b/panels/base_panel.py @@ -217,20 +217,18 @@ class BasePanel(ScreenPanel): if action != "notify_status_update" or self._screen.printer is None: return - devices = (self._printer.get_temp_devices()) - if devices is not None: - for device in devices: - temp = self._printer.get_dev_stat(device, "temperature") - if temp is not None and device in self.labels: - name = "" - if not (device.startswith("extruder") or device.startswith("heater_bed")): - if self.titlebar_name_type == "full": - name = device.split()[1] if len(device.split()) > 1 else device - name = f'{self.prettify(name)}: ' - elif self.titlebar_name_type == "short": - name = device.split()[1] if len(device.split()) > 1 else device - name = f"{name[:1].upper()}: " - self.labels[device].set_label(f"{name}{int(temp)}°") + for device in self._printer.get_temp_devices(): + temp = self._printer.get_dev_stat(device, "temperature") + if temp is not None and device in self.labels: + name = "" + if not (device.startswith("extruder") or device.startswith("heater_bed")): + if self.titlebar_name_type == "full": + name = device.split()[1] if len(device.split()) > 1 else device + name = f'{self.prettify(name)}: ' + elif self.titlebar_name_type == "short": + name = device.split()[1] if len(device.split()) > 1 else device + name = f"{name[:1].upper()}: " + self.labels[device].set_label(f"{name}{int(temp)}°") with suppress(Exception): if self.current_extruder is not False and data["toolhead"]["extruder"] != self.current_extruder: