diff --git a/funkwhale_cli.py b/funkwhale_cli.py index eb7fe43..254b00c 100644 --- a/funkwhale_cli.py +++ b/funkwhale_cli.py @@ -7,12 +7,18 @@ fzf = FzfPrompt() def main(): logger.remove() while True: - menu = ('Radios', ) + menu = ('Radios', 'Switch instance' ) ids = fzf.prompt(menu) selected = ids[0] if selected == 'Radios': list_radios() + if selected == 'Switch instance': + with open('config.json', 'rt') as f: + conf = json.loads(f.read()) + list_instances = conf.get('public_list_instances') + instance = fzf.prompt(list_instances, '--header \'Select instance\'')[0] + select_instance(instance) if __name__ == '__main__': diff --git a/src/fw_api.py b/src/fw_api.py index 3312a3d..ac8496c 100644 --- a/src/fw_api.py +++ b/src/fw_api.py @@ -1,30 +1,70 @@ +from src.mpv_control import player import requests, json, time from loguru import logger with open('.auth.json', 'rt') as f: auth = json.loads(f.read()) +s = requests.Session() instance = 'fw.ponychord.rocks' -headers= { - "Authorization": "Bearer " + auth.get('fw.ponychord.rocks') -} +token = auth.get(instance) + +if token: + s.headers.update = { + "Authorization": "Bearer " + token + } + player.http_header_fields = ['Authorization: ' + 'Bearer ' + token] +else: + s.get(f'https://{instance}/') # Get cookies from unauthorized instance for working some functionality (radios) + player.http_header_fields = [] + + +def select_instance(new_instance=None): + global instance + instance = new_instance + new_token = auth.get(instance) + s.headers.update = {} + player.http_header_fields = [] + if new_token: + s.get(f'https://{instance}') + s.headers.update = { + "Authorization": "Bearer " + new_token + } + player.http_header_fields = ['Authorization: ' + 'Bearer ' + new_token] + + def concatinate_endpoint(endpoint): return 'https://' + instance + endpoint + +def list_tracks(page=None, q=None, artist=None, album=None, favourites=None): + '''This function get tracks by params''' + params = { + 'page': page, + 'q': q, + 'artist': artist, + 'album': album, + 'favourites': favourites + } + + r = requests.get(f'https://{instance}/api/v1/tracks', params) + return r.json() + + # [FunkWhale radios] def get_radios(): - r = requests.get(f'https://{instance}/api/v1/radios/radios/', headers=headers) + r = s.get(f'https://{instance}/api/v1/radios/radios/') return r.json() def post_radio_session(requested_radio): - r = requests.post(f'https://{instance}/api/v1/radios/sessions/', json=requested_radio, headers=headers) + r = s.post(f'https://{instance}/api/v1/radios/sessions/', json=requested_radio) return r.json() def get_track_radio(radio_session): - r = requests.post(f'https://{instance}/api/v1/radios/tracks/',json=radio_session, headers=headers) + r = s.post(f'https://{instance}/api/v1/radios/tracks/',json=radio_session) return r.json() diff --git a/src/mpv_control.py b/src/mpv_control.py index da73f39..b01cba3 100644 --- a/src/mpv_control.py +++ b/src/mpv_control.py @@ -1,4 +1,3 @@ -from src.fw_api import headers from loguru import logger import mpv @@ -10,5 +9,4 @@ def mpv_log(loglevel, component, message): logger.error(f'{component} {message}') player = mpv.MPV(log_handler=mpv_log, ytdl=False) -player.http_header_fields = ['Authorization: ' + headers.get('Authorization')]