def meta(conv_name: str, song_name: str, search_by: str, args): """Handle adding the metadata for the passed song. We will use the passed name to search for metadata, ask the user for a choice and accordingly add the meta to the song. """ PASSED_FORMAT = args.format IS_QUIET = args.quiet # Check if the user wants a new name for metadata if args.ask_meta_name: search_by = utility.get_new_meta_search_by(search_by) if args.manual_meta: # Read the values from the user. TRACK_INFO = manual.get_data(song_name) # Since above code will return a list with just # one element, the option will be set to 0 by # default and won't ask the user else: # Else add metadata in ordinary way logger.info('Getting song data for {}...'.format(search_by)) TRACK_INFO = metadata.SEARCH_SONG(search_by, filters=[args.artist, args.album], disable_sort=args.disable_sort) # If no meta was found raise error if not TRACK_INFO: # Check if we are supposed to add manual meta if args.on_meta_error != "manual": raise NoMetaError(search_by) TRACK_INFO = manual.get_data(song_name) song.setData(TRACK_INFO, IS_QUIET, conv_name, PASSED_FORMAT, args.choice) return TRACK_INFO logger.info('Setting data...') option = song.setData(TRACK_INFO, IS_QUIET, conv_name, PASSED_FORMAT, args.choice) if option == '~': TRACK_INFO = manual.get_data(song_name) song.setData(TRACK_INFO, IS_QUIET, conv_name, PASSED_FORMAT, args.choice) return TRACK_INFO elif type(option) is not int: raise MetadataError(search_by) return TRACK_INFO[option]
def main(): """Run on program call.""" args = arguments() song_name = args.SONG_NAME # Check if --setup is passed if args.setup: setupConfig.make_config() exit(0) # After this part song name is required if song_name is None: prepend.PREPEND(2) print("Please pass a song name. This is necessary", "to search in itunes.") exit(1) if not args.nolocal: # Search for the song locally if not cache.main(song_name): exit(0) is_quiet = args.quiet url = args.url # If the url is passed then get the data if url is not None: data = [] # Get video data from youtube temp_data = yt.scan_video(yt.get_href(url)) data.append(temp_data) # link to dw the song link = url # In this case choice will be 0 choice = 0 else: if is_quiet: prepend.PREPEND(1) print('Quiet is enabled') prepend.PREPEND(1) print('Searching Youtube for ', end='') print(Fore.LIGHTYELLOW_EX, end='') print(song_name, end='') print(Style.RESET_ALL) data, urls = yt.search(song_name) if len(data) > 1 and not is_quiet: # Ask for a choice choice = song.getChoice(data, 'mp3') else: choice = 0 link = 'https://youtube.com{}'.format(urls[int(choice)]) # Declare a var to store the name of the yt video yt_title = data[choice]['title'] prepend.PREPEND(1) print('Downloading ', end='') print(Fore.LIGHTMAGENTA_EX, end='') print(yt_title, end=' ') print(Style.RESET_ALL, end='') print('in', end=' ') print(Fore.LIGHTYELLOW_EX, end='') print(defaults.DEFAULT.SONG_QUALITY + 'kbps', end='') print(Style.RESET_ALL) path = yt.dw(link, yt_title) if not path: prepend.PREPEND(2) print('Something went wrong while downloading!\a') sys.exit(0) else: prepend.PREPEND(1) print('Downloaded!') prepend.PREPEND(1) print('Converting to mp3...') conv_name = utility.convert_to_mp3(path) if not conv_name: prepend.PREPEND(2) print('Something went wrong while converting!\a') prepend.PREPEND(1) print('Getting song data...') # TRACK_INFO = song.getData(song_name) TRACK_INFO = metadata.SEARCH_SONG(song_name) # declare a variable to store the option option = 0 if TRACK_INFO is False: # prepend.PREPEND(2) # print('Data \a') # exit(0) pass elif len(TRACK_INFO) == 0: prepend.PREPEND(2) print('No data was found!\a') sys.exit(0) else: prepend.PREPEND(1) print('Setting data...') option = song.setData(TRACK_INFO, is_quiet, conv_name) if type(option) is not int: prepend.PREPEND(2) print('Something went wrong while writing data!\a') sys.exit(0) # Get the directory where song is moved DIR = dir.cleanup(TRACK_INFO, option) prepend.PREPEND(1) print('Moving to {}...'.format(DIR)) if not DIR: prepend.PREPEND(2) print('Something went wrong while moving!\a') sys.exit(0) else: prepend.PREPEND(1) print('Done')