Getting closer
This commit is contained in:
parent
15cc8f8147
commit
e51acd075a
4 changed files with 29 additions and 25 deletions
|
@ -164,8 +164,9 @@ class Client:
|
||||||
:rtype: None
|
:rtype: None
|
||||||
"""
|
"""
|
||||||
logger.info("Skipping current")
|
logger.info("Skipping current")
|
||||||
if self.state.current_source is not None:
|
self.player.skip_current()
|
||||||
await self.state.current_source.skip_current(Entry(**data))
|
# if self.state.current_source is not None:
|
||||||
|
# await self.state.current_source.skip_current(Entry(**data))
|
||||||
|
|
||||||
async def handle_state(self, data: dict[str, Any]) -> None:
|
async def handle_state(self, data: dict[str, Any]) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -247,7 +248,7 @@ class Client:
|
||||||
:type entry: :py:class:`Entry`
|
:type entry: :py:class:`Entry`
|
||||||
:rtype: None
|
:rtype: None
|
||||||
"""
|
"""
|
||||||
self.player.queue_next(entry)
|
await self.player.queue_next(entry)
|
||||||
|
|
||||||
async def handle_play(self, data: dict[str, Any]) -> None:
|
async def handle_play(self, data: dict[str, Any]) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -302,7 +303,7 @@ class Client:
|
||||||
:type data: dict[str, Any]
|
:type data: dict[str, Any]
|
||||||
:rtype: None
|
:rtype: None
|
||||||
"""
|
"""
|
||||||
logger.info(f"Searching for: {data['query']}")
|
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(
|
||||||
|
@ -421,7 +422,7 @@ class Client:
|
||||||
"""
|
"""
|
||||||
engineio.async_client.async_signal_handler()
|
engineio.async_client.async_signal_handler()
|
||||||
if self.state.current_source is not None:
|
if self.state.current_source is not None:
|
||||||
if self.state.current_source.player is not None:
|
if self.state.current_source.player is not None: # TODO old player
|
||||||
self.state.current_source.player.kill()
|
self.state.current_source.player.kill()
|
||||||
|
|
||||||
async def start_client(self, config: dict[str, Any]) -> None:
|
async def start_client(self, config: dict[str, Any]) -> None:
|
||||||
|
@ -469,7 +470,7 @@ class Client:
|
||||||
pass
|
pass
|
||||||
finally:
|
finally:
|
||||||
if self.state.current_source is not None:
|
if self.state.current_source is not None:
|
||||||
if self.state.current_source.player is not None:
|
if self.state.current_source.player is not None: # TODO old player
|
||||||
self.state.current_source.player.kill()
|
self.state.current_source.player.kill()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import asyncio
|
||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
from typing import Iterable, Optional
|
from typing import Iterable, Optional
|
||||||
|
@ -35,10 +36,6 @@ class Player:
|
||||||
if self.audio:
|
if self.audio:
|
||||||
self.mpv.audio_add(self.audio)
|
self.mpv.audio_add(self.audio)
|
||||||
|
|
||||||
def eof_handler(self, *args):
|
|
||||||
if self.mpv.filename not in ["background.png", "background20perc.png"]:
|
|
||||||
self.callback()
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
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.keep_open = "yes"
|
self.mpv.keep_open = "yes"
|
||||||
|
@ -52,18 +49,17 @@ class Player:
|
||||||
self.mpv.play(
|
self.mpv.play(
|
||||||
f"{__dirname__}/static/background.png",
|
f"{__dirname__}/static/background.png",
|
||||||
)
|
)
|
||||||
self.callback = lambda: None
|
|
||||||
|
|
||||||
self.mpv.register_event_callback(self.event_handler)
|
self.mpv.register_event_callback(self.event_handler)
|
||||||
self.mpv.observe_property("eof-reached", self.eof_handler)
|
|
||||||
self.mpv.observe_property("osd-width", self.osd_size_handler)
|
self.mpv.observe_property("osd-width", self.osd_size_handler)
|
||||||
self.mpv.observe_property("osd-height", self.osd_size_handler)
|
self.mpv.observe_property("osd-height", self.osd_size_handler)
|
||||||
|
|
||||||
def play_entry(self, entry: Entry, video: str, audio: Optional[str] = None):
|
# def play_entry(self, entry: Entry, video: str, audio: Optional[str] = None):
|
||||||
self.queue_next(entry)
|
# self.queue_next(entry)
|
||||||
self.play(video, audio)
|
# self.play(video, audio)
|
||||||
|
|
||||||
def queue_next(self, entry: Entry):
|
async def queue_next(self, entry: Entry):
|
||||||
|
loop = asyncio.get_running_loop()
|
||||||
self.play_image(f"{__dirname__}/static/background20perc.png", 3)
|
self.play_image(f"{__dirname__}/static/background20perc.png", 3)
|
||||||
|
|
||||||
frame = sys._getframe()
|
frame = sys._getframe()
|
||||||
|
@ -81,7 +77,7 @@ class Player:
|
||||||
self.mpv.sub_pos = 50
|
self.mpv.sub_pos = 50
|
||||||
self.mpv.sub_add(f"python://{stream_name}")
|
self.mpv.sub_add(f"python://{stream_name}")
|
||||||
|
|
||||||
self.mpv.wait_for_property("eof-reached")
|
await loop.run_in_executor(None, self.mpv.wait_for_property, "eof-reached")
|
||||||
|
|
||||||
def play_image(self, image: str, duration: int):
|
def play_image(self, image: str, duration: int):
|
||||||
self.mpv.image_display_duration = duration
|
self.mpv.image_display_duration = duration
|
||||||
|
@ -89,9 +85,16 @@ class Player:
|
||||||
self.mpv.play(image)
|
self.mpv.play(image)
|
||||||
self.mpv.pause = False
|
self.mpv.pause = False
|
||||||
|
|
||||||
def play(self, video: str, audio: Optional[str] = None):
|
async def play(self, video: str, audio: Optional[str] = None):
|
||||||
|
loop = asyncio.get_running_loop()
|
||||||
self.audio = audio
|
self.audio = audio
|
||||||
self.mpv.pause = True
|
self.mpv.pause = True
|
||||||
self.mpv.play(video)
|
self.mpv.play(video)
|
||||||
self.mpv.pause = False
|
self.mpv.pause = False
|
||||||
self.mpv.wait_for_property("eof-reached")
|
await loop.run_in_executor(None, self.mpv.wait_for_property, "eof-reached")
|
||||||
|
|
||||||
|
def skip_current(self):
|
||||||
|
self.mpv.playlist_append(
|
||||||
|
f"{__dirname__}/static/background.png",
|
||||||
|
)
|
||||||
|
self.mpv.playlist_next()
|
||||||
|
|
|
@ -127,7 +127,7 @@ class Source(ABC):
|
||||||
"""
|
"""
|
||||||
self.downloaded_files: defaultdict[str, DLFilesEntry] = defaultdict(DLFilesEntry)
|
self.downloaded_files: defaultdict[str, DLFilesEntry] = defaultdict(DLFilesEntry)
|
||||||
self._masterlock: asyncio.Lock = asyncio.Lock()
|
self._masterlock: asyncio.Lock = asyncio.Lock()
|
||||||
self.player: Optional[asyncio.subprocess.Process] = None
|
# self.player: Optional[asyncio.subprocess.Process] = None
|
||||||
self._index: list[str] = config["index"] if "index" in config else []
|
self._index: list[str] = config["index"] if "index" in config else []
|
||||||
self.extra_mpv_arguments: list[str] = []
|
self.extra_mpv_arguments: list[str] = []
|
||||||
self._skip_next = False
|
self._skip_next = False
|
||||||
|
@ -309,11 +309,11 @@ class Source(ABC):
|
||||||
# self.downloaded_files[entry.ident].audio,
|
# self.downloaded_files[entry.ident].audio,
|
||||||
# *extra_options,
|
# *extra_options,
|
||||||
# )
|
# )
|
||||||
player.play(
|
await player.play(
|
||||||
self.downloaded_files[entry.ident].video, self.downloaded_files[entry.ident].audio
|
self.downloaded_files[entry.ident].video, self.downloaded_files[entry.ident].audio
|
||||||
)
|
)
|
||||||
# await self.player.wait()
|
# await self.player.wait()
|
||||||
self.player = None
|
# self.player = None
|
||||||
if self._skip_next:
|
if self._skip_next:
|
||||||
self._skip_next = False
|
self._skip_next = False
|
||||||
entry.skip = True
|
entry.skip = True
|
||||||
|
@ -338,8 +338,8 @@ class Source(ABC):
|
||||||
buffer_task.cancel()
|
buffer_task.cancel()
|
||||||
self.downloaded_files[entry.ident].ready.set()
|
self.downloaded_files[entry.ident].ready.set()
|
||||||
|
|
||||||
if self.player is not None:
|
# if self.player is not None:
|
||||||
self.player.kill()
|
# self.player.kill()
|
||||||
|
|
||||||
async def ensure_playable(self, entry: Entry) -> None:
|
async def ensure_playable(self, entry: Entry) -> None:
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -263,7 +263,7 @@ class YoutubeSource(Source):
|
||||||
# mpv_options,
|
# mpv_options,
|
||||||
# )
|
# )
|
||||||
# await self.player.wait()
|
# await self.player.wait()
|
||||||
player.play(entry.ident)
|
await player.play(entry.ident)
|
||||||
else:
|
else:
|
||||||
await super().play(entry, player, mpv_options)
|
await super().play(entry, player, mpv_options)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue