skipping is more consistent, but still does not handle multiple rapid skips (edgecase)
This commit is contained in:
parent
f446733bb2
commit
824198acf6
3 changed files with 24 additions and 8 deletions
|
@ -119,6 +119,7 @@ class State:
|
|||
class Client:
|
||||
def __init__(self, config: dict[str, Any]):
|
||||
self.sio = socketio.AsyncClient(json=jsonencoder)
|
||||
self.skipped = False
|
||||
self.config = config
|
||||
self.sources = configure_sources(config["sources"])
|
||||
self.state = State()
|
||||
|
@ -165,6 +166,12 @@ class Client:
|
|||
:rtype: None
|
||||
"""
|
||||
logger.info("Skipping current")
|
||||
entry = Entry(**data)
|
||||
print("Skipping: ", entry.title)
|
||||
source = self.sources[entry.source]
|
||||
|
||||
self.skipped = True
|
||||
await source.skip_current(Entry(**data))
|
||||
self.player.skip_current()
|
||||
# if self.state.current_source is not None:
|
||||
# await self.state.current_source.skip_current(Entry(**data))
|
||||
|
@ -288,7 +295,8 @@ class Client:
|
|||
except Exception: # pylint: disable=broad-except
|
||||
print_exc()
|
||||
self.state.current_source = None
|
||||
if entry.skip:
|
||||
if self.skipped:
|
||||
self.skipped = False
|
||||
await self.sio.emit("get-first")
|
||||
else:
|
||||
await self.sio.emit("pop-then-get-next")
|
||||
|
|
|
@ -48,7 +48,6 @@ class Player:
|
|||
|
||||
async def queue_next(self, entry: Entry) -> None:
|
||||
loop = asyncio.get_running_loop()
|
||||
self.play_image(f"{__dirname__}/static/background20perc.png", 3)
|
||||
|
||||
frame = sys._getframe()
|
||||
stream_name = f"__python_mpv_play_generator_{hash(frame)}"
|
||||
|
@ -63,16 +62,21 @@ class Player:
|
|||
preview.unregister()
|
||||
|
||||
self.mpv.sub_pos = 50
|
||||
self.mpv.sub_add(f"python://{stream_name}")
|
||||
self.play_image(
|
||||
f"{__dirname__}/static/background20perc.png", 3, sub_file=f"python://{stream_name}"
|
||||
)
|
||||
|
||||
await loop.run_in_executor(None, self.mpv.wait_for_property, "eof-reached")
|
||||
|
||||
def play_image(self, image: str, duration: int) -> None:
|
||||
def play_image(self, image: str, duration: int, sub_file: Optional[str] = None) -> None:
|
||||
for property, value in self.default_options.items():
|
||||
self.mpv[property] = value
|
||||
self.mpv.image_display_duration = duration
|
||||
self.mpv.keep_open = "yes"
|
||||
self.mpv.play(image)
|
||||
if sub_file:
|
||||
self.mpv.loadfile(image, sub_file=sub_file)
|
||||
else:
|
||||
self.mpv.loadfile(image)
|
||||
self.mpv.pause = False
|
||||
|
||||
async def play(
|
||||
|
@ -97,10 +101,12 @@ class Player:
|
|||
self.mpv.loadfile(video)
|
||||
self.mpv.pause = False
|
||||
await loop.run_in_executor(None, self.mpv.wait_for_property, "eof-reached")
|
||||
self.mpv.image_display_duration = 0
|
||||
self.mpv.play(f"{__dirname__}/static/background.png")
|
||||
|
||||
def skip_current(self) -> None:
|
||||
self.mpv.playlist_append(
|
||||
self.mpv.image_display_duration = 0
|
||||
self.mpv.play(
|
||||
f"{__dirname__}/static/background.png",
|
||||
)
|
||||
self.mpv.playlist_next()
|
||||
# self.mpv.playlist_next()
|
||||
|
|
|
@ -34,6 +34,8 @@ class MPV:
|
|||
def create_image_overlay(self, image: Image, pos: tuple[int, int]) -> ImageOverlay: ...
|
||||
def remove_overlay(self, overlay_id: int) -> None: ...
|
||||
def observe_property(self, property: str, callback: Callable[[str, Any], None]) -> None: ...
|
||||
def loadfile(self, file: str, audio_file: Optional[str] = None) -> None: ...
|
||||
def loadfile(
|
||||
self, file: str, audio_file: Optional[str] = None, sub_file: Optional[str] = None
|
||||
) -> None: ...
|
||||
def __setitem__(self, key: str, value: str) -> None: ...
|
||||
def __getitem__(self, key: str) -> str: ...
|
||||
|
|
Loading…
Add table
Reference in a new issue