from src.fw_api import get_artists, get_tracks, get_albums, concatinate_endpoint import src.fw_artists from src.mpv_control import player, player_menu from pyfzf.pyfzf import FzfPrompt from loguru import logger fzf = FzfPrompt() @logger.catch def list_albums(albums=None, pg=None, search=None): albums_next = None albums_prev = None play_artist_albums = False if not albums: albums = get_albums(q=search, pg=pg) albums_next = albums.get('next') albums_prev = albums.get('previous') albums_results = albums.get('results') else: play_artist_albums = True albums_results = albums view = ['Search'] if play_artist_albums: view.append('Play all') if albums_next: view.append('Next page') if albums_prev: view.append('Prev page') for i in albums_results: index = albums_results.index(i) album_name = i.get('title') view.append(f'{index}.{album_name}') select = fzf.prompt(view)[0].split('.', 1)[0] if select == 'Next page': list_albums(pg=albums_next) elif select == 'Prev page': list_albums(pg=albums_prev) elif select == 'Search': print('Search by albums: ') list_albums(search=input()) elif select == 'Play all': src.fw_artists.play_artist(albums_results[0].get('artist')) else: play_album(album_id=albums_results[int(select)].get('id')) def play_album(album_id): tracks = get_tracks(album=album_id) tracks_results = tracks.get('results') storage = {} for i in tracks_results: listen_url = concatinate_endpoint(i.get('listen_url')) storage[listen_url] = i player.loadfile(listen_url, 'append-play') player_menu("Album playing...", storage)