funkwlmpv/funkwhale_cli.py

75 lines
2.4 KiB
Python
Raw Normal View History

from src.fw_api import s, select_instance, instance, federate_search_by_url
2022-11-01 12:15:28 +02:00
from src.fw_radios import list_radios
2022-11-08 19:58:27 +02:00
from src.fw_artists import list_artists
2022-11-08 20:08:24 +02:00
from src.fw_albums import list_albums
from src.fw_channels import list_channels
2022-11-10 17:55:36 +02:00
from src.fw_playlists import list_playlists
import src.settings as settings
import json, sys
from loguru import logger
2022-11-01 12:15:28 +02:00
from pyfzf.pyfzf import FzfPrompt
fzf = FzfPrompt()
def main():
while True:
2022-11-08 19:58:27 +02:00
menu = ['Radios',
'Artists',
'Albums',
'Channels',
2022-11-10 17:55:36 +02:00
'Playlists',
'Search',
2022-11-08 19:58:27 +02:00
'Switch instance']
if not s.headers.get('Authorization'):
menu.append('Sign in')
2022-11-01 12:15:28 +02:00
ids = fzf.prompt(menu)
selected = ids[0]
if selected == 'Radios':
list_radios()
2022-11-08 19:58:27 +02:00
if selected == 'Artists':
list_artists()
2022-11-08 20:08:24 +02:00
if selected == 'Albums':
list_albums()
if selected == 'Channels':
list_channels()
2022-11-10 17:55:36 +02:00
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())
2022-11-10 00:15:57 +02:00
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
2022-11-08 21:23:19 +02:00
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)
2022-11-01 12:15:28 +02:00
if __name__ == '__main__':
main()