From 474235d9e2c8999a410c38fc08e1aabf6d240403 Mon Sep 17 00:00:00 2001 From: localhost_frssoft Date: Tue, 8 Nov 2022 02:40:26 +0300 Subject: [PATCH] Some changes Add radio by library (manual input) Add info about current track Smaller first loading radio Prefetching playlist by default --- src/fw_radios.py | 32 +++++++++++++++++++++++++------- src/mpv_control.py | 5 ++--- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/fw_radios.py b/src/fw_radios.py index b56d64f..207a43a 100644 --- a/src/fw_radios.py +++ b/src/fw_radios.py @@ -8,6 +8,7 @@ import time fzf = FzfPrompt() +audio_info = {} def list_radios(): radios = get_radios() @@ -24,6 +25,7 @@ def list_radios(): view.append('Favourites') view.append('Less listened') view.append('Random') + view.append('Library') view.append('Recently Added') selected = fzf.prompt(view, f'--header \'Found {count} radios\'')[0].split('.', 1) @@ -31,6 +33,10 @@ def list_radios(): radio_load(id_radio, 'favorites') elif 'Random' in selected: radio_load(id_radio, 'random') + elif 'Library' in selected: + print('Input library address (ex. example@example.example): ') + lib_addr = input() + radio_load(None, 'actor-content', lib_addr, lib_addr) elif 'Recently Added' in selected: radio_load(id_radio, 'recently-added') elif 'Less listened' in selected: @@ -56,23 +62,22 @@ def radio_generator(radio_session_id): radio_event_gen = threading.Event() -def radio_load(id_radio=None, type_radio='custom', name=None): +def radio_load(id_radio=None, type_radio='custom', name=None, related_object=None): requested_radio = { 'custom_radio': id_radio, 'radio_type': type_radio, - 'related_object_id': None + 'related_object_id': related_object } radio_session_id = post_radio_session(requested_radio).get('id') - for i in range(0, 5): + for i in range(0, 2): radio_get_track(radio_session_id) - player.playlist_pos = 0 radio_event_gen.set() radio_task = threading.Thread(target=radio_generator, args=(radio_session_id,), daemon=True) radio_task.start() while True: try: - select = fzf.prompt(('Next', 'Prev', 'Pause', 'Download', 'Exit'), f"--header=\'Radio {name} playing...\'")[0] + select = fzf.prompt(('Next', 'Prev', 'Pause', 'Download', 'Info', 'Exit'), f"--header=\'Radio {name} playing...\'")[0] if select == 'Next': radio_get_track(radio_session_id) player.playlist_next() @@ -86,7 +91,19 @@ def radio_load(id_radio=None, type_radio='custom', name=None): elif select == 'Download': print('Downloading...') name_downloaded = download_track(player.filename) - print(f'Downloaded: {name_downloaded}') + print(f'Downloaded: {name_downloaded}') + elif select == 'Info': + track = audio_info.get(player.filename) + for i in ('title', 'fid', 'license', 'album', 'artist'): + if i in ('album', 'artist'): + name_aa = track.get(i).get('name') + if not name_aa: + name_aa = track.get(i).get('title') + print(i + ': '+ name_aa) + key = track.get(i) + if key and isinstance(key, str): + print(i + ': ' + key) + input() elif select == 'Exit': try: radio_event_gen.clear() @@ -109,6 +126,7 @@ def radio_get_track(radio_session_id): else: track = radio_context.get('track') listen_url = track.get('listen_url') - player.playlist_append(concatinate_endpoint(listen_url)) + audio_info[concatinate_endpoint(listen_url)] = track + player.loadfile(concatinate_endpoint(listen_url), 'append-play') diff --git a/src/mpv_control.py b/src/mpv_control.py index b01cba3..79b585b 100644 --- a/src/mpv_control.py +++ b/src/mpv_control.py @@ -1,12 +1,11 @@ from loguru import logger import mpv - def mpv_log(loglevel, component, message): if loglevel == 'info': logger.info(f'{component} {message}') elif loglevel == 'error': logger.error(f'{component} {message}') -player = mpv.MPV(log_handler=mpv_log, ytdl=False) - +player = mpv.MPV(log_handler=mpv_log, ytdl=False, + prefetch_playlist=True)