From e3735362637f5284e7c342accfa22893792dc73e Mon Sep 17 00:00:00 2001 From: "dries.k" Date: Fri, 29 Jul 2022 18:41:58 +0200 Subject: [PATCH] apply new server settings without needing to restart --- gotify_tray/gotify/api.py | 9 +++++++- gotify_tray/gotify/listener.py | 8 +++++++ gotify_tray/gui/MainApplication.py | 36 +++++++++++++----------------- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/gotify_tray/gotify/api.py b/gotify_tray/gotify/api.py index c7b53f2..ee7c8dc 100644 --- a/gotify_tray/gotify/api.py +++ b/gotify_tray/gotify/api.py @@ -69,7 +69,8 @@ class GotifyApplication(GotifySession): class GotifyClient(GotifySession): def __init__(self, url: str, client_token: str): super(GotifyClient, self).__init__(url, client_token) - self.listener = Listener(url, client_token) + self.url = url + self.client_token = client_token """ Application @@ -172,6 +173,8 @@ class GotifyClient(GotifySession): def listen( self, + url: str, + client_token: str, opened_callback: Callable[[], None] = None, closed_callback: Callable[[int, str], None] = None, new_message_callback: Callable[[GotifyMessageModel], None] = None, @@ -180,6 +183,7 @@ class GotifyClient(GotifySession): def dummy(*args): ... + self.listener = Listener(url, client_token) self.listener.opened.connect(lambda: self.opened_callback(opened_callback)) self.listener.closed.connect(closed_callback or dummy) self.listener.new_message.connect(new_message_callback or dummy) @@ -194,6 +198,9 @@ class GotifyClient(GotifySession): def reconnect(self): if not self.is_listening(): self.listener.start() + + def stop_final(self): + self.listener.stop_final() def stop(self, reset_wait: bool = False): if reset_wait: diff --git a/gotify_tray/gotify/listener.py b/gotify_tray/gotify/listener.py index 817e665..f18d1a5 100644 --- a/gotify_tray/gotify/listener.py +++ b/gotify_tray/gotify/listener.py @@ -63,6 +63,14 @@ class Listener(QtCore.QThread): ): self.closed.emit(close_status_code, close_msg) + def stop_final(self): + def dummy(*args): + ... + + self.ws.on_close = dummy + self.ws.close() + self.running = False + def stop(self): logger.debug("Listener: stopping.") self.ws.close() diff --git a/gotify_tray/gui/MainApplication.py b/gotify_tray/gui/MainApplication.py index d8a626b..2591281 100644 --- a/gotify_tray/gui/MainApplication.py +++ b/gotify_tray/gui/MainApplication.py @@ -58,10 +58,6 @@ def init_logger(logger: logging.Logger): class MainApplication(QtWidgets.QApplication): - def __init__(self, argv: List): - super(MainApplication, self).__init__(argv) - self.shutting_down = False - def init_ui(self): self.gotify_client = gotify.GotifyClient( settings.value("Server/url", type=str), @@ -83,6 +79,8 @@ class MainApplication(QtWidgets.QApplication): self.first_connect = True self.gotify_client.listen( + settings.value("Server/url", type=str), + settings.value("Server/client_token", type=str), new_message_callback=self.new_message_callback, opened_callback=self.listener_opened_callback, closed_callback=self.listener_closed_callback, @@ -162,11 +160,10 @@ class MainApplication(QtWidgets.QApplication): def listener_closed_callback(self, close_status_code: int, close_msg: str): self.main_window.set_connecting() self.tray.set_icon_error() - if not self.shutting_down: - self.gotify_client.increase_wait_time() - QtCore.QTimer.singleShot( - self.gotify_client.get_wait_time() * 1000, self.gotify_client.reconnect - ) + self.gotify_client.increase_wait_time() + QtCore.QTimer.singleShot( + self.gotify_client.get_wait_time() * 1000, self.gotify_client.reconnect + ) def reconnect_callback(self): if not self.gotify_client.is_listening(): @@ -322,18 +319,16 @@ class MainApplication(QtWidgets.QApplication): settings_dialog.apply_settings() if settings_dialog.server_changed: - mb = QtWidgets.QMessageBox( - QtWidgets.QMessageBox.Icon.Information, - "Restart", - "Restart to apply server changes", - QtWidgets.QMessageBox.StandardButton.Yes - | QtWidgets.QMessageBox.StandardButton.Cancel, + # Restart the listener + self.gotify_client.stop_final() + self.gotify_client.listen( + settings.value("Server/url", type=str), + settings.value("Server/client_token", type=str), + new_message_callback=self.new_message_callback, + opened_callback=self.listener_opened_callback, + closed_callback=self.listener_closed_callback, ) - r = mb.exec() - if r == QtWidgets.QMessageBox.StandardButton.Yes: - self.quit() - def tray_activated_callback( self, reason: QtWidgets.QSystemTrayIcon.ActivationReason ): @@ -380,8 +375,7 @@ class MainApplication(QtWidgets.QApplication): self.lock_file.unlock() - self.shutting_down = True - self.gotify_client.stop() + self.gotify_client.stop_final() super(MainApplication, self).quit()