mirror of
https://github.com/Benexl/FastAnime.git
synced 2025-12-11 07:10:43 -08:00
63 lines
2.5 KiB
Python
63 lines
2.5 KiB
Python
import click
|
|
from fastanime.core.config import AppConfig
|
|
from fastanime.core.exceptions import FastAnimeError
|
|
from fastanime.libs.media_api.params import MediaSearchParams
|
|
|
|
|
|
@click.command(help="Queue episodes for the background worker to download.")
|
|
@click.option(
|
|
"--title", "-t", required=True, multiple=True, help="Anime title to queue."
|
|
)
|
|
@click.option(
|
|
"--episode-range", "-r", required=True, help="Range of episodes (e.g., '1-10')."
|
|
)
|
|
@click.pass_obj
|
|
def queue(config: AppConfig, title: tuple, episode_range: str):
|
|
"""
|
|
Searches for an anime and adds the specified episodes to the download queue.
|
|
The background worker must be running for the downloads to start.
|
|
"""
|
|
from fastanime.cli.service.download.service import DownloadService
|
|
from fastanime.cli.service.feedback import FeedbackService
|
|
from fastanime.cli.service.registry import MediaRegistryService
|
|
from fastanime.cli.utils.parser import parse_episode_range
|
|
from fastanime.libs.media_api.api import create_api_client
|
|
from fastanime.libs.provider.anime.provider import create_provider
|
|
|
|
feedback = FeedbackService(config)
|
|
media_api = create_api_client(config.general.media_api, config)
|
|
provider = create_provider(config.general.provider)
|
|
registry = MediaRegistryService(config.general.media_api, config.media_registry)
|
|
download_service = DownloadService(config, registry, media_api, provider)
|
|
|
|
for anime_title in title:
|
|
try:
|
|
feedback.info(f"Searching for '{anime_title}'...")
|
|
search_result = media_api.search_media(
|
|
MediaSearchParams(query=anime_title, per_page=1)
|
|
)
|
|
|
|
if not search_result or not search_result.media:
|
|
feedback.warning(f"Could not find '{anime_title}' on AniList.")
|
|
continue
|
|
|
|
media_item = search_result.media[0]
|
|
available_episodes = [str(i + 1) for i in range(media_item.episodes or 0)]
|
|
episodes_to_queue = list(
|
|
parse_episode_range(episode_range, available_episodes)
|
|
)
|
|
|
|
queued_count = 0
|
|
for ep in episodes_to_queue:
|
|
if download_service.add_to_queue(media_item, ep):
|
|
queued_count += 1
|
|
|
|
feedback.success(
|
|
f"Successfully queued {queued_count} episodes for '{media_item.title.english}'."
|
|
)
|
|
|
|
except FastAnimeError as e:
|
|
feedback.error(f"Failed to queue '{anime_title}'", str(e))
|
|
except Exception as e:
|
|
feedback.error("An unexpected error occurred", str(e))
|