from src.fw_api import s, select_instance, instance, federate_search_by_url from src.fw_radios import list_radios from src.fw_artists import list_artists from src.fw_albums import list_albums from src.fw_tracks import list_tracks from src.fw_channels import list_channels from src.fw_playlists import list_playlists import src.settings as settings import src.mpv_control import json, sys from loguru import logger from pyfzf.pyfzf import FzfPrompt fzf = FzfPrompt() def main(): while True: menu = ['Radios', 'Artists', 'Albums', 'Tracks', 'Channels', 'Playlists', 'Search', 'Switch instance'] if not s.headers.get('Authorization'): menu.append('Sign in') if not src.mpv_control.player.core_idle: menu.insert(0, 'Player') ids = fzf.prompt(menu) selected = ids[0] if selected == 'Radios': list_radios() if selected == 'Artists': list_artists() if selected == 'Albums': list_albums() if selected == 'Tracks': list_tracks() if selected == 'Channels': list_channels() if selected == 'Playlists': list_playlists() if selected == 'Search': search_type = fzf.prompt(('Federated', 'All types'))[0] if search_type == 'Federated': print('Input url:') returned_obj = federate_search_by_url(input()) logger.info(str(returned_obj)) if selected == 'Switch instance': with open('config.json', 'rt') as f: conf = json.loads(f.read()) list_instances = conf.get('public_list_instances') + settings.get_new_funkwhale_servers() instance = fzf.prompt(list_instances, '--header \'Select instance\'')[0] select_instance(instance) if selected == 'Sign in': print(f''' If You want sign in, please visit: https://{instance}/settings/applications/new And fill Name funkwhale-cli Scopes: Read (only listen music), Write (optional) Insert token from "Access token" here''') register_token = input() with open('.auth.json', 'rt') as f: tkns = json.loads(f.read()) with open('.auth.json', 'wt') as f: tkns[instance] = register_token f.write(json.dumps(tkns)) del tkns del register_token del f select_instance(instance) if selected == 'Player': src.mpv_control.player_menu(storage=src.mpv_control.player_fw_storage.storage) if __name__ == '__main__': main()