diff --git a/fastanime/cli/commands/anilist/cmd.py b/fastanime/cli/commands/anilist/cmd.py index 019c1b0..05cf0b3 100644 --- a/fastanime/cli/commands/anilist/cmd.py +++ b/fastanime/cli/commands/anilist/cmd.py @@ -37,5 +37,5 @@ def anilist(ctx: click.Context, resume: bool): config = ctx.obj if ctx.invoked_subcommand is None: - session.load_menus_from_folder("") + session.load_menus_from_folder("media") session.run(config, resume=resume) diff --git a/fastanime/cli/interactive/menus/episodes.py b/fastanime/cli/interactive/menus/media/episodes.py similarity index 93% rename from fastanime/cli/interactive/menus/episodes.py rename to fastanime/cli/interactive/menus/media/episodes.py index c114289..18b4eab 100644 --- a/fastanime/cli/interactive/menus/episodes.py +++ b/fastanime/cli/interactive/menus/media/episodes.py @@ -1,5 +1,5 @@ -from ..session import Context, session -from ..state import InternalDirective, MenuName, State +from ...session import Context, session +from ...state import InternalDirective, MenuName, State @session.menu @@ -39,7 +39,7 @@ def episodes(ctx: Context, state: State) -> State | InternalDirective: preview_command = None if ctx.config.general.preview != "none": - from ...utils.previews import get_episode_preview + from ....utils.previews import get_episode_preview preview_command = get_episode_preview( available_episodes, media_item, ctx.config diff --git a/fastanime/cli/interactive/menus/main.py b/fastanime/cli/interactive/menus/media/main.py similarity index 96% rename from fastanime/cli/interactive/menus/main.py rename to fastanime/cli/interactive/menus/media/main.py index 8d0988e..06782a8 100644 --- a/fastanime/cli/interactive/menus/main.py +++ b/fastanime/cli/interactive/menus/media/main.py @@ -2,14 +2,14 @@ import logging import random from typing import Callable, Dict -from ....libs.media_api.params import MediaSearchParams, UserMediaListSearchParams -from ....libs.media_api.types import ( +from .....libs.media_api.params import MediaSearchParams, UserMediaListSearchParams +from .....libs.media_api.types import ( MediaSort, MediaStatus, UserMediaListStatus, ) -from ..session import Context, session -from ..state import InternalDirective, MediaApiState, MenuName, State +from ...session import Context, session +from ...state import InternalDirective, MediaApiState, MenuName, State logger = logging.getLogger(__name__) MenuAction = Callable[[], State | InternalDirective] diff --git a/fastanime/cli/interactive/menus/media_actions.py b/fastanime/cli/interactive/menus/media/media_actions.py similarity index 94% rename from fastanime/cli/interactive/menus/media_actions.py rename to fastanime/cli/interactive/menus/media/media_actions.py index 49c6160..6f2d52b 100644 --- a/fastanime/cli/interactive/menus/media_actions.py +++ b/fastanime/cli/interactive/menus/media/media_actions.py @@ -2,11 +2,11 @@ from typing import Callable, Dict from rich.console import Console -from ....libs.media_api.params import UpdateUserMediaListEntryParams -from ....libs.media_api.types import UserMediaListStatus -from ....libs.players.params import PlayerParams -from ..session import Context, session -from ..state import InternalDirective, MenuName, State +from .....libs.media_api.params import UpdateUserMediaListEntryParams +from .....libs.media_api.types import UserMediaListStatus +from .....libs.players.params import PlayerParams +from ...session import Context, session +from ...state import InternalDirective, MenuName, State MenuAction = Callable[[], State | InternalDirective] @@ -155,7 +155,7 @@ def _view_info(ctx: Context, state: State) -> MenuAction: from rich.panel import Panel from rich.text import Text - from ...utils import image + from ....utils import image # TODO: make this look nicer plus add other fields console = Console() diff --git a/fastanime/cli/interactive/menus/player_controls.py b/fastanime/cli/interactive/menus/media/player_controls.py similarity index 98% rename from fastanime/cli/interactive/menus/player_controls.py rename to fastanime/cli/interactive/menus/media/player_controls.py index 6f6ccfa..a8639c4 100644 --- a/fastanime/cli/interactive/menus/player_controls.py +++ b/fastanime/cli/interactive/menus/media/player_controls.py @@ -1,7 +1,7 @@ from typing import Callable, Dict, Union -from ..session import Context, session -from ..state import InternalDirective, MenuName, State +from ...session import Context, session +from ...state import InternalDirective, MenuName, State MenuAction = Callable[[], Union[State, InternalDirective]] diff --git a/fastanime/cli/interactive/menus/provider_search.py b/fastanime/cli/interactive/menus/media/provider_search.py similarity index 91% rename from fastanime/cli/interactive/menus/provider_search.py rename to fastanime/cli/interactive/menus/media/provider_search.py index 48d259e..88ddbf3 100644 --- a/fastanime/cli/interactive/menus/provider_search.py +++ b/fastanime/cli/interactive/menus/media/provider_search.py @@ -1,10 +1,10 @@ from rich.progress import Progress from thefuzz import fuzz -from ....libs.providers.anime.params import SearchParams -from ....libs.providers.anime.types import SearchResult -from ..session import Context, session -from ..state import InternalDirective, MenuName, ProviderState, State +from .....libs.providers.anime.params import SearchParams +from .....libs.providers.anime.types import SearchResult +from ...session import Context, session +from ...state import InternalDirective, MenuName, ProviderState, State @session.menu @@ -73,7 +73,7 @@ def provider_search(ctx: Context, state: State) -> State | InternalDirective: f"[cyan]Fetching full details for '{selected_provider_anime.title}'...", total=None, ) - from ....libs.providers.anime.params import AnimeParams + from .....libs.providers.anime.params import AnimeParams full_provider_anime = provider.get( AnimeParams(id=selected_provider_anime.id, query=media_title.lower()) diff --git a/fastanime/cli/interactive/menus/results.py b/fastanime/cli/interactive/menus/media/results.py similarity index 94% rename from fastanime/cli/interactive/menus/results.py rename to fastanime/cli/interactive/menus/media/results.py index b92b94b..76983bf 100644 --- a/fastanime/cli/interactive/menus/results.py +++ b/fastanime/cli/interactive/menus/media/results.py @@ -1,10 +1,10 @@ from dataclasses import asdict from typing import Callable, Dict, Union -from ....libs.media_api.params import MediaSearchParams, UserMediaListSearchParams -from ....libs.media_api.types import MediaItem, MediaStatus, UserMediaListStatus -from ..session import Context, session -from ..state import InternalDirective, MediaApiState, MenuName, State +from .....libs.media_api.params import MediaSearchParams, UserMediaListSearchParams +from .....libs.media_api.types import MediaItem, MediaStatus, UserMediaListStatus +from ...session import Context, session +from ...state import InternalDirective, MediaApiState, MenuName, State @session.menu @@ -26,7 +26,7 @@ def results(ctx: Context, state: State) -> State | InternalDirective: preview_command = None if ctx.config.general.preview != "none": - from ...utils.previews import get_anime_preview + from ....utils.previews import get_anime_preview preview_command = get_anime_preview( list(search_result_dict.values()), diff --git a/fastanime/cli/interactive/menus/servers.py b/fastanime/cli/interactive/menus/media/servers.py similarity index 92% rename from fastanime/cli/interactive/menus/servers.py rename to fastanime/cli/interactive/menus/media/servers.py index 6200e26..fa2f02d 100644 --- a/fastanime/cli/interactive/menus/servers.py +++ b/fastanime/cli/interactive/menus/media/servers.py @@ -1,10 +1,10 @@ from typing import Dict, List -from ....libs.players.params import PlayerParams -from ....libs.providers.anime.params import EpisodeStreamsParams -from ....libs.providers.anime.types import ProviderServer, Server -from ..session import Context, session -from ..state import InternalDirective, MenuName, State +from .....libs.players.params import PlayerParams +from .....libs.providers.anime.params import EpisodeStreamsParams +from .....libs.providers.anime.types import ProviderServer, Server +from ...session import Context, session +from ...state import InternalDirective, MenuName, State @session.menu diff --git a/fastanime/cli/interactive/menus/auth.py b/fastanime/cli/interactive/menus/share/auth.py similarity index 100% rename from fastanime/cli/interactive/menus/auth.py rename to fastanime/cli/interactive/menus/share/auth.py diff --git a/fastanime/cli/interactive/menus/session_management.py b/fastanime/cli/interactive/menus/share/session_management.py similarity index 100% rename from fastanime/cli/interactive/menus/session_management.py rename to fastanime/cli/interactive/menus/share/session_management.py diff --git a/fastanime/cli/interactive/menus/user_media_list.py b/fastanime/cli/interactive/menus/share/user_media_list.py similarity index 100% rename from fastanime/cli/interactive/menus/user_media_list.py rename to fastanime/cli/interactive/menus/share/user_media_list.py diff --git a/fastanime/cli/interactive/menus/watch_history.py b/fastanime/cli/interactive/menus/share/watch_history.py similarity index 100% rename from fastanime/cli/interactive/menus/watch_history.py rename to fastanime/cli/interactive/menus/share/watch_history.py diff --git a/fastanime/cli/interactive/session.py b/fastanime/cli/interactive/session.py index 21c815e..eba4eda 100644 --- a/fastanime/cli/interactive/session.py +++ b/fastanime/cli/interactive/session.py @@ -180,7 +180,7 @@ class Session: return decorator - def load_menus_from_folder(self, package): + def load_menus_from_folder(self, package:str): package_path = MENUS_DIR / package package_name = package_path.name logger.debug(f"Loading menus from '{package_path}'...") @@ -189,7 +189,7 @@ class Session: if filename.endswith(".py") and not filename.startswith("__"): module_name = filename[:-3] full_module_name = ( - f"fastanime.cli.interactive.{package_name}.{module_name}" + f"fastanime.cli.interactive.menus.{package_name}.{module_name}" ) file_path = package_path / filename diff --git a/fastanime/libs/media_api/factory.py b/fastanime/libs/media_api/factory.py index 1a49a50..1f9c9ad 100644 --- a/fastanime/libs/media_api/factory.py +++ b/fastanime/libs/media_api/factory.py @@ -16,7 +16,7 @@ logger = logging.getLogger(__name__) # Map the client name to its import path AND the config section it needs. API_CLIENTS = { - "anilist": ("fastanime.libs.api.anilist.api.AniListApi", "anilist"), + "anilist": ("fastanime.libs.media_api.anilist.api.AniListApi", "anilist"), # "jikan": ("fastanime.libs.jikan.api.JikanApi", "jikan"), # For the future }