add fallback qualities
parent
c1c139d2c6
commit
52dc38ed19
|
@ -46,6 +46,9 @@ def cli():
|
|||
@click.option(
|
||||
'--quality', '-q', type=click.Choice(['360p', '480p', '720p', '1080p']),
|
||||
help='Specify the quality of episode. Default-720p')
|
||||
@click.option(
|
||||
'--fallback-qualities', '-fq', cls=util.ClickListOption,
|
||||
help='Specifiy the order of fallback qualities as a list.')
|
||||
@click.option(
|
||||
'--force-download', '-f', is_flag=True,
|
||||
help='Force downloads even if file exists')
|
||||
|
@ -78,7 +81,7 @@ def cli():
|
|||
@click.pass_context
|
||||
def dl(ctx, anime_url, episode_range, url, player, skip_download, quality,
|
||||
force_download, log_level, download_dir, file_format, provider,
|
||||
external_downloader, chunk_size):
|
||||
external_downloader, chunk_size, fallback_qualities):
|
||||
""" Download the anime using the url or search for it.
|
||||
"""
|
||||
|
||||
|
@ -92,7 +95,8 @@ def dl(ctx, anime_url, episode_range, url, player, skip_download, quality,
|
|||
cls = get_anime_class(anime_url)
|
||||
|
||||
try:
|
||||
anime = cls(anime_url, quality=quality)
|
||||
anime = cls(anime_url, quality=quality,
|
||||
fallback_qualities=fallback_qualities)
|
||||
except Exception as e:
|
||||
if log_level != 'DEBUG':
|
||||
echo(click.style(str(e), fg='red'))
|
||||
|
|
|
@ -12,6 +12,7 @@ DEFAULT_CONFIG = {
|
|||
'skip_download': False,
|
||||
'download_dir': '.',
|
||||
'quality': '720p',
|
||||
'fallback_qualities': ['720p', '480p', '360p'],
|
||||
'force_download': False,
|
||||
'log_level': 'INFO',
|
||||
'file_format': '{anime_title}/{anime_title}_{ep_no}',
|
||||
|
|
|
@ -25,8 +25,11 @@ class BaseAnime:
|
|||
def search(cls, query):
|
||||
return
|
||||
|
||||
def __init__(self, url=None, quality='720p', _skip_online_data=False):
|
||||
def __init__(self, url=None, quality='720p',
|
||||
fallback_qualities=['720p', '480p', '360p'],
|
||||
_skip_online_data=False):
|
||||
self.url = url
|
||||
self._fallback_qualities = fallback_qualities
|
||||
|
||||
if quality in self.QUALITIES:
|
||||
self.quality = quality
|
||||
|
@ -121,8 +124,11 @@ class BaseEpisode:
|
|||
self.source().stream_url
|
||||
except NotFoundError:
|
||||
# Issue #28
|
||||
qualities = copy.copy(self.QUALITIES)
|
||||
qualities.remove(self.quality)
|
||||
qualities = copy.copy(self._parent._fallback_qualities)
|
||||
try:
|
||||
qualities.remove(self.quality)
|
||||
except ValueError:
|
||||
pass
|
||||
for quality in qualities:
|
||||
logging.warning('Quality {} not found. Trying {}.'.format(
|
||||
self.quality, quality))
|
||||
|
@ -134,7 +140,7 @@ class BaseEpisode:
|
|||
break
|
||||
except NotFoundError:
|
||||
# Issue #28
|
||||
qualities.remove(self.quality)
|
||||
# qualities.remove(self.quality)
|
||||
pass
|
||||
|
||||
def source(self, index=0):
|
||||
|
|
|
@ -9,6 +9,7 @@ import re
|
|||
import os
|
||||
import errno
|
||||
import time
|
||||
import ast
|
||||
|
||||
from anime_downloader.sites import get_anime_class
|
||||
from anime_downloader.const import desktop_headers
|
||||
|
@ -179,3 +180,14 @@ def make_dir(path):
|
|||
except OSError as e:
|
||||
if e.errno != errno.EEXIST:
|
||||
raise
|
||||
|
||||
|
||||
class ClickListOption(click.Option):
|
||||
|
||||
def type_cast_value(self, ctx, value):
|
||||
try:
|
||||
if isinstance(value, list):
|
||||
return value
|
||||
return ast.literal_eval(value)
|
||||
except:
|
||||
raise click.BadParameter(value)
|
||||
|
|
Loading…
Reference in New Issue