fix splash_screen reloading and limit klipper reconnects fixes #803

This commit is contained in:
alfrix 2022-11-21 16:32:50 -03:00
parent 484dbd1609
commit 0233327554
3 changed files with 21 additions and 13 deletions

View File

@ -130,6 +130,7 @@ class KlippyWebsocket(threading.Thread):
def on_open(self, *args):
logging.info("Moonraker Websocket Open")
self.connected = True
self._screen.reinit_count = 0
self.reconnect_count = 0
if "on_connect" in self._callback:
GLib.idle_add(self._callback['on_connect'])

View File

@ -86,7 +86,7 @@ class SplashScreenPanel(ScreenPanel):
self.labels['actions'].add(self.labels['restart_system'])
self.labels['actions'].add(self.labels['shutdown'])
self.labels['actions'].add(self.labels['menu'])
if self._screen._ws and not self._screen._ws.connecting:
if self._screen._ws and not self._screen._ws.connecting or self._screen.reinit_count > self._screen.max_retries:
self.labels['actions'].add(self.labels['retry'])
self.labels['actions'].show_all()
@ -141,5 +141,9 @@ class SplashScreenPanel(ScreenPanel):
def retry(self, widget):
self.update_text((_("Connecting to %s") % self._screen.connecting_to_printer))
self._screen._ws.retry()
if self._screen._ws and not self._screen._ws.connecting:
self._screen._ws.retry()
else:
self._screen.reinit_count = 0
self._screen.init_printer()
self.show_restart_buttons()

View File

@ -84,6 +84,7 @@ class KlipperScreen(Gtk.Window):
_ws = None
screensaver_timeout = None
reinit_count = 0
max_retries = 4
def __init__(self, args, version):
self.blanking_time = 600
@ -639,7 +640,7 @@ class KlipperScreen(Gtk.Window):
callback()
def websocket_disconnected(self, msg):
self.printer_initializing(msg)
self.printer_initializing(msg, remove=True)
self.connecting = True
self.connected_printer = None
self.files.reset()
@ -651,7 +652,7 @@ class KlipperScreen(Gtk.Window):
def state_disconnected(self):
logging.debug("### Going to disconnected")
self.close_screensaver()
self.printer_initializing(_("Klipper has disconnected"))
self.printer_initializing(_("Klipper has disconnected"), remove=True)
def state_error(self):
self.close_screensaver()
@ -661,7 +662,7 @@ class KlipperScreen(Gtk.Window):
msg += _("A FIRMWARE_RESTART may fix the issue.") + "\n"
elif "micro-controller" in state:
msg += _("Please recompile and flash the micro-controller.") + "\n"
self.printer_initializing(msg + "\n" + state)
self.printer_initializing(msg + "\n" + state, remove=True)
def state_paused(self):
if "job_status" not in self._cur_panels:
@ -686,7 +687,7 @@ class KlipperScreen(Gtk.Window):
self.close_screensaver()
msg = self.printer.get_stat("webhooks", "state_message")
msg = msg if "ready" not in msg else ""
self.printer_initializing(_("Klipper has shutdown") + "\n\n" + msg)
self.printer_initializing(_("Klipper has shutdown") + "\n\n" + msg, remove=True)
def toggle_macro_shortcut(self, value):
self.base_panel.show_macro_shortcut(value)
@ -781,9 +782,9 @@ class KlipperScreen(Gtk.Window):
logging.info(f"{method}: {params}")
self._ws.send_method(method, params)
def printer_initializing(self, msg):
def printer_initializing(self, msg, remove=False):
self.close_popup_message()
if 'splash_screen' not in self.panels or 'printer_select' not in self._cur_panels:
if 'splash_screen' not in self.panels or remove:
self.show_panel('splash_screen', "splash_screen", None, 2)
self.panels['splash_screen'].update_text(msg)
@ -815,6 +816,8 @@ class KlipperScreen(Gtk.Window):
logging.info("%s is ON", device)
def init_printer(self):
if self.reinit_count > self.max_retries or 'printer_select' in self._cur_panels:
return
state = self.apiclient.get_server_info()
if state is False:
logging.info("Moonraker not connected")
@ -832,11 +835,11 @@ class KlipperScreen(Gtk.Window):
if state['result']['klippy_connected'] is False:
logging.info("Klipper not connected")
self.printer_initializing(
_("Moonraker: connected")
+ f"\n\nKlipper: {state['result']['klippy_state']}\n\n"
+ _("Retry #%s") % self.reinit_count
)
msg = _("Moonraker: connected") + "\n\n"
msg += f"Klipper: {state['result']['klippy_state']}" + "\n\n"
if self.reinit_count <= self.max_retries:
msg += _("Retrying") + f' #{self.reinit_count}'
self.printer_initializing(msg)
GLib.timeout_add_seconds(3, self.init_printer)
return