MPRIS: Got everything necessary working. (I think.)

This commit is contained in:
The Wobbler 2025-04-18 19:35:13 +02:00
parent f23530628c
commit 1f149a25a3
10 changed files with 333 additions and 58 deletions

View file

@ -1,7 +1,5 @@
#!/usr/bin/python3
from jeepney import new_method_return
from .utils import *
@ -9,26 +7,116 @@ 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/mpris/MediaPlayer2/murx"), # random junk, no functionality
"mpris:trackid": ("o", "/org/bla/gubber"), # random junk, no functionality
"mpris:length": ("x", 0),
"xesam:title": ("s", "Huggenburgl")
}
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),
"Metadata": ("a{sv}", self.metadata)
"CanPause": ("b", True),
"CanSeek": ("b", True),
"CanControl": ("b", True)
},)
return body
def Play(self, msg: Message):
print("Play!")
# ======== 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):
print("Play/Pause!")
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):
body = (self.metadata,)
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
return new_method_return(msg, "a{sv}", body)