diff --git a/syng/client.py b/syng/client.py index 0c72bc1..3e1a92a 100644 --- a/syng/client.py +++ b/syng/client.py @@ -28,6 +28,7 @@ from dataclasses import dataclass from dataclasses import field from traceback import print_exc from typing import Any, Optional +from uuid import UUID from qrcode.main import QRCode @@ -121,7 +122,7 @@ class Client: self.is_running = False self.sio = socketio.AsyncClient(json=jsonencoder) self.loop: Optional[asyncio.AbstractEventLoop] = None - self.skipped = [] + self.skipped: list[UUID] = [] self.sources = configure_sources(config["sources"]) self.state = State() self.currentLock = asyncio.Semaphore(0) @@ -441,7 +442,7 @@ class Client: if self.player is not None: self.player.mpv.terminate() - def quit_callback(self): + def quit_callback(self) -> None: if self.loop is not None: asyncio.run_coroutine_threadsafe(self.sio.disconnect(), self.loop) diff --git a/syng/gui.py b/syng/gui.py index 6f72cc3..4507524 100644 --- a/syng/gui.py +++ b/syng/gui.py @@ -482,14 +482,14 @@ class GeneralConfig(OptionFrame): class SyngGui(QMainWindow): def closeEvent(self, a0: Optional[QCloseEvent]) -> None: - if self.syng_server is not None: - self.syng_server.kill() - self.syng_server.join() + # if self.syng_server is not None: + # self.syng_server.kill() + # self.syng_server.join() - if self.syng_client is not None: - self.syng_client.terminate() - self.syng_client.join(1.0) - self.syng_client.kill() + # if self.syng_client is not None: + # self.syng_client.terminate() + # self.syng_client.join(1.0) + # self.syng_client.kill() self.destroy() @@ -632,8 +632,8 @@ class SyngGui(QMainWindow): self.setWindowIcon(QIcon(":/icons/syng.ico")) self.loop = asyncio.get_event_loop() - self.syng_server: Optional[threading.Thread] = None - self.syng_client: Optional[threading.Thread] = None + # self.syng_server: Optional[threading.Thread] = None + # self.syng_client: Optional[threading.Thread] = None self.client: Optional[Client] = None self.syng_client_logging_listener: Optional[QueueListener] = None diff --git a/syng/player_libmpv.py b/syng/player_libmpv.py index e2ab334..20687f0 100644 --- a/syng/player_libmpv.py +++ b/syng/player_libmpv.py @@ -1,7 +1,7 @@ import asyncio import locale import sys -from typing import Iterable, Optional, cast +from typing import Callable, Iterable, Optional, cast from qrcode.main import QRCode import mpv import os @@ -13,7 +13,7 @@ __dirname__ = os.path.dirname(__file__) class Player: - def __init__(self, qr_string: str, quit_callback) -> None: + def __init__(self, qr_string: str, quit_callback: Callable[[], None]) -> None: locale.setlocale(locale.LC_ALL, "C") self.mpv = mpv.MPV(ytdl=True, input_default_bindings=True, input_vo_keyboard=True, osc=True) self.mpv.title = "Syng - Player" @@ -36,7 +36,7 @@ class Player: self.mpv.observe_property("osd-height", self.osd_size_handler) self.mpv.register_event_callback(self.event_callback) - def event_callback(self, event): + def event_callback(self, event: mpv.MpvEvent) -> None: e = event.as_dict() if e["event"] == b"shutdown": self.quit_callback() diff --git a/typings/mpv.pyi b/typings/mpv.pyi index 2d724cc..c8ea720 100644 --- a/typings/mpv.pyi +++ b/typings/mpv.pyi @@ -2,6 +2,9 @@ from typing import Any, Callable, Iterable, Optional, Protocol from PIL.Image import Image +class ShutdownError(Exception): + pass + class Unregisterable(Protocol): def unregister(self) -> None: ... @@ -9,6 +12,9 @@ class ImageOverlay: overlay_id: int def remove(self) -> None: ... +class MpvEvent: + def as_dict(self) -> dict[str, bytes]: ... + class MPV: pause: bool keep_open: str diff --git a/typings/qasync.pyi b/typings/qasync.pyi new file mode 100644 index 0000000..ac97255 --- /dev/null +++ b/typings/qasync.pyi @@ -0,0 +1,4 @@ +from asyncio import AbstractEventLoop + +class QApplication: + def __init__(self, argv: list[str]) -> None: ...