mirror of
https://github.com/Benexl/FastAnime.git
synced 2025-12-08 13:50:40 -08:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8aacbcc35b | ||
|
|
5976ab43b2 | ||
|
|
99c67a4bc0 | ||
|
|
34851fd3e4 | ||
|
|
e74b5977bb | ||
|
|
0650f45fba |
8
.github/workflows/publish.yml
vendored
8
.github/workflows/publish.yml
vendored
@@ -3,6 +3,8 @@ name: Upload Python Package
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
workflow_dispatch:
|
||||
types: [published]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -42,12 +44,6 @@ jobs:
|
||||
# IMPORTANT: this permission is mandatory for trusted publishing
|
||||
id-token: write
|
||||
|
||||
# Dedicated environments with protections for publishing are strongly recommended.
|
||||
environment:
|
||||
name: pypi
|
||||
# OPTIONAL: uncomment and update to include your PyPI project URL in the deployment status:
|
||||
# url: https://pypi.org/p/YOURPROJECT
|
||||
|
||||
steps:
|
||||
- name: Retrieve release distributions
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
18
README.md
18
README.md
@@ -8,8 +8,8 @@
|
||||
</p>
|
||||
<div align="center">
|
||||
|
||||
[](https://pypi.org/project/viu/)
|
||||
[](https://pypi.org/project/viu/)
|
||||
[](https://pypi.org/project/viu_cli/)
|
||||
[](https://pypi.org/project/viu_cli/)
|
||||
[](https://github.com/Benexl/Viu/actions)
|
||||
[](https://discord.gg/HBEmAwvbHV)
|
||||
[](https://github.com/Benexl/Viu/issues)
|
||||
@@ -98,13 +98,13 @@ The best way to install Viu is with [**uv**](https://github.com/astral-sh/uv), a
|
||||
|
||||
```bash
|
||||
# Install with all optional features for the full experience
|
||||
uv tool install "viu[standard]"
|
||||
uv tool install "viu_cli[standard]"
|
||||
|
||||
# Or, pick and choose the extras you need:
|
||||
uv tool install viu # Core functionality only
|
||||
uv tool install "viu[download]" # For advanced downloading with yt-dlp
|
||||
uv tool install "viu[discord]" # For Discord Rich Presence
|
||||
uv tool install "viu[notifications]" # For desktop notifications
|
||||
uv tool install viu_cli # Core functionality only
|
||||
uv tool install "viu_cli[download]" # For advanced downloading with yt-dlp
|
||||
uv tool install "viu_cli[discord]" # For Discord Rich Presence
|
||||
uv tool install "viu_cli[notifications]" # For desktop notifications
|
||||
```
|
||||
|
||||
### Other Installation Methods
|
||||
@@ -129,12 +129,12 @@ uv tool install "viu[notifications]" # For desktop notifications
|
||||
|
||||
#### Using pipx (for isolated environments)
|
||||
```bash
|
||||
pipx install "viu[standard]"
|
||||
pipx install "viu_cli[standard]"
|
||||
```
|
||||
|
||||
#### Using pip
|
||||
```bash
|
||||
pip install "viu[standard]"
|
||||
pip install "viu_cli[standard]"
|
||||
```
|
||||
</details>
|
||||
|
||||
|
||||
2
fa
2
fa
@@ -3,4 +3,4 @@ provider_type=$1
|
||||
provider_name=$2
|
||||
[ -z "$provider_type" ] && echo "Please specify provider type" && exit
|
||||
[ -z "$provider_name" ] && echo "Please specify provider type" && exit
|
||||
uv run python -m viu.libs.provider.${provider_type}.${provider_name}.provider
|
||||
uv run python -m viu_cli.libs.provider.${provider_type}.${provider_name}.provider
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[project]
|
||||
name = "viu-cli"
|
||||
name = "viu_cli"
|
||||
version = "3.1.0"
|
||||
description = "A browser anime site experience from the terminal"
|
||||
license = "UNLICENSE"
|
||||
@@ -14,7 +14,7 @@ dependencies = [
|
||||
]
|
||||
|
||||
[project.scripts]
|
||||
viu = 'viu:Cli'
|
||||
viu = 'viu_cli:Cli'
|
||||
|
||||
[project.optional-dependencies]
|
||||
standard = [
|
||||
|
||||
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 276 KiB After Width: | Height: | Size: 276 KiB |
@@ -44,7 +44,7 @@ commands = {
|
||||
|
||||
@click.group(
|
||||
cls=LazyGroup,
|
||||
root="viu.cli.commands",
|
||||
root="viu_cli.cli.commands",
|
||||
invoke_without_command=True,
|
||||
lazy_subcommands=commands,
|
||||
context_settings=dict(auto_envvar_prefix=PROJECT_NAME),
|
||||
@@ -18,7 +18,7 @@ commands = {
|
||||
@click.group(
|
||||
cls=LazyGroup,
|
||||
name="anilist",
|
||||
root="viu.cli.commands.anilist.commands",
|
||||
root="viu_cli.cli.commands.anilist.commands",
|
||||
invoke_without_command=True,
|
||||
help="A beautiful interface that gives you access to a commplete streaming experience",
|
||||
short_help="Access all streaming options",
|
||||
@@ -1,10 +1,10 @@
|
||||
from typing import TYPE_CHECKING, Dict, List
|
||||
|
||||
import click
|
||||
from viu.cli.utils.completion import anime_titles_shell_complete
|
||||
from viu.core.config import AppConfig
|
||||
from viu.core.exceptions import ViuError
|
||||
from viu.libs.media_api.types import (
|
||||
from viu_cli.cli.utils.completion import anime_titles_shell_complete
|
||||
from viu_cli.core.config import AppConfig
|
||||
from viu_cli.core.exceptions import ViuError
|
||||
from viu_cli.libs.media_api.types import (
|
||||
MediaFormat,
|
||||
MediaGenre,
|
||||
MediaItem,
|
||||
@@ -112,15 +112,15 @@ if TYPE_CHECKING:
|
||||
)
|
||||
@click.pass_obj
|
||||
def download(config: AppConfig, **options: "Unpack[DownloadOptions]"):
|
||||
from viu.cli.service.download.service import DownloadService
|
||||
from viu.cli.service.feedback import FeedbackService
|
||||
from viu.cli.service.registry import MediaRegistryService
|
||||
from viu.cli.service.watch_history import WatchHistoryService
|
||||
from viu.cli.utils.parser import parse_episode_range
|
||||
from viu.libs.media_api.api import create_api_client
|
||||
from viu.libs.media_api.params import MediaSearchParams
|
||||
from viu.libs.provider.anime.provider import create_provider
|
||||
from viu.libs.selectors import create_selector
|
||||
from viu_cli.cli.service.download.service import DownloadService
|
||||
from viu_cli.cli.service.feedback import FeedbackService
|
||||
from viu_cli.cli.service.registry import MediaRegistryService
|
||||
from viu_cli.cli.service.watch_history import WatchHistoryService
|
||||
from viu_cli.cli.utils.parser import parse_episode_range
|
||||
from viu_cli.libs.media_api.api import create_api_client
|
||||
from viu_cli.libs.media_api.params import MediaSearchParams
|
||||
from viu_cli.libs.provider.anime.provider import create_provider
|
||||
from viu_cli.libs.selectors import create_selector
|
||||
from rich.progress import Progress
|
||||
|
||||
feedback = FeedbackService(config)
|
||||
@@ -1,5 +1,5 @@
|
||||
import click
|
||||
from viu.core.config import AppConfig
|
||||
from viu_cli.core.config import AppConfig
|
||||
from rich.console import Console
|
||||
from rich.table import Table
|
||||
|
||||
@@ -11,8 +11,8 @@ def notifications(config: AppConfig):
|
||||
Displays unread notifications from AniList.
|
||||
Running this command will also mark the notifications as read on the AniList website.
|
||||
"""
|
||||
from viu.cli.service.feedback import FeedbackService
|
||||
from viu.libs.media_api.api import create_api_client
|
||||
from viu_cli.cli.service.feedback import FeedbackService
|
||||
from viu_cli.libs.media_api.api import create_api_client
|
||||
|
||||
from ....service.auth import AuthService
|
||||
|
||||
@@ -3,7 +3,7 @@ from typing import TYPE_CHECKING
|
||||
import click
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from viu.core.config import AppConfig
|
||||
from viu_cli.core.config import AppConfig
|
||||
|
||||
|
||||
@click.command(help="Print out your anilist stats")
|
||||
@@ -11,7 +11,7 @@ if TYPE_CHECKING:
|
||||
from pathlib import Path
|
||||
from typing import TypedDict
|
||||
|
||||
from viu.cli.service.feedback.service import FeedbackService
|
||||
from viu_cli.cli.service.feedback.service import FeedbackService
|
||||
from typing_extensions import Unpack
|
||||
|
||||
from ...libs.provider.anime.base import BaseAnimeProvider
|
||||
@@ -103,7 +103,7 @@ if TYPE_CHECKING:
|
||||
)
|
||||
@click.pass_obj
|
||||
def download(config: AppConfig, **options: "Unpack[Options]"):
|
||||
from viu.cli.service.feedback.service import FeedbackService
|
||||
from viu_cli.cli.service.feedback.service import FeedbackService
|
||||
|
||||
from ...core.exceptions import ViuError
|
||||
from ...libs.provider.anime.params import (
|
||||
@@ -1,7 +1,7 @@
|
||||
import click
|
||||
from viu.core.config import AppConfig
|
||||
from viu.core.exceptions import ViuError
|
||||
from viu.libs.media_api.types import (
|
||||
from viu_cli.core.config import AppConfig
|
||||
from viu_cli.core.exceptions import ViuError
|
||||
from viu_cli.libs.media_api.types import (
|
||||
MediaFormat,
|
||||
MediaGenre,
|
||||
MediaItem,
|
||||
@@ -72,14 +72,14 @@ def queue(config: AppConfig, **options):
|
||||
and queue the specified episode range for background download.
|
||||
The background worker should be running to process the queue.
|
||||
"""
|
||||
from viu.cli.service.download.service import DownloadService
|
||||
from viu.cli.service.feedback import FeedbackService
|
||||
from viu.cli.service.registry import MediaRegistryService
|
||||
from viu.cli.utils.parser import parse_episode_range
|
||||
from viu.libs.media_api.params import MediaSearchParams
|
||||
from viu.libs.media_api.api import create_api_client
|
||||
from viu.libs.provider.anime.provider import create_provider
|
||||
from viu.libs.selectors import create_selector
|
||||
from viu_cli.cli.service.download.service import DownloadService
|
||||
from viu_cli.cli.service.feedback import FeedbackService
|
||||
from viu_cli.cli.service.registry import MediaRegistryService
|
||||
from viu_cli.cli.utils.parser import parse_episode_range
|
||||
from viu_cli.libs.media_api.params import MediaSearchParams
|
||||
from viu_cli.libs.media_api.api import create_api_client
|
||||
from viu_cli.libs.provider.anime.provider import create_provider
|
||||
from viu_cli.libs.selectors import create_selector
|
||||
from rich.progress import Progress
|
||||
|
||||
feedback = FeedbackService(config)
|
||||
@@ -13,7 +13,7 @@ commands = {
|
||||
@click.group(
|
||||
cls=LazyGroup,
|
||||
name="queue",
|
||||
root="viu.cli.commands.queue.commands",
|
||||
root="viu_cli.cli.commands.queue.commands",
|
||||
invoke_without_command=False,
|
||||
help="Manage the download queue (add, list, resume, clear).",
|
||||
short_help="Manage the download queue.",
|
||||
@@ -1,7 +1,7 @@
|
||||
import click
|
||||
from viu.core.config import AppConfig
|
||||
from viu.core.exceptions import ViuError
|
||||
from viu.libs.media_api.types import (
|
||||
from viu_cli.core.config import AppConfig
|
||||
from viu_cli.core.exceptions import ViuError
|
||||
from viu_cli.libs.media_api.types import (
|
||||
MediaFormat,
|
||||
MediaGenre,
|
||||
MediaItem,
|
||||
@@ -70,14 +70,14 @@ from viu.libs.media_api.types import (
|
||||
)
|
||||
@click.pass_obj
|
||||
def add(config: AppConfig, **options):
|
||||
from viu.cli.service.download import DownloadService
|
||||
from viu.cli.service.feedback import FeedbackService
|
||||
from viu.cli.service.registry import MediaRegistryService
|
||||
from viu.cli.utils.parser import parse_episode_range
|
||||
from viu.libs.media_api.api import create_api_client
|
||||
from viu.libs.media_api.params import MediaSearchParams
|
||||
from viu.libs.provider.anime.provider import create_provider
|
||||
from viu.libs.selectors import create_selector
|
||||
from viu_cli.cli.service.download import DownloadService
|
||||
from viu_cli.cli.service.feedback import FeedbackService
|
||||
from viu_cli.cli.service.registry import MediaRegistryService
|
||||
from viu_cli.cli.utils.parser import parse_episode_range
|
||||
from viu_cli.libs.media_api.api import create_api_client
|
||||
from viu_cli.libs.media_api.params import MediaSearchParams
|
||||
from viu_cli.libs.provider.anime.provider import create_provider
|
||||
from viu_cli.libs.selectors import create_selector
|
||||
from rich.progress import Progress
|
||||
|
||||
feedback = FeedbackService(config)
|
||||
@@ -149,7 +149,7 @@ def add(config: AppConfig, **options):
|
||||
}
|
||||
preview_command = None
|
||||
if config.general.preview != "none":
|
||||
from viu.cli.utils.preview import create_preview_context
|
||||
from viu_cli.cli.utils.preview import create_preview_context
|
||||
|
||||
with create_preview_context() as preview_ctx:
|
||||
preview_command = preview_ctx.get_anime_preview(
|
||||
@@ -1,14 +1,14 @@
|
||||
import click
|
||||
from viu.core.config import AppConfig
|
||||
from viu_cli.core.config import AppConfig
|
||||
|
||||
|
||||
@click.command(name="clear", help="Clear queued items from the registry (QUEUED -> NOT_DOWNLOADED).")
|
||||
@click.option("--force", is_flag=True, help="Do not prompt for confirmation.")
|
||||
@click.pass_obj
|
||||
def clear_cmd(config: AppConfig, force: bool):
|
||||
from viu.cli.service.feedback import FeedbackService
|
||||
from viu.cli.service.registry import MediaRegistryService
|
||||
from viu.cli.service.registry.models import DownloadStatus
|
||||
from viu_cli.cli.service.feedback import FeedbackService
|
||||
from viu_cli.cli.service.registry import MediaRegistryService
|
||||
from viu_cli.cli.service.registry.models import DownloadStatus
|
||||
|
||||
feedback = FeedbackService(config)
|
||||
registry = MediaRegistryService(config.general.media_api, config.media_registry)
|
||||
@@ -1,5 +1,5 @@
|
||||
import click
|
||||
from viu.core.config import AppConfig
|
||||
from viu_cli.core.config import AppConfig
|
||||
|
||||
|
||||
@click.command(name="list", help="List items in the download queue and their statuses.")
|
||||
@@ -10,9 +10,9 @@ from viu.core.config import AppConfig
|
||||
@click.option("--detailed", is_flag=True)
|
||||
@click.pass_obj
|
||||
def list_cmd(config: AppConfig, status: str | None, detailed: bool | None):
|
||||
from viu.cli.service.feedback import FeedbackService
|
||||
from viu.cli.service.registry import MediaRegistryService
|
||||
from viu.cli.service.registry.models import DownloadStatus
|
||||
from viu_cli.cli.service.feedback import FeedbackService
|
||||
from viu_cli.cli.service.registry import MediaRegistryService
|
||||
from viu_cli.cli.service.registry.models import DownloadStatus
|
||||
|
||||
feedback = FeedbackService(config)
|
||||
registry = MediaRegistryService(config.general.media_api, config.media_registry)
|
||||
@@ -1,15 +1,15 @@
|
||||
import click
|
||||
from viu.core.config import AppConfig
|
||||
from viu_cli.core.config import AppConfig
|
||||
|
||||
|
||||
@click.command(name="resume", help="Submit any queued or in-progress downloads to the worker.")
|
||||
@click.pass_obj
|
||||
def resume(config: AppConfig):
|
||||
from viu.cli.service.download.service import DownloadService
|
||||
from viu.cli.service.feedback import FeedbackService
|
||||
from viu.cli.service.registry import MediaRegistryService
|
||||
from viu.libs.media_api.api import create_api_client
|
||||
from viu.libs.provider.anime.provider import create_provider
|
||||
from viu_cli.cli.service.download.service import DownloadService
|
||||
from viu_cli.cli.service.feedback import FeedbackService
|
||||
from viu_cli.cli.service.registry import MediaRegistryService
|
||||
from viu_cli.libs.media_api.api import create_api_client
|
||||
from viu_cli.libs.provider.anime.provider import create_provider
|
||||
|
||||
feedback = FeedbackService(config)
|
||||
media_api = create_api_client(config.general.media_api, config)
|
||||
@@ -19,7 +19,7 @@ commands = {
|
||||
@click.group(
|
||||
cls=LazyGroup,
|
||||
name="registry",
|
||||
root="viu.cli.commands.registry.commands",
|
||||
root="viu_cli.cli.commands.registry.commands",
|
||||
invoke_without_command=True,
|
||||
help="Manage your local media registry - sync, search, backup and maintain your anime database",
|
||||
short_help="Local media registry management",
|
||||
@@ -3,8 +3,8 @@ Registry sync command - synchronize local registry with remote media API
|
||||
"""
|
||||
|
||||
import click
|
||||
from viu.cli.service.feedback.service import FeedbackService
|
||||
from viu.cli.service.registry.service import MediaRegistryService
|
||||
from viu_cli.cli.service.feedback.service import FeedbackService
|
||||
from viu_cli.cli.service.registry.service import MediaRegistryService
|
||||
|
||||
from .....core.config import AppConfig
|
||||
|
||||
@@ -10,7 +10,7 @@ from . import examples
|
||||
if TYPE_CHECKING:
|
||||
from typing import TypedDict
|
||||
|
||||
from viu.cli.service.feedback.service import FeedbackService
|
||||
from viu_cli.cli.service.feedback.service import FeedbackService
|
||||
from typing_extensions import Unpack
|
||||
|
||||
from ...libs.provider.anime.base import BaseAnimeProvider
|
||||
@@ -42,7 +42,7 @@ if TYPE_CHECKING:
|
||||
)
|
||||
@click.pass_obj
|
||||
def search(config: AppConfig, **options: "Unpack[Options]"):
|
||||
from viu.cli.service.feedback.service import FeedbackService
|
||||
from viu_cli.cli.service.feedback.service import FeedbackService
|
||||
|
||||
from ...core.exceptions import ViuError
|
||||
from ...libs.provider.anime.params import (
|
||||
@@ -134,7 +134,7 @@ def stream_anime(
|
||||
episode: str,
|
||||
anime_title: str,
|
||||
):
|
||||
from viu.cli.service.player.service import PlayerService
|
||||
from viu_cli.cli.service.player.service import PlayerService
|
||||
|
||||
from ...libs.player.params import PlayerParams
|
||||
from ...libs.provider.anime.params import EpisodeStreamsParams
|
||||
@@ -1,5 +1,5 @@
|
||||
import click
|
||||
from viu.core.config import AppConfig
|
||||
from viu_cli.core.config import AppConfig
|
||||
|
||||
|
||||
@click.command(help="Run the background worker for notifications and downloads.")
|
||||
@@ -11,14 +11,14 @@ def worker(config: AppConfig):
|
||||
process any queued downloads. It's recommended to run this in the
|
||||
background (e.g., 'viu worker &') or as a system service.
|
||||
"""
|
||||
from viu.cli.service.auth import AuthService
|
||||
from viu.cli.service.download.service import DownloadService
|
||||
from viu.cli.service.feedback import FeedbackService
|
||||
from viu.cli.service.notification.service import NotificationService
|
||||
from viu.cli.service.registry.service import MediaRegistryService
|
||||
from viu.cli.service.worker.service import BackgroundWorkerService
|
||||
from viu.libs.media_api.api import create_api_client
|
||||
from viu.libs.provider.anime.provider import create_provider
|
||||
from viu_cli.cli.service.auth import AuthService
|
||||
from viu_cli.cli.service.download.service import DownloadService
|
||||
from viu_cli.cli.service.feedback import FeedbackService
|
||||
from viu_cli.cli.service.notification.service import NotificationService
|
||||
from viu_cli.cli.service.registry.service import MediaRegistryService
|
||||
from viu_cli.cli.service.worker.service import BackgroundWorkerService
|
||||
from viu_cli.libs.media_api.api import create_api_client
|
||||
from viu_cli.libs.provider.anime.provider import create_provider
|
||||
|
||||
feedback = FeedbackService(config)
|
||||
if not config.worker.enabled:
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user