funkwlmpv/src/fw_radios.py

103 lines
3.1 KiB
Python
Raw Normal View History

2022-11-01 12:15:28 +02:00
from src.fw_api import get_radios, post_radio_session, get_track_radio, concatinate_endpoint
from src.utils import download_track
2022-11-01 12:15:28 +02:00
from src.mpv_control import player
from pyfzf.pyfzf import FzfPrompt
from loguru import logger
import threading
import time
2022-11-01 12:15:28 +02:00
fzf = FzfPrompt()
def list_radios():
radios = get_radios()
count = radios.get('count')
results = radios.get('results')
view = []
for i in results:
index = results.index(i)
id_radio = i.get('id')
name = i.get('name')
view.append(f'{index}.{name}')
2022-11-03 01:58:55 +02:00
view.append('Favourites')
selected = fzf.prompt(view, f'--header \'Found {count} radios\'')[0].split('.', 1)
2022-11-03 01:58:55 +02:00
if 'Favourites' in selected:
type_radio = 'favorites'
radio_load(id_radio, type_radio)
else:
id_selected = selected[0]
id_radio = results[int(id_selected)].get('id')
radio_load(id_radio)
2022-11-01 12:15:28 +02:00
def radio_generator(radio_session_id):
count_t = 0
while radio_session_id != '':
time.sleep(1)
if not radio_event_gen.wait(0):
break
count_t += 1
if count_t >= 60:
radio_get_track(radio_session_id)
logger.info('Radio generator stopped')
radio_event_gen = threading.Event()
2022-11-03 01:58:55 +02:00
def radio_load(id_radio=None, type_radio='custom'):
2022-11-01 12:15:28 +02:00
requested_radio = {
'custom_radio': id_radio,
2022-11-03 01:58:55 +02:00
'radio_type': type_radio,
2022-11-01 12:15:28 +02:00
'related_object_id': None
}
radio_session_id = post_radio_session(requested_radio).get('id')
2022-11-03 01:58:55 +02:00
for i in range(0, 5):
2022-11-01 12:15:28 +02:00
radio_get_track(radio_session_id)
2022-11-01 12:15:28 +02:00
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:
input()
select = fzf.prompt(('Next', 'Prev', 'Pause', 'Download', 'Exit'), f'--header=\'Radio playing...\'')[0]
if select == 'Next':
radio_get_track(radio_session_id)
player.playlist_next()
elif select == 'Prev':
player.playlist_prev()
elif select == 'Pause':
if player.pause:
player.pause = False
else:
player.pause = True
elif select == 'Download':
download_track(player.filename)
elif select == 'Exit':
try:
radio_event_gen.clear()
except:
logger.exception('Error stopping Thread radio generator')
pass
player.playlist_clear()
player.stop()
break
except KeyboardInterrupt:
break
2022-11-01 12:15:28 +02:00
def radio_get_track(radio_session_id):
radio_context = get_track_radio({'session': radio_session_id})
2022-11-03 01:58:55 +02:00
if radio_context == "Radio doesn't have more candidates":
return
else:
track = radio_context.get('track')
listen_url = track.get('listen_url')
player.playlist_append(concatinate_endpoint(listen_url))
2022-11-01 12:15:28 +02:00