import src.fw_artists from src.fw_api import get_artists, get_tracks, get_albums, get_audio_file from src.fw_libraries import libraries from src.settings import get_config from src.mpv_control import player, player_menu, track_url_to_uuid from pyfzf.pyfzf import FzfPrompt from loguru import logger fzf = FzfPrompt() @logger.catch def list_albums(albums=None, pg=None, search=None, artist=None, library=None, include_channels=None, refresh=False): show_artist_name_in_albums = get_config('show_artist_name_in_albums') albums_next = None albums_prev = None play_artist_albums = False if not albums: albums = get_albums(q=search, artist=artist, library=library, include_channels=include_channels, refresh=refresh, pg=pg) albums_next = albums.get('next') albums_prev = albums.get('previous') albums_results = albums.get('results') if artist: play_artist_albums = True else: play_artist_albums = True albums_results = albums view = ['Search', 'Library'] 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') album_tracks_count = i.get('tracks_count') option_str = f'{index}.{album_name} | {album_tracks_count}' artist_name = i.get('artist') if show_artist_name_in_albums and isinstance(artist_name, dict): artist_name = artist_name.get('name') option_str += f' | {artist_name}' view.append(f'{option_str}') select = fzf.prompt(view, '--header=\'map: album | tracks count | opt. artist\'') if select == []: return else: select = select[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 == 'Library': select_lib = libraries() list_albums(library=select_lib) elif select == 'Play all': if artist: src.fw_artists.play_artist(artist) else: 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, ordering='disc_number,position', include_channels=True) tracks_results = tracks.get('results') storage = {} for i in tracks_results: listen_url = get_audio_file(i['listen_url'], True) storage[track_url_to_uuid(listen_url)] = i player.loadfile(listen_url, 'append-play') player_menu("Album playing...", storage)