funkwlmpv/src/mpv_control.py

69 lines
2.3 KiB
Python
Raw Normal View History

2022-11-08 19:23:19 +00:00
import src.fw_api
2022-11-08 18:02:07 +00:00
from src.utils import download_track
2022-11-01 10:15:28 +00:00
from loguru import logger
2022-11-08 18:02:07 +00:00
from pyfzf.pyfzf import FzfPrompt
import mpv
2022-11-08 18:02:07 +00:00
fzf = FzfPrompt()
2022-11-01 10:15:28 +00:00
def mpv_log(loglevel, component, message):
if loglevel == 'info':
logger.info(f'{component} {message}')
elif loglevel == 'error':
logger.error(f'{component} {message}')
2022-11-09 09:49:33 +00:00
player = mpv.MPV(log_handler=mpv_log)
list_options = dir(player)
if 'ytdl' in list_options:
player.ytdl = False
if 'prefetch_playlist' in list_options:
player.prefetch_playlist = True
2022-11-08 18:02:07 +00:00
def set_http_header(headers=[]):
player.http_header_fields = headers
2022-11-09 09:49:33 +00:00
@logger.catch
2022-11-08 18:02:07 +00:00
def player_menu(header=None, storage={}):
while True:
try:
2022-11-08 19:23:19 +00:00
select = fzf.prompt(('Next', 'Prev', 'Pause', 'Download', 'Info', 'Hide artist', 'Exit'), f"--header=\'{header}\'")[0]
2022-11-08 18:02:07 +00:00
if select == 'Next':
player.playlist_next()
elif select == 'Prev':
player.playlist_prev()
elif select == 'Pause':
if player.pause:
player.pause = False
else:
player.pause = True
elif select == 'Download':
print('Downloading...')
name_downloaded = download_track(player.filename)
print(f'Downloaded: {name_downloaded}')
elif select == 'Info':
track = storage.get(player.filename)
for i in ('title', 'fid', 'license', 'album', 'artist'):
if i in ('album', 'artist'):
name_aa = track.get(i).get('name')
if not name_aa:
name_aa = track.get(i).get('title')
print(i + ': '+ name_aa)
key = track.get(i)
if key and isinstance(key, str):
print(i + ': ' + key)
input()
2022-11-08 19:23:19 +00:00
elif select == 'Hide artist':
track = storage.get(player.filename)
src.fw_api.hide_content({'target': {'id': track.get('artist').get('id'), 'type': 'artist'}})
2022-11-08 18:02:07 +00:00
elif select == 'Exit':
player.playlist_clear()
player.stop()
break
except KeyboardInterrupt:
break