def get_animes(self): # if nothing is selected it returns -1 # this makes the choice the first one if nothing is selected from search. if self.searchOutput.currentRow() != -1: choice = self.searchOutput.currentRow() + 1 else: choice = 1 start = self.animeEpisodeStart.text( ) if self.animeEpisodeStart.text().isnumeric() else 1 end = int(self.animeEpisodeEnd.text()) + \ 1 if self.animeEpisodeEnd.text().isnumeric() else '' episode_range = f'{start}:{end}' anime = self.animeName.text() provider = self.providers.currentText() print(anime, provider, choice) anime_url, _ = util.search(anime, provider, choice) cls = get_anime_class(anime_url) anime = cls(anime_url) ep_range = util.parse_episode_range(len(anime), episode_range) animes = util.split_anime(anime, ep_range) # animes = util.parse_ep_str(anime, episode_range) anime_title = anime.title # maybe make animes/anime_title self.animes? return animes, anime_title
def dl(ctx, anime_url, episode_range, url, player, skip_download, quality, force_download, log_level, download_dir): """ Download the anime using the url or search for it. """ util.setup_logger(log_level) util.print_info(__version__) cls = get_anime_class(anime_url) if not cls: anime_url = util.search_and_get_url(anime_url) cls = get_anime_class(anime_url) try: anime = cls(anime_url, quality=quality) except NotFoundError as e: echo(e.args[0]) return if episode_range is None: episode_range = '1:' + str(len(anime) + 1) logging.info('Found anime: {}'.format(anime.title)) anime = util.split_anime(anime, episode_range) util.process_anime(anime, player=player, force_download=force_download, download_dir=download_dir, url=url, skip_download=skip_download)
def dl(ctx, anime_url, episode_range, url, player, skip_download, quality, force_download, log_level, download_dir, file_format, provider, external_downloader): """ Download the anime using the url or search for it. """ util.setup_logger(log_level) util.print_info(__version__) cls = get_anime_class(anime_url) if not cls: anime_url = util.search(anime_url, provider) cls = get_anime_class(anime_url) try: anime = cls(anime_url, quality=quality) except Exception as e: echo(click.style(str(e), fg='red')) return # TODO: Refractor this somewhere else. (util?) if episode_range is None: episode_range = '1:' if episode_range.endswith(':'): episode_range += str(len(anime) + 1) if episode_range.startswith(':'): episode_range = '1' + episode_range logging.info('Found anime: {}'.format(anime.title)) anime = util.split_anime(anime, episode_range) if url or player: skip_download = True if download_dir and not skip_download: logging.info('Downloading to {}'.format(os.path.abspath(download_dir))) for episode in anime: if url: util.print_episodeurl(episode) if player: util.play_episode(episode, player=player) if not skip_download: if external_downloader: logging.info('Downloading episode {} of {}'.format( episode.ep_no, anime.title)) util.external_download(external_downloader, episode, file_format, path=download_dir) continue episode.download(force=force_download, path=download_dir, format=file_format) print()
def dl(ctx, anime_url, episode_range, url, player, skip_download, quality, force_download, log_level, download_dir, file_format, provider): """ Download the anime using the url or search for it. """ util.setup_logger(log_level) util.print_info(__version__) cls = get_anime_class(anime_url) if not cls: anime_url = util.search(anime_url, provider) cls = get_anime_class(anime_url) try: anime = cls(anime_url, quality=quality) except Exception as e: echo(click.style(str(e), fg='red')) return if episode_range is None: episode_range = '1:' + str(len(anime) + 1) logging.info('Found anime: {}'.format(anime.title)) anime = util.split_anime(anime, episode_range) if url or player: skip_download = True if download_dir and not skip_download: logging.info('Downloading to {}'.format(os.path.abspath(download_dir))) for episode in anime: if url: util.print_episodeurl(episode) if player: util.play_episode(episode, player=player) if not skip_download: episode.download(force=force_download, path=download_dir, format=file_format) print()
def test_split_anime(): anime_list = list(range(20)) assert len(util.split_anime(anime_list, '1:10')) == 9
def list_animes(watcher, quality, download_dir): watcher.list() inp = click.prompt('Select an anime', default=1) try: anime = watcher.get(int(inp) - 1) except IndexError: sys.exit(0) # Make the selected anime first result watcher.update(anime) while True: click.clear() click.secho('Title: ' + click.style(anime.title, fg='green', bold=True)) click.echo('episodes_done: {}'.format( click.style(str(anime.episodes_done), bold=True, fg='yellow'))) click.echo('Length: {}'.format(len(anime))) click.echo('Provider: {}'.format(anime.sitename)) meta = '' for k, v in anime.meta.items(): meta += '{}: {}\n'.format(k, click.style(str(v), bold=True)) click.echo(meta) click.echo('Available Commands: set, remove, update, watch,' ' download.\n') inp = click.prompt('Press q to exit', default='q').strip() # TODO: A better way to handle commands. Use regex. Refractor to class? # Decorator? if inp == 'q': break elif inp == 'remove': watcher.remove(anime) break elif inp == 'update': watcher.update_anime(anime) elif inp == 'watch': anime.quality = quality watch_anime(watcher, anime) sys.exit(0) elif inp.startswith('download'): try: inp = inp.split('download ')[1] except IndexError: inp = ':' inp = str(anime.episodes_done+1) + \ inp if inp.startswith(':') else inp inp = inp + str(len(anime)) if inp.endswith(':') else inp anime = util.split_anime(anime, inp) if not download_dir: download_dir = Config['dl']['download_dir'] for episode in anime: episode.download(force=False, path=Config['dl']['download_dir'], format=Config['dl']['file_format']) elif inp.startswith('set '): inp = inp.split('set ')[-1] key, val = [v.strip() for v in inp.split('=')] key = key.lower() if key == 'title': watcher.remove(anime) setattr(anime, key, val) watcher.add(anime) elif key == 'episodes_done': setattr(anime, key, int(val)) watcher.update(anime) elif key == 'provider': url = util.search(anime.title, val) watcher.remove(anime) newanime = watcher.new(url) newanime.episodes_done = anime.episodes_done newanime._timestamp = anime._timestamp watcher.update(newanime) anime = newanime
def test_split_anime(): anime = Mock() anime._episode_urls = list(enumerate(range(20))) assert len(util.split_anime(anime, '1:10')._episode_urls) == 9
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, disable_ssl, fallback_qualities): """ Download the anime using the url or search for it. """ util.setup_logger(log_level) util.print_info(__version__) cls = get_anime_class(anime_url) disable_ssl = cls and cls.__name__ == 'Masterani' or disable_ssl session.get_session().verify = not disable_ssl if not cls: anime_url = util.search(anime_url, provider) cls = get_anime_class(anime_url) try: 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')) else: raise return # TODO: Refractor this somewhere else. (util?) if episode_range is None: episode_range = '1:' if episode_range.endswith(':'): episode_range += str(len(anime) + 1) if episode_range.startswith(':'): episode_range = '1' + episode_range logging.info('Found anime: {}'.format(anime.title)) anime = util.split_anime(anime, episode_range) if url or player: skip_download = True if download_dir and not skip_download: logging.info('Downloading to {}'.format(os.path.abspath(download_dir))) for episode in anime: if url: util.print_episodeurl(episode) if player: util.play_episode(episode, player=player) if not skip_download: if external_downloader: logging.info('Downloading episode {} of {}'.format( episode.ep_no, anime.title)) util.external_download(external_downloader, episode, file_format, path=download_dir) continue if chunk_size is not None: chunk_size *= 1e6 chunk_size = int(chunk_size) episode.download(force=force_download, path=download_dir, format=file_format, range_size=chunk_size) print()