2022-11-08 20:02:07 +02:00
|
|
|
from src.utils import download_track
|
2022-11-01 12:15:28 +02:00
|
|
|
from loguru import logger
|
2022-11-08 20:02:07 +02:00
|
|
|
from pyfzf.pyfzf import FzfPrompt
|
2022-11-02 02:05:08 +02:00
|
|
|
import mpv
|
|
|
|
|
2022-11-08 20:02:07 +02:00
|
|
|
fzf = FzfPrompt()
|
|
|
|
|
|
|
|
|
2022-11-01 12:15:28 +02: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-08 01:40:26 +02:00
|
|
|
player = mpv.MPV(log_handler=mpv_log, ytdl=False,
|
|
|
|
prefetch_playlist=True)
|
2022-11-08 20:02:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
def set_http_header(headers=[]):
|
|
|
|
player.http_header_fields = headers
|
|
|
|
|
|
|
|
|
|
|
|
def player_menu(header=None, storage={}):
|
|
|
|
while True:
|
|
|
|
try:
|
|
|
|
select = fzf.prompt(('Next', 'Prev', 'Pause', 'Download', 'Info', 'Exit'), f"--header=\'{header}\'")[0]
|
|
|
|
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()
|
|
|
|
elif select == 'Exit':
|
|
|
|
player.playlist_clear()
|
|
|
|
player.stop()
|
|
|
|
break
|
|
|
|
except KeyboardInterrupt:
|
|
|
|
break
|
|
|
|
|