Exemplo n.º 1
0
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]
Exemplo n.º 2
0
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')