remove websocket-client dependency in favor of QWebSocket

This commit is contained in:
dries.k
2023-08-05 16:36:12 +02:00
parent 6b5434978b
commit db8bfc0f44
5 changed files with 94 additions and 126 deletions

View File

@@ -1,8 +1,9 @@
import logging
from typing import Callable
import requests
from PyQt6 import QtCore
from .listener import Listener
from .models import (
GotifyApplicationModel,
@@ -17,8 +18,9 @@ from .models import (
logger = logging.getLogger("gotify-tray")
class GotifySession(object):
class GotifySession(QtCore.QObject):
def __init__(self, url: str, token: str):
super(GotifySession, self).__init__()
self.session = requests.Session()
self.update_auth(url.rstrip("/"), token)
@@ -46,9 +48,6 @@ class GotifySession(object):
class GotifyApplication(GotifySession):
def __init__(self, url: str, application_token: str):
super(GotifyApplication, self).__init__(url, application_token)
def push(
self, title: str = "", message: str = "", priority: int = 0, extras: dict | None = None
) -> GotifyMessageModel | GotifyErrorModel:
@@ -72,6 +71,23 @@ class GotifyApplication(GotifySession):
class GotifyClient(GotifySession):
new_message = QtCore.pyqtSignal(GotifyMessageModel)
opened = QtCore.pyqtSignal()
closed = QtCore.pyqtSignal()
def __init__(self, url: str, client_token: str):
self.listener = Listener(url, client_token)
super(GotifyClient, self).__init__(url, client_token)
self.listener.opened.connect(self.opened.emit)
self.listener.closed.connect(self.closed.emit)
self.listener.new_message.connect(self.new_message.emit)
def update_auth(self, url: str | None = None, token: str | None = None):
super().update_auth(url, token)
self.listener.update_auth(url, token)
"""
Application
@@ -180,48 +196,26 @@ class GotifyClient(GotifySession):
response = self._delete(f"/message/{message_id}")
return None if response.ok else GotifyErrorModel(response)
def listen(
self,
opened_callback: (Callable[[], None]) | None = None,
closed_callback: Callable[[int, str], None] | None = None,
new_message_callback: Callable[[GotifyMessageModel], None] | None = None,
error_callback: Callable[[Exception], None] | None = None,
):
def dummy(*args):
...
self.listener = Listener(self.url, self.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)
self.listener.error.connect(error_callback or dummy)
def listen(self):
self.listener.start()
def opened_callback(self, user_callback: Callable[[], None] | None = None):
self.reset_wait_time()
if user_callback:
user_callback()
def reconnect(self):
if not self.is_listening():
self.listener.start()
self.listener.reconnect()
def stop_final(self):
self.listener.stop_final()
def quit(self):
"""Close the listener and disconnect from the closed signal so it doesn't get reopened
"""
try:
self.listener.closed.disconnect()
except TypeError:
logger.error(f"listener.closed was already disconnected.")
self.listener.close()
def stop(self, reset_wait: bool = False):
if reset_wait:
self.reset_wait_time()
self.listener.stop()
def stop(self):
self.listener.close()
def is_listening(self) -> bool:
return self.listener.running
def increase_wait_time(self):
self.listener.increase_wait_time()
def get_wait_time(self) -> int:
return self.listener.wait_time
return self.listener.is_connected()
def reset_wait_time(self):
self.listener.reset_wait_time()