Wobuzz/wobuzz/mpris/mpris_player.py

123 lines
3.4 KiB
Python
Raw Normal View History

#!/usr/bin/python3
from .utils import *
class MPRISPlayer(DBusInterface):
def __init__(self, server, interface):
super().__init__(server, interface)
self.playback_status = "Stopped"
self.loop_status = "None"
self.shuffle = False
self.metadata = {
"mpris:trackid": ("o", "/org/bla/gubber"), # random junk, no functionality
"mpris:length": ("x", 0),
"mpris:artUrl": ("s", "file://" + self.server.app.utils.wobuzz_location + "/icon.svg"),
}
self.volume = 1.0
def get_all(self):
body = ({
"PlaybackStatus": ("s", self.playback_status),
"LoopStatus": ("s", self.loop_status),
"Rate": ("d", 1.0),
"Shuffle": ("b", self.shuffle),
"Metadata": ("a{sv}", self.metadata),
"Volume": ("d", self.volume),
"Position": ("x", self.server.app.player.get_progress() * 1000), # milliseconds to microseconds
"MinimumRate": ("d", 1.0),
"MaximumRate": ("d", 1.0),
"CanGoNext": ("b", True),
"CanGoPrevious": ("b", True),
"CanPlay": ("b", True),
"CanPause": ("b", True),
"CanSeek": ("b", True),
"CanControl": ("b", True)
},)
return body
# ======== Methods ========
def Next(self, msg: Message):
self.server.app.player.next_track()
def Previous(self, msg: Message):
self.server.app.player.previous_track()
def Pause(self, msg: Message):
return lambda: self.server.app.player.toggle_playing()
def PlayPause(self, msg: Message):
return lambda: self.server.app.player.toggle_playing()
def Stop(self, msg: Message):
self.server.app.player.stop()
def Play(self, msg: Message):
return lambda: self.server.app.player.toggle_playing()
def Seek(self, msg: Message):
seek_forward = msg.body[0] // 1000 # microseconds to milliseconds
new_position = self.server.app.player.get_progress() + seek_forward
self.server.app.player.seek(new_position)
def SetPosition(self, msg: Message):
trackid = msg.body[0]
position = msg.body[1] // 1000 # microseconds to milliseconds
self.server.app.player.seek(position)
def OpenUri(self, msg: Message):
pass
# ======== Properties ========
def PlaybackStatus(self, msg: Message):
return "s", self.playback_status
def LoopStatus(self, msg: Message):
return "s", self.loop_status
def Rate(self, msg: Message):
return "d", 1.0
def Shuffle(self, msg: Message):
return "b", self.shuffle
def Metadata(self, msg: Message):
return "a{sv}", self.metadata
def Volume(self, msg: Message):
return "d", self.volume
def Position(self, msg: Message):
return "x", self.server.app.player.get_progress() * 1000 # milliseconds to microseconds
def MinimumRate(self, msg: Message):
return "d", 1.0
def MaximumRate(self, msg: Message):
return "d", 1.0
def CanGoNext(self, msg: Message):
return "b", True
def CanGoPrevious(self, msg: Message):
return "b", True
def CanPlay(self, msg: Message):
return "b", True
def CanPause(self, msg: Message):
return "b", True
def CanSeek(self, msg: Message):
return "b", True
def CanControl(self, msg: Message):
return "b", True