Files
FastAnime/fastanime/libs/player/mpv/example_integration.py

146 lines
4.7 KiB
Python

"""
Example integration of IPC MPV Player with FastAnime.
This shows how to use the updated PlayerParams with IPC-specific parameters
for episode navigation features. The IPC player is automatically used when
mpv.use_ipc is enabled and the required parameters are provided.
"""
from typing import List, Literal, Optional
from ....libs.player.params import PlayerParams
from ....libs.provider.anime.base import BaseAnimeProvider
from ....libs.provider.anime.types import Anime
def create_ipc_player_params(
url: str,
title: str,
provider: BaseAnimeProvider,
anime: Anime,
current_episode: str,
translation_type: Literal["sub", "dub"] = "sub",
subtitles: Optional[List[str]] = None,
headers: Optional[dict] = None,
start_time: Optional[str] = None
) -> PlayerParams:
"""
Create PlayerParams with IPC player dependencies for episode navigation.
Args:
url: Stream URL
title: Episode title
provider: Anime provider for fetching episode streams
anime: Current anime object
current_episode: Current episode number
translation_type: Translation type ("sub" or "dub")
subtitles: List of subtitle URLs
headers: HTTP headers for streaming
start_time: Start time for playback
Returns:
PlayerParams configured for IPC player
"""
# Get available episodes for the translation type
available_episodes: List[str] = getattr(anime.episodes, translation_type, [])
return PlayerParams(
url=url,
title=title,
subtitles=subtitles,
headers=headers,
start_time=start_time,
# IPC-specific parameters
anime_provider=provider,
current_anime=anime,
available_episodes=available_episodes,
current_episode=current_episode,
current_anime_id=anime.id,
current_anime_title=anime.title,
current_translation_type=translation_type
)
def example_usage():
"""Example of how to use the IPC player in an interactive session."""
# This would typically be called from within the servers.py menu
# when the IPC player is enabled
# Updated integration example:
"""
# In servers.py, around line 82:
if config.mpv.use_ipc and state.provider.anime:
# Get available episodes for current translation type
available_episodes = getattr(
state.provider.anime.episodes,
config.stream.translation_type,
[]
)
# Create player params with IPC dependencies
player_result = ctx.player.play(
PlayerParams(
url=stream_link_obj.link,
title=final_title,
subtitles=[sub.url for sub in selected_server.subtitles],
headers=selected_server.headers,
start_time=state.provider.start_time,
# IPC-specific parameters
anime_provider=provider,
current_anime=state.provider.anime,
available_episodes=available_episodes,
current_episode=episode_number,
current_anime_id=state.provider.anime.id,
current_anime_title=state.provider.anime.title,
current_translation_type=config.stream.translation_type
)
)
else:
# Use regular player without IPC features
player_result = ctx.player.play(
PlayerParams(
url=stream_link_obj.link,
title=final_title,
subtitles=[sub.url for sub in selected_server.subtitles],
headers=selected_server.headers,
start_time=state.provider.start_time,
)
)
"""
pass
# Key features enabled by IPC player:
#
# 1. Episode Navigation:
# - Shift+N: Next episode
# - Shift+P: Previous episode
# - Shift+R: Reload current episode
#
# 2. Quality/Server switching:
# - Script message: select-quality 720
# - Script message: select-server gogoanime
#
# 3. Episode jumping:
# - Script message: select-episode 5
#
# 4. Translation type switching:
# - Shift+T: Toggle between sub/dub
#
# 5. Auto-next episode (when implemented):
# - Automatically plays next episode when current one ends
#
# To send script messages from MPV console (` key):
# script-message select-episode 5
# script-message select-quality 1080
# script-message select-server top
#
# Configuration:
# To enable IPC player, set in config: mpv.use_ipc = true
#
# The IPC player will automatically be used when:
# 1. mpv.use_ipc is enabled in config
# 2. The required anime provider and episode data is passed in PlayerParams
# 3. MPV executable is available and unix sockets are supported (Linux/macOS)