This repository has been archived on 2022-12-29. You can view files and clone it, but cannot push or open issues or pull requests.
zeropod/plugin/music/player.py

81 lines
2.6 KiB
Python

from os import path
from time import sleep
from menu import Menu, MenuType
from cinput import ControlInput
from graphics import Graphics
from icecream import ic
from mpv import MPV
class MusicPlayer:
def __init__(self, cinput: ControlInput, graphics: Graphics, menu: Menu):
self._cinput = cinput
self._graphics = graphics
self._menu = menu
def run(self):
while True:
item = self._menu.get_selection()
if item.menu_type == MenuType.CMD:
if item.data["mode"] == "album":
self._play_dir(item.data["dir"], False)
elif item.data["mode"] == "random":
self._play_dir(item.data["dir"], True)
elif item.data["mode"] == "single":
self._play_track(item.data["dir"], item.data["track"])
elif item.data["mode"] == "resume":
self._play_resume(item.data["dir"])
elif item.menu_type == MenuType.BACK:
return
def _play_dir(self, directory: str, random: bool):
ic("Playing", directory, random)
return
def _play_track(self, directory: str, track: str):
ic("Playing", track)
self._init_now_playing(track)
player = MPV()
player.play(path.join(directory, track))
self._run_now_playing(player)
return
def _play_resume(self, directory: str):
ic("Resuming", directory)
return
def _init_now_playing(self, init_name: str):
self._graphics.clear()
self._graphics.text(init_name, 0, 0, 1)
self._graphics.text("Pos:", 0, 1, 1)
self._draw_progress(0, 0)
self._graphics.show()
def _run_now_playing(self, player: MPV):
player.wait_until_playing()
ic(player.properties["filename"])
while not player.core_idle:
sleep(0.5)
self._graphics.show()
def _draw_progress(self, pos: int, length: int):
pos_str = self._convert_seconds(pos)
if length <= 0:
self._graphics.text(pos_str, 5, 1, 1)
else:
len_str = self._convert_seconds(length)
progress_str = "%s / %s" % (pos_str, len_str)
self._graphics.text(progress_str, 5, 1, 1)
def _convert_seconds(self, seconds: int):
seconds = seconds % (24 * 3600)
hours = seconds // 3600
seconds %= 3600
minutes = seconds // 60
seconds %= 60
if hours > 0:
return "%d:%02d:%02d" % (hours, minutes, seconds)
elif minutes > 0:
return "%d:%02d" % (minutes, seconds)
else:
return "%02d" % (seconds)