from src.fw_api import get_favorires_tracks, get_audio_file from src.mpv_control import player, player_menu, track_url_to_uuid, player_fw_storage from pyfzf.pyfzf import FzfPrompt from loguru import logger fzf = FzfPrompt() @logger.catch def list_favorites_tracks(pg=None, search=None, scope=None): 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} | liked: {who_user}') select = fzf.prompt(view, '--multi') if 'Next page' in select: list_favorites_tracks(pg=tracks_next) elif 'Prev page' in select: list_favorites_tracks(pg=tracks_prev) elif 'Search' in select: print('Search by track:') list_favorites_tracks(search=input()) elif 'Limit by scope' in select: print(''' Limit the results to a given user or pod: Use all (or do not specify the property to disable scope filtering) Use me to retrieve content relative to the current user Use subscribed to retrieve content in libraries you follow Use actor:alice@example.com to retrieve content relative to the account `alice@example.com Use domain:example.com to retrieve content relative to the domain `example.com ''') scope = input() list_favorites_tracks(scope=scope, search=search) elif 'Play this page' in select: for i in tracks_results: play_track(track=i['track'], multi=True) 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']) def play_track(track, multi=False): listen_url = get_audio_file(track['listen_url'], True) player_fw_storage.storage[track_url_to_uuid(listen_url)] = track if multi: player.loadfile(listen_url, 'append-play') else: player.loadfile(listen_url, 'append-play') track_name = track.get('title') player_menu(f"{track_name} playing...", player_fw_storage.storage)