def main(): if "--version" in sys.argv[1:] or "-v" in sys.argv[1:]: print(f"ytam version {version.version}") exit() if "--check" in sys.argv[1:] or "-k" in sys.argv[1:]: print("Initialising.") urls = Playlist( "https://www.youtube.com/playlist?list=PLOoPqX_q5JAVPMhHjYxcUc2bxTDMyGE-a" ) playlist_title = urls.title start = 0 end = len(urls) album = "Test Album" directory = f"music{SEP}" artist = "Test Artist" is_album = True proxies = None image = f"{BASE}{SEP}check{SEP}check.jpg" titles = f"{BASE}{SEP}check{SEP}check.txt" mp3 = True else: print("Initialising.") args = parse_args(sys.argv[1:]) mp3 = args.mp3 urls = Playlist(args.url) playlist_title = urls.title start = 0 if args.start is None else args.start - 1 end = len(urls) if args.end is None else args.end directory = f"music{SEP}" if args.directory is None else args.directory proxies = None if args.proxy is not None: proxy_strings = [proxy.strip() for proxy in args.proxy.split(" ")] proxies = {} for proxy_string in proxy_strings: p = proxy_string.split("-") proxies[p[0]] = p[1] if args.discogs is not None: # do discogs error checks here try: d = Discogs(args.discogs) d.make_file(DEFAULT_TITLES) if (end - start) != d.num_tracks: raise error.TracknumberMismatchError( playlist_title, d.album) is_album = True album = d.album artist = d.artist image = d.image titles = DEFAULT_TITLES except (error.WrongMetadataLinkError, error.BrokenDiscogsLinkError, error.TracknumberMismatchError) as e: print(f"Error: {e.message}") exit() else: album = playlist_title if args.album is None else args.album artist = "Unknown" if args.artist is None else args.artist is_album = False if args.album is None else True image = args.image titles = args.titles colorama.init() d = None try: if start >= len(urls): raise error.InvalidPlaylistIndexError(start, playlist_title) if end < start: raise error.IndicesOutOfOrderError() downloading_message = f"Downloading songs {font.apply('gb', start+1)} - {font.apply('gb', end)} from playlist {font.apply('gb', playlist_title)}" text_len = (len("Downloading songs ") + len(str(start)) + len(" - ") + len(str(end)) + len(" from playlist ") + len(playlist_title)) print(downloading_message, f"\n{font.apply('gb', '─'*text_len)}") d = Downloader( list(enumerate(urls[start:end])), len(urls), album, directory, artist, is_album, titles, image, proxies, mp3, ) d.start = start retry = True while retry: d.download() print(f"{font.apply('gb', '─'*text_len)}") print( f"{d.successful}/{len(urls[start:end])} downloaded successfully.\n" ) if len(d.retry_urls) > 0: d.set_retries() urls_copy = d.urls.copy() user = input( f"Retry {font.apply('fb', str(len(list(urls_copy))) + ' failed')} downloads? Y/N " ) if not is_affirmative(user): retry = False else: print("\nRetrying.") print(f"{font.apply('gb', '─'*len('Retrying.'))}") else: retry = False except ( error.InvalidPlaylistIndexError, error.IndicesOutOfOrderError, error.TitlesNotFoundError, error.BadTitleFormatError, ) as e: print(f"Error: {e.message}")