Skip to content

Commit

Permalink
feat: add option to change quality in menu (#176)
Browse files Browse the repository at this point in the history
  • Loading branch information
sdaqo committed May 30, 2024
1 parent 8ec2663 commit 578f575
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 3 deletions.
2 changes: 1 addition & 1 deletion cli/src/anipy_cli/arg_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from anipy_cli import __version__


@dataclass(frozen=True)
@dataclass()
class CliArgs:
download: bool
binge: bool
Expand Down
37 changes: 35 additions & 2 deletions cli/src/anipy_cli/menus/menu.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import sys
from typing import TYPE_CHECKING, List

from InquirerPy import inquirer
from InquirerPy.base.control import Choice
from anipy_api.download import Downloader
from anipy_api.provider import LanguageTypeEnum
from anipy_api.provider import LanguageTypeEnum, ProviderStream
from anipy_api.locallist import LocalList

from anipy_cli.colors import colors, cprint
Expand All @@ -15,7 +17,7 @@
if TYPE_CHECKING:
from anipy_api.anime import Anime
from anipy_api.player import PlayerBase
from anipy_api.provider import Episode, ProviderStream
from anipy_api.provider import Episode

from anipy_cli.arg_parser import CliArgs

Expand Down Expand Up @@ -53,6 +55,7 @@ def menu_options(self) -> List["MenuOption"]:
MenuOption("Select from history", self.selec_hist, "h"),
MenuOption("Search for Anime", self.search, "a"),
MenuOption("Add to seasonals", self.add_seasonal, "t"),
MenuOption("Change video quality", self.change_quality, "v"),
MenuOption("Print Video Info", self.video_info, "i"),
MenuOption("Download Episode", self.download_video, "d"),
MenuOption("Quit", self.quit, "q"),
Expand Down Expand Up @@ -168,6 +171,36 @@ def add_seasonal(self):
)
cprint(colors.GREEN, "Anime added to seasonals!")

def change_quality(self):
with DotSpinner(
"Extracting streams for ",
colors.BLUE,
f"{self.anime.name} ({self.lang})",
" Episode ",
self.stream.episode,
"...",
):
streams = self.anime.get_videos(self.stream.episode, self.lang)
streams.reverse()

stream = inquirer.select( # type: ignore
message="Select Stream:",
choices=[
Choice(value=s, name=f"{s.resolution}p - {s.url}") for s in streams
],
long_instruction="To skip this prompt press ctrl+z",
mandatory=False,
).execute()

if stream is None:
return

stream = ProviderStream(**stream)
self.options.quality = stream.resolution
self.stream = stream
self.player.play_title(self.anime, self.stream)
self.print_options()

def download_video(self):
config = Config()
with DotSpinner("Starting Download...") as s:
Expand Down

0 comments on commit 578f575

Please sign in to comment.