heatergraph: fix sometimes not reinitializing correctly
This commit is contained in:
parent
b98bcf857c
commit
3ea10b5404
@ -364,6 +364,9 @@ class Printer:
|
||||
temp[section] = self.tempstore[device][section][-results:]
|
||||
return temp
|
||||
|
||||
def get_tempstore_size(self):
|
||||
return self.tempstore_size
|
||||
|
||||
def get_temp_devices(self):
|
||||
if self.temp_devices is None:
|
||||
devices = [
|
||||
@ -381,7 +384,7 @@ class Printer:
|
||||
return self.tools.index(tool)
|
||||
|
||||
def init_temp_store(self, tempstore):
|
||||
if self.tempstore and list(self.tempstore) != list(tempstore):
|
||||
if self.tempstore and set(self.tempstore) != set(tempstore):
|
||||
logging.debug("Tempstore has changed")
|
||||
self.tempstore = tempstore
|
||||
self.change_state(self.state)
|
||||
|
@ -10,14 +10,14 @@ from cairo import Context as cairoContext
|
||||
|
||||
|
||||
class HeaterGraph(Gtk.DrawingArea):
|
||||
def __init__(self, printer, font_size):
|
||||
def __init__(self, screen, printer, font_size):
|
||||
super().__init__()
|
||||
self.set_hexpand(True)
|
||||
self.set_vexpand(True)
|
||||
self.get_style_context().add_class('heatergraph')
|
||||
self._screen = screen
|
||||
self.printer = printer
|
||||
self.store = {}
|
||||
self.max_length = 0
|
||||
self.connect('draw', self.draw_graph)
|
||||
self.add_events(Gdk.EventMask.TOUCH_MASK)
|
||||
self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
|
||||
@ -26,15 +26,10 @@ class HeaterGraph(Gtk.DrawingArea):
|
||||
self.font_size = round(font_size * 0.75)
|
||||
|
||||
def add_object(self, name, ev_type, rgb=None, dashed=False, fill=False):
|
||||
if rgb is None:
|
||||
rgb = [0, 0, 0]
|
||||
if name not in self.store:
|
||||
self.store.update({name: {"show": True}})
|
||||
self.store[name].update({ev_type: {
|
||||
"dashed": dashed,
|
||||
"fill": fill,
|
||||
"rgb": rgb
|
||||
}})
|
||||
rgb = [0, 0, 0] if rgb is None else rgb
|
||||
self.store.update(
|
||||
{name: {"show": True, ev_type: {"dashed": dashed, "fill": fill, "rgb": rgb}}}
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def event_cb(da, ev):
|
||||
@ -43,15 +38,6 @@ class HeaterGraph(Gtk.DrawingArea):
|
||||
y = ev.y
|
||||
logging.info(f"Graph area: {x} {y}")
|
||||
|
||||
def get_max_length(self):
|
||||
try:
|
||||
return min(len(self.printer.get_temp_store(name, "temperatures"))
|
||||
for name in self.store if "temperatures" in self.store[name]
|
||||
and self.printer.get_temp_store(name, "temperatures"))
|
||||
except ValueError:
|
||||
logging.debug(self.printer.get_temp_devices())
|
||||
return 0
|
||||
|
||||
def get_max_num(self, data_points=0):
|
||||
mnum = [0]
|
||||
for device in self.store:
|
||||
@ -65,7 +51,10 @@ class HeaterGraph(Gtk.DrawingArea):
|
||||
return max(mnum)
|
||||
|
||||
def draw_graph(self, da: Gtk.DrawingArea, ctx: cairoContext):
|
||||
|
||||
if not self.printer.tempstore:
|
||||
logging.info("Tempstore not initialized!")
|
||||
self._screen.init_tempstore()
|
||||
return
|
||||
x = round(self.font_size * 2.75)
|
||||
y = 10
|
||||
width = da.get_allocated_width() - 15
|
||||
@ -78,9 +67,8 @@ class HeaterGraph(Gtk.DrawingArea):
|
||||
|
||||
ctx.rectangle(x, y, width - x, height - y)
|
||||
|
||||
self.max_length = self.get_max_length()
|
||||
graph_width = gsize[1][0] - gsize[0][0]
|
||||
points_per_pixel = self.max_length / graph_width
|
||||
points_per_pixel = self.printer.get_tempstore_size() / graph_width
|
||||
data_points = int(round(graph_width * points_per_pixel, 0))
|
||||
max_num = math.ceil(self.get_max_num(data_points) * 1.1 / 10) * 10
|
||||
if points_per_pixel == 0:
|
||||
@ -170,7 +158,7 @@ class HeaterGraph(Gtk.DrawingArea):
|
||||
|
||||
ctx.show_text(f"{now - datetime.timedelta(minutes=2) * i:%H:%M}")
|
||||
ctx.stroke()
|
||||
i += 1 + self.max_length // 601
|
||||
i += 1 + self.printer.get_tempstore_size() // 601
|
||||
|
||||
def is_showing(self, device):
|
||||
return False if device not in self.store else self.store[device]['show']
|
||||
|
@ -40,9 +40,6 @@ class Panel(MenuPanel):
|
||||
if self.left_panel is None:
|
||||
logging.info("No left panel")
|
||||
return
|
||||
if not self._printer.get_temp_store_devices():
|
||||
logging.debug(f"Could not create graph tempstore: {self._printer.get_temp_store_devices()}")
|
||||
return
|
||||
count = 0
|
||||
for device in self.devices:
|
||||
visible = self._config.get_config().getboolean(f"graph {self._screen.connected_printer}",
|
||||
@ -224,7 +221,7 @@ class Panel(MenuPanel):
|
||||
self.labels['devices'].attach(name, 0, 0, 1, 1)
|
||||
self.labels['devices'].attach(temp, 1, 0, 1, 1)
|
||||
|
||||
self.labels['da'] = HeaterGraph(self._printer, self._gtk.font_size)
|
||||
self.labels['da'] = HeaterGraph(self._screen, self._printer, self._gtk.font_size)
|
||||
|
||||
scroll = self._gtk.ScrolledWindow(steppers=False)
|
||||
scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
|
||||
|
@ -157,9 +157,6 @@ class Panel(ScreenPanel):
|
||||
logging.info(f"Setting {heater} to {target}")
|
||||
|
||||
def update_graph_visibility(self):
|
||||
if not self._printer.get_temp_store_devices():
|
||||
logging.debug(f"Could not create graph tempstore: {self._printer.get_temp_store_devices()}")
|
||||
return
|
||||
count = 0
|
||||
for device in self.devices:
|
||||
visible = self._config.get_config().getboolean(f"graph {self._screen.connected_printer}",
|
||||
@ -438,7 +435,7 @@ class Panel(ScreenPanel):
|
||||
self.labels['devices'].attach(name, 0, 0, 1, 1)
|
||||
self.labels['devices'].attach(temp, 1, 0, 1, 1)
|
||||
|
||||
self.labels['da'] = HeaterGraph(self._printer, self._gtk.font_size)
|
||||
self.labels['da'] = HeaterGraph(self._screen, self._printer, self._gtk.font_size)
|
||||
|
||||
scroll = self._gtk.ScrolledWindow(steppers=False)
|
||||
scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
|
||||
|
@ -1010,6 +1010,9 @@ class KlipperScreen(Gtk.Window):
|
||||
logging.error(f'Tempstore not ready: {tempstore} Retrying in 5 seconds')
|
||||
GLib.timeout_add_seconds(5, self.init_tempstore)
|
||||
return
|
||||
if set(self.printer.tempstore) != set(self.printer.get_temp_devices()):
|
||||
GLib.timeout_add_seconds(5, self.init_tempstore)
|
||||
return
|
||||
server_config = self.apiclient.send_request("server/config")
|
||||
if server_config:
|
||||
try:
|
||||
|
Loading…
x
Reference in New Issue
Block a user