mirror of
https://github.com/ihabunek/twitch-dl
synced 2024-08-30 18:32:25 +00:00
80 lines
2.0 KiB
Python
80 lines
2.0 KiB
Python
import sys
|
|
from typing import List, Optional
|
|
|
|
import click
|
|
|
|
from twitchdl import twitch
|
|
from twitchdl.exceptions import ConsoleError
|
|
from twitchdl.output import print_json, print_log, print_paged, print_video, print_video_compact
|
|
|
|
|
|
def videos(
|
|
channel_name: str,
|
|
*,
|
|
all: bool,
|
|
compact: bool,
|
|
games: List[str],
|
|
json: bool,
|
|
limit: Optional[int],
|
|
pager: Optional[int],
|
|
sort: twitch.VideosSort,
|
|
type: twitch.VideosType,
|
|
):
|
|
game_ids = get_game_ids(games)
|
|
|
|
# Set different defaults for limit for compact display
|
|
limit = limit or (40 if compact else 10)
|
|
|
|
# Ignore --limit if --pager or --all are given
|
|
max_videos = sys.maxsize if all or pager else limit
|
|
|
|
total_count, generator = twitch.channel_videos_generator(
|
|
channel_name, max_videos, sort, type, game_ids=game_ids
|
|
)
|
|
|
|
if json:
|
|
videos = list(generator)
|
|
print_json({"count": len(videos), "totalCount": total_count, "videos": videos})
|
|
return
|
|
|
|
if total_count == 0:
|
|
click.echo("No videos found")
|
|
return
|
|
|
|
if pager:
|
|
print_fn = print_video_compact if compact else print_video
|
|
print_paged("Videos", generator, print_fn, pager, total_count)
|
|
return
|
|
|
|
count = 0
|
|
for video in generator:
|
|
if compact:
|
|
print_video_compact(video)
|
|
else:
|
|
click.echo()
|
|
print_video(video)
|
|
count += 1
|
|
|
|
click.echo()
|
|
click.echo("-" * 80)
|
|
click.echo(f"Videos 1-{count} of {total_count}")
|
|
|
|
if total_count > count:
|
|
click.secho(
|
|
"\nThere are more videos. "
|
|
+ "Increase the --limit, use --all or --pager to see the rest.",
|
|
dim=True,
|
|
)
|
|
|
|
|
|
def get_game_ids(names: List[str]) -> List[str]:
|
|
return [get_game_id(name) for name in names]
|
|
|
|
|
|
def get_game_id(name: str) -> str:
|
|
print_log(f"Looking up game '{name}'...")
|
|
game_id = twitch.get_game_id(name)
|
|
if not game_id:
|
|
raise ConsoleError(f"Game '{name}' not found")
|
|
return game_id
|