mirror of
https://github.com/Benexl/FastAnime.git
synced 2026-01-02 07:50:04 -08:00
68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
import logging
|
|
from typing import Optional
|
|
|
|
from ....core.config import AppConfig
|
|
from ....core.exceptions import FastAnimeError
|
|
from ....libs.media_api.types import MediaItem
|
|
from ....libs.player.base import BasePlayer
|
|
from ....libs.player.params import PlayerParams
|
|
from ....libs.player.player import create_player
|
|
from ....libs.player.types import PlayerResult
|
|
from ....libs.provider.anime.base import BaseAnimeProvider
|
|
from ....libs.provider.anime.types import Anime
|
|
from ..registry import MediaRegistryService
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class PlayerService:
|
|
app_config: AppConfig
|
|
provider: BaseAnimeProvider
|
|
player: BasePlayer
|
|
registry: Optional[MediaRegistryService] = None
|
|
local: bool = False
|
|
|
|
def __init__(
|
|
self,
|
|
app_config: AppConfig,
|
|
provider: BaseAnimeProvider,
|
|
registry: Optional[MediaRegistryService] = None,
|
|
):
|
|
self.app_config = app_config
|
|
self.provider = provider
|
|
self.registry = registry
|
|
self.player = create_player(app_config)
|
|
|
|
def play(
|
|
self,
|
|
params: PlayerParams,
|
|
anime: Optional[Anime] = None,
|
|
media_item: Optional[MediaItem] = None,
|
|
local: bool = False,
|
|
) -> PlayerResult:
|
|
self.local = local
|
|
if self.app_config.stream.use_ipc:
|
|
if anime or self.registry:
|
|
return self._play_with_ipc(params, anime, media_item)
|
|
else:
|
|
logger.warning(
|
|
f"Ipc player won't be used since Anime Object has not been given for url={params.url}"
|
|
)
|
|
return self.player.play(params)
|
|
|
|
def _play_with_ipc(
|
|
self,
|
|
params: PlayerParams,
|
|
anime: Optional[Anime] = None,
|
|
media_item: Optional[MediaItem] = None,
|
|
) -> PlayerResult:
|
|
if self.app_config.stream.player == "mpv":
|
|
from .ipc.mpv import MpvIPCPlayer
|
|
|
|
registry = self.registry if self.local else None
|
|
return MpvIPCPlayer(self.app_config.stream).play(
|
|
self.player, params, self.provider, anime, registry, media_item
|
|
)
|
|
else:
|
|
raise FastAnimeError("Not implemented")
|