mirror of
http://gitea.phreedom.club/localhost_frssoft/funkwlmpv
synced 2024-11-27 19:51:28 +00:00
localhost_frssoft
8d441fb84a
Structure has changes Add fetch nodeinfo and avalaibility for all instances in list Can remove failed instances
145 lines
5.3 KiB
Python
Executable file
145 lines
5.3 KiB
Python
Executable file
#!/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 funkwhale-cli
|
|
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 <<EOF\nSupport instance message:\n{support_message}\nEOF')
|
|
if selected == 'About instance':
|
|
ins_settings = get_instance_settings()
|
|
about_instance_info = []
|
|
for i in ins_settings:
|
|
k, v = i.get('verbose_name'), i.get('value')
|
|
about_instance_info.append(f'{k}: {v}')
|
|
about_instance_info.append('|||||Some stats:')
|
|
if ins_nodeinfo['metadata'].get('usage'):
|
|
for k, v in ins_nodeinfo['metadata']['usage'].items():
|
|
about_instance_info.append(f'{k}: {v}')
|
|
for k, v in ins_nodeinfo['metadata']['library'].items():
|
|
about_instance_info.append(f'{k}: {v}')
|
|
for k, v in ins_nodeinfo['usage'].items():
|
|
about_instance_info.append(f'{k}: {v}')
|
|
about_instance_info = '\n'.join(about_instance_info)
|
|
os.system(f'less <<EOF\n{about_instance_info}\nEOF')
|
|
del about_instance_info
|
|
if selected == 'Player':
|
|
src.mpv_control.player_menu(
|
|
storage=src.mpv_control.player_fw_storage.storage)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|