apply new server settings without needing to restart

This commit is contained in:
dries.k
2022-07-29 18:41:58 +02:00
parent 35f609329f
commit e373536263
3 changed files with 31 additions and 22 deletions

View File

@@ -69,7 +69,8 @@ class GotifyApplication(GotifySession):
class GotifyClient(GotifySession): class GotifyClient(GotifySession):
def __init__(self, url: str, client_token: str): def __init__(self, url: str, client_token: str):
super(GotifyClient, self).__init__(url, client_token) super(GotifyClient, self).__init__(url, client_token)
self.listener = Listener(url, client_token) self.url = url
self.client_token = client_token
""" """
Application Application
@@ -172,6 +173,8 @@ class GotifyClient(GotifySession):
def listen( def listen(
self, self,
url: str,
client_token: str,
opened_callback: Callable[[], None] = None, opened_callback: Callable[[], None] = None,
closed_callback: Callable[[int, str], None] = None, closed_callback: Callable[[int, str], None] = None,
new_message_callback: Callable[[GotifyMessageModel], None] = None, new_message_callback: Callable[[GotifyMessageModel], None] = None,
@@ -180,6 +183,7 @@ class GotifyClient(GotifySession):
def dummy(*args): def dummy(*args):
... ...
self.listener = Listener(url, client_token)
self.listener.opened.connect(lambda: self.opened_callback(opened_callback)) self.listener.opened.connect(lambda: self.opened_callback(opened_callback))
self.listener.closed.connect(closed_callback or dummy) self.listener.closed.connect(closed_callback or dummy)
self.listener.new_message.connect(new_message_callback or dummy) self.listener.new_message.connect(new_message_callback or dummy)
@@ -194,6 +198,9 @@ class GotifyClient(GotifySession):
def reconnect(self): def reconnect(self):
if not self.is_listening(): if not self.is_listening():
self.listener.start() self.listener.start()
def stop_final(self):
self.listener.stop_final()
def stop(self, reset_wait: bool = False): def stop(self, reset_wait: bool = False):
if reset_wait: if reset_wait:

View File

@@ -63,6 +63,14 @@ class Listener(QtCore.QThread):
): ):
self.closed.emit(close_status_code, close_msg) 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): def stop(self):
logger.debug("Listener: stopping.") logger.debug("Listener: stopping.")
self.ws.close() self.ws.close()

View File

@@ -58,10 +58,6 @@ def init_logger(logger: logging.Logger):
class MainApplication(QtWidgets.QApplication): class MainApplication(QtWidgets.QApplication):
def __init__(self, argv: List):
super(MainApplication, self).__init__(argv)
self.shutting_down = False
def init_ui(self): def init_ui(self):
self.gotify_client = gotify.GotifyClient( self.gotify_client = gotify.GotifyClient(
settings.value("Server/url", type=str), settings.value("Server/url", type=str),
@@ -83,6 +79,8 @@ class MainApplication(QtWidgets.QApplication):
self.first_connect = True self.first_connect = True
self.gotify_client.listen( self.gotify_client.listen(
settings.value("Server/url", type=str),
settings.value("Server/client_token", type=str),
new_message_callback=self.new_message_callback, new_message_callback=self.new_message_callback,
opened_callback=self.listener_opened_callback, opened_callback=self.listener_opened_callback,
closed_callback=self.listener_closed_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): def listener_closed_callback(self, close_status_code: int, close_msg: str):
self.main_window.set_connecting() self.main_window.set_connecting()
self.tray.set_icon_error() self.tray.set_icon_error()
if not self.shutting_down: self.gotify_client.increase_wait_time()
self.gotify_client.increase_wait_time() QtCore.QTimer.singleShot(
QtCore.QTimer.singleShot( self.gotify_client.get_wait_time() * 1000, self.gotify_client.reconnect
self.gotify_client.get_wait_time() * 1000, self.gotify_client.reconnect )
)
def reconnect_callback(self): def reconnect_callback(self):
if not self.gotify_client.is_listening(): if not self.gotify_client.is_listening():
@@ -322,18 +319,16 @@ class MainApplication(QtWidgets.QApplication):
settings_dialog.apply_settings() settings_dialog.apply_settings()
if settings_dialog.server_changed: if settings_dialog.server_changed:
mb = QtWidgets.QMessageBox( # Restart the listener
QtWidgets.QMessageBox.Icon.Information, self.gotify_client.stop_final()
"Restart", self.gotify_client.listen(
"Restart to apply server changes", settings.value("Server/url", type=str),
QtWidgets.QMessageBox.StandardButton.Yes settings.value("Server/client_token", type=str),
| QtWidgets.QMessageBox.StandardButton.Cancel, 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( def tray_activated_callback(
self, reason: QtWidgets.QSystemTrayIcon.ActivationReason self, reason: QtWidgets.QSystemTrayIcon.ActivationReason
): ):
@@ -380,8 +375,7 @@ class MainApplication(QtWidgets.QApplication):
self.lock_file.unlock() self.lock_file.unlock()
self.shutting_down = True self.gotify_client.stop_final()
self.gotify_client.stop()
super(MainApplication, self).quit() super(MainApplication, self).quit()