Skip to content

Commit

Permalink
Merge pull request #619 from AbdullahM0hamed/flags
Browse files Browse the repository at this point in the history
Add dub and sub flags
  • Loading branch information
AbdullahM0hamed committed Mar 22, 2021
2 parents 6cb796b + 8199967 commit 493d68e
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 7 deletions.
21 changes: 19 additions & 2 deletions anime_downloader/commands/dl.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,23 @@
help="Set the speed limit (in KB/s or MB/s) for downloading when using aria2c",
metavar='<int>K/M'
)
@click.option(
"--sub", "-s", type=bool, is_flag=True,
help="If flag is set, it downloads the subbed version of an anime if the provider supports it. Must not be used with the --dub/-d flag")
@click.option(
"--dub", "-d", type=bool, is_flag=True,
help="If flag is set, it downloads the dubbed version of anime if the provider supports it. Must not be used with the --sub/-s flag")
@click.pass_context
def command(ctx, anime_url, episode_range, url, player, skip_download, quality,
force_download, download_dir, file_format, provider,
external_downloader, chunk_size, disable_ssl, fallback_qualities, choice, skip_fillers, speed_limit):
external_downloader, chunk_size, disable_ssl, fallback_qualities, choice, skip_fillers, speed_limit, sub, dub):
""" Download the anime using the url or search for it.
"""

if sub and dub:
raise click.UsageError(
"--dub/-d and --sub/-s flags cannot be used together")

query = anime_url[:]

util.print_info(__version__)
Expand All @@ -98,8 +109,14 @@ def command(ctx, anime_url, episode_range, url, player, skip_download, quality,
anime_url, _ = util.search(anime_url, provider, choice)
cls = get_anime_class(anime_url)

subbed = None

if sub or dub:
subbed = subbed is not None

anime = cls(anime_url, quality=quality,
fallback_qualities=fallback_qualities)
fallback_qualities=fallback_qualities,
subbed=subbed)
logger.info('Found anime: {}'.format(anime.title))

animes = util.parse_ep_str(anime, episode_range)
Expand Down
19 changes: 14 additions & 5 deletions anime_downloader/sites/anime.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ class Anime:
title = ''
meta = dict()
subclasses = {}
subbed = None
QUALITIES = ['360p', '480p', '720p', '1080p']

@classmethod
Expand All @@ -64,8 +65,10 @@ def search(cls, query):

def __init__(self, url=None, quality='720p',
fallback_qualities=None,
_skip_online_data=False):
_skip_online_data=False,
subbed=None):
self.url = url
self.subbed = subbed

if fallback_qualities is None:
fallback_qualities = ['720p', '480p', '360p']
Expand Down Expand Up @@ -342,7 +345,8 @@ def source(self, index=0):
except IndexError:
raise NotFoundError("No episode sources found.")

ext = get_extractor(sitename)(url, quality=self.quality, headers=self.headers)
ext = get_extractor(sitename)(
url, quality=self.quality, headers=self.headers)
self._sources[index] = ext

return ext
Expand Down Expand Up @@ -377,19 +381,24 @@ def sort_sources(self, data):
Using the example above, this function will return: [('no_extractor', 'https://twist.moe/anime/...')]
as it prioritizes preferred language over preferred server
"""
if self._parent and self._parent.subbed is not None:
version = "subbed" if self._parent.subbed else "dubbed"
else:
version = self.config.get('version', 'subbed')

version = self.config.get('version', 'subbed') # TODO add a flag for this
servers = self.config.get('servers', [''])

logger.debug('Data : {}'.format(data))

# Sorts the dicts by preferred server in config
sorted_by_server = sorted(data, key=lambda x: servers.index(x['server']) if x['server'] in servers else len(data))
sorted_by_server = sorted(data, key=lambda x: servers.index(
x['server']) if x['server'] in servers else len(data))

# Sorts the above by preferred language
# resulting in a list with the dicts sorted by language and server
# with language being prioritized over server
sorted_by_lang = list(sorted(sorted_by_server, key=lambda x: x['version'] == version, reverse=True))
sorted_by_lang = list(
sorted(sorted_by_server, key=lambda x: x['version'] == version, reverse=True))
logger.debug('Sorted sources : {}'.format(sorted_by_lang))

return '' if not sorted_by_lang else [(sorted_by_lang[0]['extractor'], sorted_by_lang[0]['url'])]
Expand Down

0 comments on commit 493d68e

Please sign in to comment.