mirror of
https://github.com/Benexl/FastAnime.git
synced 2025-12-12 15:50:01 -08:00
chore: viu media is better
This commit is contained in:
18
README.md
18
README.md
@@ -20,8 +20,8 @@
|
|||||||
</p>
|
</p>
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
[](https://pypi.org/project/viu_cli/)
|
[](https://pypi.org/project/viu-media/)
|
||||||
[](https://pypi.org/project/viu_cli/)
|
[](https://pypi.org/project/viu-media/)
|
||||||
[](https://github.com/Benexl/Viu/actions)
|
[](https://github.com/Benexl/Viu/actions)
|
||||||
[](https://discord.gg/HBEmAwvbHV)
|
[](https://discord.gg/HBEmAwvbHV)
|
||||||
[](https://github.com/Benexl/Viu/issues)
|
[](https://github.com/Benexl/Viu/issues)
|
||||||
@@ -69,13 +69,13 @@ The best way to install Viu is with [**uv**](https://github.com/astral-sh/uv), a
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Install with all optional features for the full experience
|
# Install with all optional features for the full experience
|
||||||
uv tool install "viu_cli[standard]"
|
uv tool install "viu-media[standard]"
|
||||||
|
|
||||||
# Or, pick and choose the extras you need:
|
# Or, pick and choose the extras you need:
|
||||||
uv tool install viu_cli # Core functionality only
|
uv tool install viu-media # Core functionality only
|
||||||
uv tool install "viu_cli[download]" # For advanced downloading with yt-dlp
|
uv tool install "viu-media[download]" # For advanced downloading with yt-dlp
|
||||||
uv tool install "viu_cli[discord]" # For Discord Rich Presence
|
uv tool install "viu-media[discord]" # For Discord Rich Presence
|
||||||
uv tool install "viu_cli[notifications]" # For desktop notifications
|
uv tool install "viu-media[notifications]" # For desktop notifications
|
||||||
```
|
```
|
||||||
|
|
||||||
### Other Installation Methods
|
### Other Installation Methods
|
||||||
@@ -100,12 +100,12 @@ uv tool install "viu_cli[notifications]" # For desktop notifications
|
|||||||
|
|
||||||
#### Using pipx (for isolated environments)
|
#### Using pipx (for isolated environments)
|
||||||
```bash
|
```bash
|
||||||
pipx install "viu_cli[standard]"
|
pipx install "viu-media[standard]"
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Using pip
|
#### Using pip
|
||||||
```bash
|
```bash
|
||||||
pip install "viu_cli[standard]"
|
pip install "viu-media[standard]"
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "viu_cli"
|
name = "viu-media"
|
||||||
version = "3.2.6"
|
version = "3.2.6"
|
||||||
description = "A browser anime site experience from the terminal"
|
description = "A browser anime site experience from the terminal"
|
||||||
license = "UNLICENSE"
|
license = "UNLICENSE"
|
||||||
@@ -14,7 +14,7 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[project.scripts]
|
[project.scripts]
|
||||||
viu = 'viu_cli:Cli'
|
viu = 'viu_media:Cli'
|
||||||
|
|
||||||
[project.optional-dependencies]
|
[project.optional-dependencies]
|
||||||
standard = [
|
standard = [
|
||||||
|
|||||||
2
viu
Executable file → Normal file
2
viu
Executable file → Normal file
@@ -3,4 +3,4 @@ provider_type=$1
|
|||||||
provider_name=$2
|
provider_name=$2
|
||||||
[ -z "$provider_type" ] && echo "Please specify provider type" && exit
|
[ -z "$provider_type" ] && echo "Please specify provider type" && exit
|
||||||
[ -z "$provider_name" ] && echo "Please specify provider type" && exit
|
[ -z "$provider_name" ] && echo "Please specify provider type" && exit
|
||||||
uv run python -m viu_cli.libs.provider.${provider_type}.${provider_name}.provider
|
uv run python -m viu_media.libs.provider.${provider_type}.${provider_name}.provider
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ commands = {
|
|||||||
|
|
||||||
@click.group(
|
@click.group(
|
||||||
cls=LazyGroup,
|
cls=LazyGroup,
|
||||||
root="viu_cli.cli.commands",
|
root="viu_media.cli.commands",
|
||||||
invoke_without_command=True,
|
invoke_without_command=True,
|
||||||
lazy_subcommands=commands,
|
lazy_subcommands=commands,
|
||||||
context_settings=dict(auto_envvar_prefix=PROJECT_NAME),
|
context_settings=dict(auto_envvar_prefix=PROJECT_NAME),
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ commands = {
|
|||||||
@click.group(
|
@click.group(
|
||||||
cls=LazyGroup,
|
cls=LazyGroup,
|
||||||
name="anilist",
|
name="anilist",
|
||||||
root="viu_cli.cli.commands.anilist.commands",
|
root="viu_media.cli.commands.anilist.commands",
|
||||||
invoke_without_command=True,
|
invoke_without_command=True,
|
||||||
help="A beautiful interface that gives you access to a commplete streaming experience",
|
help="A beautiful interface that gives you access to a commplete streaming experience",
|
||||||
short_help="Access all streaming options",
|
short_help="Access all streaming options",
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
from typing import TYPE_CHECKING, Dict, List
|
from typing import TYPE_CHECKING, Dict, List
|
||||||
|
|
||||||
import click
|
import click
|
||||||
from viu_cli.cli.utils.completion import anime_titles_shell_complete
|
from viu_media.cli.utils.completion import anime_titles_shell_complete
|
||||||
from viu_cli.core.config import AppConfig
|
from viu_media.core.config import AppConfig
|
||||||
from viu_cli.core.exceptions import ViuError
|
from viu_media.core.exceptions import ViuError
|
||||||
from viu_cli.libs.media_api.types import (
|
from viu_media.libs.media_api.types import (
|
||||||
MediaFormat,
|
MediaFormat,
|
||||||
MediaGenre,
|
MediaGenre,
|
||||||
MediaItem,
|
MediaItem,
|
||||||
@@ -112,15 +112,15 @@ if TYPE_CHECKING:
|
|||||||
)
|
)
|
||||||
@click.pass_obj
|
@click.pass_obj
|
||||||
def download(config: AppConfig, **options: "Unpack[DownloadOptions]"):
|
def download(config: AppConfig, **options: "Unpack[DownloadOptions]"):
|
||||||
from viu_cli.cli.service.download.service import DownloadService
|
from viu_media.cli.service.download.service import DownloadService
|
||||||
from viu_cli.cli.service.feedback import FeedbackService
|
from viu_media.cli.service.feedback import FeedbackService
|
||||||
from viu_cli.cli.service.registry import MediaRegistryService
|
from viu_media.cli.service.registry import MediaRegistryService
|
||||||
from viu_cli.cli.service.watch_history import WatchHistoryService
|
from viu_media.cli.service.watch_history import WatchHistoryService
|
||||||
from viu_cli.cli.utils.parser import parse_episode_range
|
from viu_media.cli.utils.parser import parse_episode_range
|
||||||
from viu_cli.libs.media_api.api import create_api_client
|
from viu_media.libs.media_api.api import create_api_client
|
||||||
from viu_cli.libs.media_api.params import MediaSearchParams
|
from viu_media.libs.media_api.params import MediaSearchParams
|
||||||
from viu_cli.libs.provider.anime.provider import create_provider
|
from viu_media.libs.provider.anime.provider import create_provider
|
||||||
from viu_cli.libs.selectors import create_selector
|
from viu_media.libs.selectors import create_selector
|
||||||
from rich.progress import Progress
|
from rich.progress import Progress
|
||||||
|
|
||||||
feedback = FeedbackService(config)
|
feedback = FeedbackService(config)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import click
|
import click
|
||||||
from viu_cli.core.config import AppConfig
|
from viu_media.core.config import AppConfig
|
||||||
from rich.console import Console
|
from rich.console import Console
|
||||||
from rich.table import Table
|
from rich.table import Table
|
||||||
|
|
||||||
@@ -11,8 +11,8 @@ def notifications(config: AppConfig):
|
|||||||
Displays unread notifications from AniList.
|
Displays unread notifications from AniList.
|
||||||
Running this command will also mark the notifications as read on the AniList website.
|
Running this command will also mark the notifications as read on the AniList website.
|
||||||
"""
|
"""
|
||||||
from viu_cli.cli.service.feedback import FeedbackService
|
from viu_media.cli.service.feedback import FeedbackService
|
||||||
from viu_cli.libs.media_api.api import create_api_client
|
from viu_media.libs.media_api.api import create_api_client
|
||||||
|
|
||||||
from ....service.auth import AuthService
|
from ....service.auth import AuthService
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from typing import TYPE_CHECKING
|
|||||||
import click
|
import click
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from viu_cli.core.config import AppConfig
|
from viu_media.core.config import AppConfig
|
||||||
|
|
||||||
|
|
||||||
@click.command(help="Print out your anilist stats")
|
@click.command(help="Print out your anilist stats")
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ if TYPE_CHECKING:
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import TypedDict
|
from typing import TypedDict
|
||||||
|
|
||||||
from viu_cli.cli.service.feedback.service import FeedbackService
|
from viu_media.cli.service.feedback.service import FeedbackService
|
||||||
from typing_extensions import Unpack
|
from typing_extensions import Unpack
|
||||||
|
|
||||||
from ...libs.provider.anime.base import BaseAnimeProvider
|
from ...libs.provider.anime.base import BaseAnimeProvider
|
||||||
@@ -103,7 +103,7 @@ if TYPE_CHECKING:
|
|||||||
)
|
)
|
||||||
@click.pass_obj
|
@click.pass_obj
|
||||||
def download(config: AppConfig, **options: "Unpack[Options]"):
|
def download(config: AppConfig, **options: "Unpack[Options]"):
|
||||||
from viu_cli.cli.service.feedback.service import FeedbackService
|
from viu_media.cli.service.feedback.service import FeedbackService
|
||||||
|
|
||||||
from ...core.exceptions import ViuError
|
from ...core.exceptions import ViuError
|
||||||
from ...libs.provider.anime.params import (
|
from ...libs.provider.anime.params import (
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import click
|
import click
|
||||||
from viu_cli.core.config import AppConfig
|
from viu_media.core.config import AppConfig
|
||||||
from viu_cli.core.exceptions import ViuError
|
from viu_media.core.exceptions import ViuError
|
||||||
from viu_cli.libs.media_api.types import (
|
from viu_media.libs.media_api.types import (
|
||||||
MediaFormat,
|
MediaFormat,
|
||||||
MediaGenre,
|
MediaGenre,
|
||||||
MediaItem,
|
MediaItem,
|
||||||
@@ -76,14 +76,14 @@ def queue(config: AppConfig, **options):
|
|||||||
and queue the specified episode range for background download.
|
and queue the specified episode range for background download.
|
||||||
The background worker should be running to process the queue.
|
The background worker should be running to process the queue.
|
||||||
"""
|
"""
|
||||||
from viu_cli.cli.service.download.service import DownloadService
|
from viu_media.cli.service.download.service import DownloadService
|
||||||
from viu_cli.cli.service.feedback import FeedbackService
|
from viu_media.cli.service.feedback import FeedbackService
|
||||||
from viu_cli.cli.service.registry import MediaRegistryService
|
from viu_media.cli.service.registry import MediaRegistryService
|
||||||
from viu_cli.cli.utils.parser import parse_episode_range
|
from viu_media.cli.utils.parser import parse_episode_range
|
||||||
from viu_cli.libs.media_api.params import MediaSearchParams
|
from viu_media.libs.media_api.params import MediaSearchParams
|
||||||
from viu_cli.libs.media_api.api import create_api_client
|
from viu_media.libs.media_api.api import create_api_client
|
||||||
from viu_cli.libs.provider.anime.provider import create_provider
|
from viu_media.libs.provider.anime.provider import create_provider
|
||||||
from viu_cli.libs.selectors import create_selector
|
from viu_media.libs.selectors import create_selector
|
||||||
from rich.progress import Progress
|
from rich.progress import Progress
|
||||||
|
|
||||||
feedback = FeedbackService(config)
|
feedback = FeedbackService(config)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ commands = {
|
|||||||
@click.group(
|
@click.group(
|
||||||
cls=LazyGroup,
|
cls=LazyGroup,
|
||||||
name="queue",
|
name="queue",
|
||||||
root="viu_cli.cli.commands.queue.commands",
|
root="viu_media.cli.commands.queue.commands",
|
||||||
invoke_without_command=False,
|
invoke_without_command=False,
|
||||||
help="Manage the download queue (add, list, resume, clear).",
|
help="Manage the download queue (add, list, resume, clear).",
|
||||||
short_help="Manage the download queue.",
|
short_help="Manage the download queue.",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import click
|
import click
|
||||||
from viu_cli.core.config import AppConfig
|
from viu_media.core.config import AppConfig
|
||||||
from viu_cli.core.exceptions import ViuError
|
from viu_media.core.exceptions import ViuError
|
||||||
from viu_cli.libs.media_api.types import (
|
from viu_media.libs.media_api.types import (
|
||||||
MediaFormat,
|
MediaFormat,
|
||||||
MediaGenre,
|
MediaGenre,
|
||||||
MediaItem,
|
MediaItem,
|
||||||
@@ -70,14 +70,14 @@ from viu_cli.libs.media_api.types import (
|
|||||||
)
|
)
|
||||||
@click.pass_obj
|
@click.pass_obj
|
||||||
def add(config: AppConfig, **options):
|
def add(config: AppConfig, **options):
|
||||||
from viu_cli.cli.service.download import DownloadService
|
from viu_media.cli.service.download import DownloadService
|
||||||
from viu_cli.cli.service.feedback import FeedbackService
|
from viu_media.cli.service.feedback import FeedbackService
|
||||||
from viu_cli.cli.service.registry import MediaRegistryService
|
from viu_media.cli.service.registry import MediaRegistryService
|
||||||
from viu_cli.cli.utils.parser import parse_episode_range
|
from viu_media.cli.utils.parser import parse_episode_range
|
||||||
from viu_cli.libs.media_api.api import create_api_client
|
from viu_media.libs.media_api.api import create_api_client
|
||||||
from viu_cli.libs.media_api.params import MediaSearchParams
|
from viu_media.libs.media_api.params import MediaSearchParams
|
||||||
from viu_cli.libs.provider.anime.provider import create_provider
|
from viu_media.libs.provider.anime.provider import create_provider
|
||||||
from viu_cli.libs.selectors import create_selector
|
from viu_media.libs.selectors import create_selector
|
||||||
from rich.progress import Progress
|
from rich.progress import Progress
|
||||||
|
|
||||||
feedback = FeedbackService(config)
|
feedback = FeedbackService(config)
|
||||||
@@ -149,7 +149,7 @@ def add(config: AppConfig, **options):
|
|||||||
}
|
}
|
||||||
preview_command = None
|
preview_command = None
|
||||||
if config.general.preview != "none":
|
if config.general.preview != "none":
|
||||||
from viu_cli.cli.utils.preview import create_preview_context
|
from viu_media.cli.utils.preview import create_preview_context
|
||||||
|
|
||||||
with create_preview_context() as preview_ctx:
|
with create_preview_context() as preview_ctx:
|
||||||
preview_command = preview_ctx.get_anime_preview(
|
preview_command = preview_ctx.get_anime_preview(
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import click
|
import click
|
||||||
from viu_cli.core.config import AppConfig
|
from viu_media.core.config import AppConfig
|
||||||
|
|
||||||
|
|
||||||
@click.command(
|
@click.command(
|
||||||
@@ -9,9 +9,9 @@ from viu_cli.core.config import AppConfig
|
|||||||
@click.option("--force", is_flag=True, help="Do not prompt for confirmation.")
|
@click.option("--force", is_flag=True, help="Do not prompt for confirmation.")
|
||||||
@click.pass_obj
|
@click.pass_obj
|
||||||
def clear_cmd(config: AppConfig, force: bool):
|
def clear_cmd(config: AppConfig, force: bool):
|
||||||
from viu_cli.cli.service.feedback import FeedbackService
|
from viu_media.cli.service.feedback import FeedbackService
|
||||||
from viu_cli.cli.service.registry import MediaRegistryService
|
from viu_media.cli.service.registry import MediaRegistryService
|
||||||
from viu_cli.cli.service.registry.models import DownloadStatus
|
from viu_media.cli.service.registry.models import DownloadStatus
|
||||||
|
|
||||||
feedback = FeedbackService(config)
|
feedback = FeedbackService(config)
|
||||||
registry = MediaRegistryService(config.general.media_api, config.media_registry)
|
registry = MediaRegistryService(config.general.media_api, config.media_registry)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import click
|
import click
|
||||||
from viu_cli.core.config import AppConfig
|
from viu_media.core.config import AppConfig
|
||||||
|
|
||||||
|
|
||||||
@click.command(name="list", help="List items in the download queue and their statuses.")
|
@click.command(name="list", help="List items in the download queue and their statuses.")
|
||||||
@@ -10,9 +10,9 @@ from viu_cli.core.config import AppConfig
|
|||||||
@click.option("--detailed", is_flag=True)
|
@click.option("--detailed", is_flag=True)
|
||||||
@click.pass_obj
|
@click.pass_obj
|
||||||
def list_cmd(config: AppConfig, status: str | None, detailed: bool | None):
|
def list_cmd(config: AppConfig, status: str | None, detailed: bool | None):
|
||||||
from viu_cli.cli.service.feedback import FeedbackService
|
from viu_media.cli.service.feedback import FeedbackService
|
||||||
from viu_cli.cli.service.registry import MediaRegistryService
|
from viu_media.cli.service.registry import MediaRegistryService
|
||||||
from viu_cli.cli.service.registry.models import DownloadStatus
|
from viu_media.cli.service.registry.models import DownloadStatus
|
||||||
|
|
||||||
feedback = FeedbackService(config)
|
feedback = FeedbackService(config)
|
||||||
registry = MediaRegistryService(config.general.media_api, config.media_registry)
|
registry = MediaRegistryService(config.general.media_api, config.media_registry)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import click
|
import click
|
||||||
from viu_cli.core.config import AppConfig
|
from viu_media.core.config import AppConfig
|
||||||
|
|
||||||
|
|
||||||
@click.command(
|
@click.command(
|
||||||
@@ -7,11 +7,11 @@ from viu_cli.core.config import AppConfig
|
|||||||
)
|
)
|
||||||
@click.pass_obj
|
@click.pass_obj
|
||||||
def resume(config: AppConfig):
|
def resume(config: AppConfig):
|
||||||
from viu_cli.cli.service.download.service import DownloadService
|
from viu_media.cli.service.download.service import DownloadService
|
||||||
from viu_cli.cli.service.feedback import FeedbackService
|
from viu_media.cli.service.feedback import FeedbackService
|
||||||
from viu_cli.cli.service.registry import MediaRegistryService
|
from viu_media.cli.service.registry import MediaRegistryService
|
||||||
from viu_cli.libs.media_api.api import create_api_client
|
from viu_media.libs.media_api.api import create_api_client
|
||||||
from viu_cli.libs.provider.anime.provider import create_provider
|
from viu_media.libs.provider.anime.provider import create_provider
|
||||||
|
|
||||||
feedback = FeedbackService(config)
|
feedback = FeedbackService(config)
|
||||||
media_api = create_api_client(config.general.media_api, config)
|
media_api = create_api_client(config.general.media_api, config)
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ commands = {
|
|||||||
@click.group(
|
@click.group(
|
||||||
cls=LazyGroup,
|
cls=LazyGroup,
|
||||||
name="registry",
|
name="registry",
|
||||||
root="viu_cli.cli.commands.registry.commands",
|
root="viu_media.cli.commands.registry.commands",
|
||||||
invoke_without_command=True,
|
invoke_without_command=True,
|
||||||
help="Manage your local media registry - sync, search, backup and maintain your anime database",
|
help="Manage your local media registry - sync, search, backup and maintain your anime database",
|
||||||
short_help="Local media registry management",
|
short_help="Local media registry management",
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ Registry sync command - synchronize local registry with remote media API
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import click
|
import click
|
||||||
from viu_cli.cli.service.feedback.service import FeedbackService
|
from viu_media.cli.service.feedback.service import FeedbackService
|
||||||
from viu_cli.cli.service.registry.service import MediaRegistryService
|
from viu_media.cli.service.registry.service import MediaRegistryService
|
||||||
|
|
||||||
from .....core.config import AppConfig
|
from .....core.config import AppConfig
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from . import examples
|
|||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import TypedDict
|
from typing import TypedDict
|
||||||
|
|
||||||
from viu_cli.cli.service.feedback.service import FeedbackService
|
from viu_media.cli.service.feedback.service import FeedbackService
|
||||||
from typing_extensions import Unpack
|
from typing_extensions import Unpack
|
||||||
|
|
||||||
from ...libs.provider.anime.base import BaseAnimeProvider
|
from ...libs.provider.anime.base import BaseAnimeProvider
|
||||||
@@ -42,7 +42,7 @@ if TYPE_CHECKING:
|
|||||||
)
|
)
|
||||||
@click.pass_obj
|
@click.pass_obj
|
||||||
def search(config: AppConfig, **options: "Unpack[Options]"):
|
def search(config: AppConfig, **options: "Unpack[Options]"):
|
||||||
from viu_cli.cli.service.feedback.service import FeedbackService
|
from viu_media.cli.service.feedback.service import FeedbackService
|
||||||
|
|
||||||
from ...core.exceptions import ViuError
|
from ...core.exceptions import ViuError
|
||||||
from ...libs.provider.anime.params import (
|
from ...libs.provider.anime.params import (
|
||||||
@@ -134,7 +134,7 @@ def stream_anime(
|
|||||||
episode: str,
|
episode: str,
|
||||||
anime_title: str,
|
anime_title: str,
|
||||||
):
|
):
|
||||||
from viu_cli.cli.service.player.service import PlayerService
|
from viu_media.cli.service.player.service import PlayerService
|
||||||
|
|
||||||
from ...libs.player.params import PlayerParams
|
from ...libs.player.params import PlayerParams
|
||||||
from ...libs.provider.anime.params import EpisodeStreamsParams
|
from ...libs.provider.anime.params import EpisodeStreamsParams
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import click
|
import click
|
||||||
from viu_cli.core.config import AppConfig
|
from viu_media.core.config import AppConfig
|
||||||
|
|
||||||
|
|
||||||
@click.command(help="Run the background worker for notifications and downloads.")
|
@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
|
process any queued downloads. It's recommended to run this in the
|
||||||
background (e.g., 'viu worker &') or as a system service.
|
background (e.g., 'viu worker &') or as a system service.
|
||||||
"""
|
"""
|
||||||
from viu_cli.cli.service.auth import AuthService
|
from viu_media.cli.service.auth import AuthService
|
||||||
from viu_cli.cli.service.download.service import DownloadService
|
from viu_media.cli.service.download.service import DownloadService
|
||||||
from viu_cli.cli.service.feedback import FeedbackService
|
from viu_media.cli.service.feedback import FeedbackService
|
||||||
from viu_cli.cli.service.notification.service import NotificationService
|
from viu_media.cli.service.notification.service import NotificationService
|
||||||
from viu_cli.cli.service.registry.service import MediaRegistryService
|
from viu_media.cli.service.registry.service import MediaRegistryService
|
||||||
from viu_cli.cli.service.worker.service import BackgroundWorkerService
|
from viu_media.cli.service.worker.service import BackgroundWorkerService
|
||||||
from viu_cli.libs.media_api.api import create_api_client
|
from viu_media.libs.media_api.api import create_api_client
|
||||||
from viu_cli.libs.provider.anime.provider import create_provider
|
from viu_media.libs.provider.anime.provider import create_provider
|
||||||
|
|
||||||
feedback = FeedbackService(config)
|
feedback = FeedbackService(config)
|
||||||
if not config.worker.enabled:
|
if not config.worker.enabled:
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from ...state import InternalDirective, State
|
|||||||
@session.menu
|
@session.menu
|
||||||
def download_episodes(ctx: Context, state: State) -> State | InternalDirective:
|
def download_episodes(ctx: Context, state: State) -> State | InternalDirective:
|
||||||
"""Menu to select and download episodes synchronously."""
|
"""Menu to select and download episodes synchronously."""
|
||||||
from viu_cli.cli.utils.search import find_best_match_title
|
from viu_media.cli.utils.search import find_best_match_title
|
||||||
from .....core.utils.normalizer import normalize_title
|
from .....core.utils.normalizer import normalize_title
|
||||||
from ....service.download.service import DownloadService
|
from ....service.download.service import DownloadService
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from ...state import InternalDirective, MenuName, ProviderState, State
|
|||||||
|
|
||||||
@session.menu
|
@session.menu
|
||||||
def provider_search(ctx: Context, state: State) -> State | InternalDirective:
|
def provider_search(ctx: Context, state: State) -> State | InternalDirective:
|
||||||
from viu_cli.cli.utils.search import find_best_match_title
|
from viu_media.cli.utils.search import find_best_match_title
|
||||||
|
|
||||||
from .....core.utils.normalizer import normalize_title, update_user_normalizer_json
|
from .....core.utils.normalizer import normalize_title, update_user_normalizer_json
|
||||||
|
|
||||||
|
|||||||
@@ -317,7 +317,7 @@ class Session:
|
|||||||
if filename.endswith(".py") and not filename.startswith("__"):
|
if filename.endswith(".py") and not filename.startswith("__"):
|
||||||
module_name = filename[:-3]
|
module_name = filename[:-3]
|
||||||
full_module_name = (
|
full_module_name = (
|
||||||
f"viu_cli.cli.interactive.menu.{package_name}.{module_name}"
|
f"viu_media.cli.interactive.menu.{package_name}.{module_name}"
|
||||||
)
|
)
|
||||||
file_path = package_path / filename
|
file_path = package_path / filename
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import logging
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import TYPE_CHECKING, List
|
from typing import TYPE_CHECKING, List
|
||||||
|
|
||||||
from viu_cli.cli.utils.search import find_best_match_title
|
from viu_media.cli.utils.search import find_best_match_title
|
||||||
|
|
||||||
from ....core.config.model import AppConfig
|
from ....core.config.model import AppConfig
|
||||||
from ....core.constants import APP_CACHE_DIR
|
from ....core.constants import APP_CACHE_DIR
|
||||||
|
|||||||
@@ -3,12 +3,12 @@ from pathlib import Path
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
from viu_cli.cli.service.registry import MediaRegistryService
|
from viu_media.cli.service.registry import MediaRegistryService
|
||||||
from viu_cli.cli.service.registry.models import DownloadStatus
|
from viu_media.cli.service.registry.models import DownloadStatus
|
||||||
from viu_cli.core.config.model import AppConfig
|
from viu_media.core.config.model import AppConfig
|
||||||
from viu_cli.core.constants import APP_CACHE_DIR
|
from viu_media.core.constants import APP_CACHE_DIR
|
||||||
from viu_cli.libs.media_api.base import BaseApiClient
|
from viu_media.libs.media_api.base import BaseApiClient
|
||||||
from viu_cli.libs.media_api.types import MediaItem, Notification
|
from viu_media.libs.media_api.types import MediaItem, Notification
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from plyer import notification as plyer_notification
|
from plyer import notification as plyer_notification
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ import threading
|
|||||||
import time
|
import time
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from viu_cli.cli.service.download.service import DownloadService
|
from viu_media.cli.service.download.service import DownloadService
|
||||||
from viu_cli.cli.service.notification.service import NotificationService
|
from viu_media.cli.service.notification.service import NotificationService
|
||||||
from viu_cli.core.config.model import WorkerConfig
|
from viu_media.core.config.model import WorkerConfig
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
"""Search functionality."""
|
"""Search functionality."""
|
||||||
|
|
||||||
from viu_cli.core.utils.fuzzy import fuzz
|
from viu_media.core.utils.fuzzy import fuzz
|
||||||
from viu_cli.core.utils.normalizer import normalize_title
|
from viu_media.core.utils.normalizer import normalize_title
|
||||||
from viu_cli.libs.provider.anime.types import SearchResult, ProviderName
|
from viu_media.libs.provider.anime.types import SearchResult, ProviderName
|
||||||
from viu_cli.libs.media_api.types import MediaItem
|
from viu_media.libs.media_api.types import MediaItem
|
||||||
|
|
||||||
|
|
||||||
def find_best_match_title(
|
def find_best_match_title(
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ APP_NAME = os.environ.get(f"{PROJECT_NAME}_APP_NAME", PROJECT_NAME_LOWER)
|
|||||||
|
|
||||||
USER_NAME = os.environ.get("USERNAME", "User")
|
USER_NAME = os.environ.get("USERNAME", "User")
|
||||||
|
|
||||||
__version__ = metadata.version("viu_cli")
|
__version__ = metadata.version("viu_media")
|
||||||
|
|
||||||
AUTHOR = "Benexl"
|
AUTHOR = "Benexl"
|
||||||
GIT_REPO = "github.com"
|
GIT_REPO = "github.com"
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ otherwise falls back to a pure Python implementation with the same API.
|
|||||||
Usage:
|
Usage:
|
||||||
Basic usage with the convenience functions:
|
Basic usage with the convenience functions:
|
||||||
|
|
||||||
>>> from viu_cli.core.utils.fuzzy import fuzz
|
>>> from viu_media.core.utils.fuzzy import fuzz
|
||||||
>>> fuzz.ratio("hello world", "hello")
|
>>> fuzz.ratio("hello world", "hello")
|
||||||
62
|
62
|
||||||
>>> fuzz.partial_ratio("hello world", "hello")
|
>>> fuzz.partial_ratio("hello world", "hello")
|
||||||
@@ -15,7 +15,7 @@ Usage:
|
|||||||
|
|
||||||
Using the FuzzyMatcher class directly:
|
Using the FuzzyMatcher class directly:
|
||||||
|
|
||||||
>>> from viu_cli.core.utils.fuzzy import FuzzyMatcher
|
>>> from viu_media.core.utils.fuzzy import FuzzyMatcher
|
||||||
>>> matcher = FuzzyMatcher()
|
>>> matcher = FuzzyMatcher()
|
||||||
>>> matcher.backend
|
>>> matcher.backend
|
||||||
'thefuzz' # or 'pure_python' if thefuzz is not available
|
'thefuzz' # or 'pure_python' if thefuzz is not available
|
||||||
@@ -24,7 +24,7 @@ Usage:
|
|||||||
|
|
||||||
For drop-in replacement of thefuzz.fuzz:
|
For drop-in replacement of thefuzz.fuzz:
|
||||||
|
|
||||||
>>> from viu_cli.core.utils.fuzzy import ratio, partial_ratio
|
>>> from viu_media.core.utils.fuzzy import ratio, partial_ratio
|
||||||
>>> ratio("test", "best")
|
>>> ratio("test", "best")
|
||||||
75
|
75
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
# Map the client name to its import path AND the config section it needs.
|
# Map the client name to its import path AND the config section it needs.
|
||||||
API_CLIENTS = {
|
API_CLIENTS = {
|
||||||
"anilist": ("viu_cli.libs.media_api.anilist.api.AniListApi", "anilist"),
|
"anilist": ("viu_media.libs.media_api.anilist.api.AniListApi", "anilist"),
|
||||||
"jikan": ("viu_cli.libs.media_api.jikan.api.JikanApi", "jikan"), # For the future
|
"jikan": ("viu_media.libs.media_api.jikan.api.JikanApi", "jikan"), # For the future
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ def test_media_api(api_client: BaseApiClient):
|
|||||||
api_client: An instance of AniListApi to test
|
api_client: An instance of AniListApi to test
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
Run this module directly: python -m viu_cli.libs.media_api.anilist.api
|
Run this module directly: python -m viu_media.libs.media_api.anilist.api
|
||||||
Or import and call: test_media_api(AniListApi(config, client))
|
Or import and call: test_media_api(AniListApi(config, client))
|
||||||
"""
|
"""
|
||||||
from ....core.constants import APP_ASCII_ART
|
from ....core.constants import APP_ASCII_ART
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class AnimeProviderFactory:
|
|||||||
module_name, class_name = import_path.split(".", 1)
|
module_name, class_name = import_path.split(".", 1)
|
||||||
|
|
||||||
# Construct the full package path for dynamic import
|
# Construct the full package path for dynamic import
|
||||||
package_path = f"viu_cli.libs.provider.anime.{provider_name.value.lower()}"
|
package_path = f"viu_media.libs.provider.anime.{provider_name.value.lower()}"
|
||||||
|
|
||||||
try:
|
try:
|
||||||
provider_module = importlib.import_module(f".{module_name}", package_path)
|
provider_module = importlib.import_module(f".{module_name}", package_path)
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ class MangaProvider:
|
|||||||
def lazyload_provider(self, provider):
|
def lazyload_provider(self, provider):
|
||||||
"""updates the current provider being used"""
|
"""updates the current provider being used"""
|
||||||
_, anime_provider_cls_name = manga_sources[provider].split(".", 1)
|
_, anime_provider_cls_name = manga_sources[provider].split(".", 1)
|
||||||
package = f"viu_cli.libs.manga_provider.{provider}"
|
package = f"viu_media.libs.manga_provider.{provider}"
|
||||||
provider_api = importlib.import_module(".api", package)
|
provider_api = importlib.import_module(".api", package)
|
||||||
manga_provider = getattr(provider_api, anime_provider_cls_name)
|
manga_provider = getattr(provider_api, anime_provider_cls_name)
|
||||||
self.manga_provider = manga_provider()
|
self.manga_provider = manga_provider()
|
||||||
|
|||||||
Reference in New Issue
Block a user