Added windows support for libmpv

This commit is contained in:
Christoph Stahl 2024-11-18 19:02:34 +01:00
parent 55bedf7aa3
commit 220f1e8779
3 changed files with 16 additions and 12 deletions

View file

@ -285,8 +285,6 @@ class Client:
f"Playing: {entry.artist} - {entry.title} [{entry.album}] " f"Playing: {entry.artist} - {entry.title} [{entry.album}] "
f"({entry.source}) for {entry.performer}" f"({entry.source}) for {entry.performer}"
) )
print(entry)
print(self.skipped)
if entry.uuid not in self.skipped: if entry.uuid not in self.skipped:
try: try:
if self.state.config["preview_duration"] > 0: if self.state.config["preview_duration"] > 0:
@ -317,7 +315,6 @@ class Client:
:type data: dict[str, Any] :type data: dict[str, Any]
:rtype: None :rtype: None
""" """
print(f"Searching for: {data['query']}")
query = data["query"] query = data["query"]
sid = data["sid"] sid = data["sid"]
results_list = await asyncio.gather( results_list = await asyncio.gather(
@ -441,6 +438,7 @@ class Client:
self.player.mpv.terminate() self.player.mpv.terminate()
def quit_callback(self) -> None: def quit_callback(self) -> None:
self.player.close()
if self.loop is not None: if self.loop is not None:
asyncio.run_coroutine_threadsafe(self.sio.disconnect(), self.loop) asyncio.run_coroutine_threadsafe(self.sio.disconnect(), self.loop)

View file

@ -21,7 +21,7 @@ try:
if not TYPE_CHECKING: if not TYPE_CHECKING:
from ctypes import windll from ctypes import windll
appid = "rocks.syng.Syng.2.0.7" appid = "rocks.syng.Syng.2.1"
windll.shell32.SetCurrentProcessExplicitAppUserModelID(appid) windll.shell32.SetCurrentProcessExplicitAppUserModelID(appid)
except ImportError: except ImportError:
pass pass

View file

@ -6,15 +6,16 @@ from qrcode.main import QRCode
import mpv import mpv
import os import os
from .entry import Entry from .entry import Entry
__dirname__ = os.path.dirname(__file__)
class Player: class Player:
def __init__(self, qr_string: str, quit_callback: Callable[[], None]) -> None: def __init__(self, qr_string: str, quit_callback: Callable[[], None]) -> None:
locale.setlocale(locale.LC_ALL, "C") locale.setlocale(locale.LC_ALL, "C")
self.base_dir = f"{os.path.dirname(__file__)}/static"
if getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS"):
self.base_dir = getattr(sys, "_MEIPASS")
self.closing = False
self.mpv = mpv.MPV(ytdl=True, input_default_bindings=True, input_vo_keyboard=True, osc=True) self.mpv = mpv.MPV(ytdl=True, input_default_bindings=True, input_vo_keyboard=True, osc=True)
self.mpv.title = "Syng - Player" self.mpv.title = "Syng - Player"
self.mpv.keep_open = "yes" self.mpv.keep_open = "yes"
@ -24,7 +25,7 @@ class Player:
) )
self.mpv.play( self.mpv.play(
f"{__dirname__}/static/background.png", f"{self.base_dir}/background.png",
) )
self.default_options = { self.default_options = {
@ -39,8 +40,13 @@ class Player:
def event_callback(self, event: mpv.MpvEvent) -> None: def event_callback(self, event: mpv.MpvEvent) -> None:
e = event.as_dict() e = event.as_dict()
if e["event"] == b"shutdown": if e["event"] == b"shutdown":
self.closing = True
self.quit_callback() self.quit_callback()
def close(self):
if not self.closing:
self.mpv.terminate()
def update_qr(self, qr_string: str) -> None: def update_qr(self, qr_string: str) -> None:
qr = QRCode(box_size=5, border=1) qr = QRCode(box_size=5, border=1)
qr.add_data(qr_string) qr.add_data(qr_string)
@ -76,7 +82,7 @@ class Player:
self.mpv.sub_pos = 50 self.mpv.sub_pos = 50
self.play_image( self.play_image(
f"{__dirname__}/static/background20perc.png", 3, sub_file=f"python://{stream_name}" f"{self.base_dir}/background20perc.png", 3, sub_file=f"python://{stream_name}"
) )
try: try:
@ -119,13 +125,13 @@ class Player:
try: try:
await loop.run_in_executor(None, self.mpv.wait_for_property, "eof-reached") await loop.run_in_executor(None, self.mpv.wait_for_property, "eof-reached")
self.mpv.image_display_duration = 0 self.mpv.image_display_duration = 0
self.mpv.play(f"{__dirname__}/static/background.png") self.mpv.play(f"{self.base_dir}/background.png")
except mpv.ShutdownError: except mpv.ShutdownError:
self.quit_callback() self.quit_callback()
def skip_current(self) -> None: def skip_current(self) -> None:
self.mpv.image_display_duration = 0 self.mpv.image_display_duration = 0
self.mpv.play( self.mpv.play(
f"{__dirname__}/static/background.png", f"{self.base_dir}/background.png",
) )
# self.mpv.playlist_next() # self.mpv.playlist_next()