from src.fw_api import get_favorires_tracks, get_recently_listened, get_audio_file from src.fw_api_hints import hint_scope from src.mpv_control import player, player_menu, track_url_to_uuid, player_fw_storage, play_track from pyfzf.pyfzf import FzfPrompt from loguru import logger fzf = FzfPrompt() @logger.catch def list_fav_or_history(pg=None, search=None, scope=None, is_history_view=False): if is_history_view: action = 'listened' tracks = get_recently_listened(q=search, scope=scope, pg=pg) else: action = 'liked' tracks = get_favorires_tracks(q=search, scope=scope, pg=pg) tracks_next = tracks.get('next') tracks_prev = tracks.get('previous') tracks_results = tracks.get('results') view = ['Search', 'Limit by scope', 'Play this page'] if tracks_next: view.append('Next page') if tracks_prev: view.append('Prev page') for i in tracks_results: index = tracks_results.index(i) track_name = i['track'].get('title') who_user = i['user'].get('username') view.append(f'{index}.{track_name} | {who_user}') select = fzf.prompt(view, f'--multi --header=\'map: track title | who {action}\'') if select == []: return if 'Next page' in select: list_fav_or_history(pg=tracks_next, is_history_view=is_history_view) elif 'Prev page' in select: list_fav_or_history(pg=tracks_prev, is_history_view=is_history_view) elif 'Search' in select: print('Search by track:') list_fav_or_history(search=input(), is_history_view=is_history_view) elif 'Limit by scope' in select: hint_scope() scope = input() list_fav_or_history(scope=scope, search=search, is_history_view=is_history_view) elif 'Play this page' in select: for i in tracks_results: play_track(track=i['track'], multi=True) player_fw_storage.menu_ctx = list_fav_or_history player_fw_storage.menu_ctx_args = [pg, search, scope, is_history_view] elif len(select) > 1: for i in select: play_track(track=tracks_results[int( i.split('.', 1)[0])]['track'], multi=True) else: play_track(track=tracks_results[int( select[0].split('.', 1)[0])]['track'])