#!/usr/bin/env python3 from src.fw_api import current_instance, get_instance_settings, get_node_info 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 from src.fw_recents import list_fav_or_history from src.fw_instances import instances_menu import src.mpv_control import json import os from shlex import quote from shutil import get_terminal_size from pyfzf.pyfzf import FzfPrompt os.environ['FZF_DEFAULT_OPTS'] = "--margin 2,0,0,0 --preview-window down:2:hidden:wrap --bind ?:toggle-preview --preview 'echo {}'" fzf = FzfPrompt() os.system('clear') if get_terminal_size().columns > 32: print('\n\n') os.system('cat .icon.txt') def main(): while True: support_message = '' instance_title = '' menu = ['Radios', 'Artists', 'Albums', 'Tracks', 'Channels', 'Playlists', 'Favorites', 'Recently listened', 'About instance', 'Switch instance'] try: ins_nodeinfo = get_node_info() support_message = ins_nodeinfo['metadata']['instanceSupportMessage'] instance_title = ins_nodeinfo['metadata']['nodeName'] instance_stats = [] for k, v in ins_nodeinfo['metadata']['library'].items(): if k == 'anonymousCanListen' and v == False and not current_instance.s.headers.get('Authorization'): instance_stats.append(f'!!! {k}: {v} !!!') menu = ['Switch instance', 'About instance'] continue instance_stats.append(f'{k}: {v}') instance_stats.append(ins_nodeinfo['software']['version']) instance_stats = '\n'.join(instance_stats) main_menu_header = quote(f'''{instance_title}\n{instance_stats}'''.strip()) except Exception as E: splitted = ':\n'.join(str(E).split(':')) main_menu_header = quote(f'''Connection failed:\n{splitted}'''.strip()) menu = ['Switch instance'] if not current_instance.s.headers.get('Authorization'): menu.append('Sign in') if support_message != '': menu.append('Donate') if src.mpv_control.player.playlist_playing_pos != -1: menu.insert(0, 'Player') selected = fzf.prompt(menu, f"--header={main_menu_header}") if selected == []: print('bye-bye :3') break else: selected = selected[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 == 'Favorites': list_fav_or_history() if selected == 'Recently listened': list_fav_or_history(is_history_view=True) if selected == 'Switch instance': instances_menu() if selected == 'Sign in': print(f''' If You want sign in, please visit: https://{current_instance.instance}/settings/applications/new And fill Name funkwlmpv Scopes: Read | Write (optional): write:libraries write:favorites write:listenings write:follows write:filters Insert token from "Access token" here''') register_token = input() with open('.auth.json', 'rt') as f: tkns = json.load(f) with open('.auth.json', 'wt') as f: tkns[current_instance.instance] = register_token f.write(json.dumps(tkns, indent=4)) del tkns del register_token del f os.system('clear') current_instance.select_instance(current_instance.instance) if selected == 'Donate': os.system(f'less <