From 706d7684dd6ed66ba69c831161dea1b12359d4cb Mon Sep 17 00:00:00 2001 From: localhost_frssoft Date: Wed, 7 Jun 2023 02:46:00 +0300 Subject: [PATCH] So, I forgot add this file, oops... --- src/fw_recents.py | 72 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/fw_recents.py diff --git a/src/fw_recents.py b/src/fw_recents.py new file mode 100644 index 0000000..8582290 --- /dev/null +++ b/src/fw_recents.py @@ -0,0 +1,72 @@ +from src.fw_api import get_favorires_tracks, get_recently_listened, 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_fav_or_history(pg=None, search=None, scope=None, is_history_view=False): + if is_history_view: + caption = 'listened:' + tracks = get_recently_listened(q=search, scope=scope, pg=pg) + else: + caption = '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} | {caption} {who_user}') + select = fzf.prompt(view, '--multi') + 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: + 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_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) + 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)