forked from Wobbl/Wobuzz
MPRIS: Got everything necessary working. (I think.)
This commit is contained in:
parent
f23530628c
commit
1f149a25a3
10 changed files with 333 additions and 58 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue