Wobuzz/wobuzz/mpris/dbus_properties.py

70 lines
1.9 KiB
Python

#!/usr/bin/python3
from jeepney import new_signal
from .utils import *
class DBusProperties(DBusInterface):
def get_all(self):
body = ({},)
return body
def properties_changed(self, interface: str, prop_name: str):
body = None
if interface == MPRIS_ROOT_INTERFACE:
prop = getattr(self.server.root_interface, prop_name)(None)
body = (MPRIS_ROOT_INTERFACE,) + ({prop_name: prop}, [])
elif interface == MPRIS_PLAYER_INTERFACE:
prop = getattr(self.server.player_interface, prop_name)(None)
body = (MPRIS_PLAYER_INTERFACE,) + ({prop_name: prop}, [])
signature = "" if body is None else "sa{sv}as"
msg = new_signal(
self.server.bus_address.with_interface(PROPERTIES_INTERFACE),
"PropertiesChanged",
signature,
body
)
self.server.bus.send(msg)
# ======== Methods ========
def Get(self, msg: Message):
interface_name = msg.body[0]
return_msg = None
if interface_name == PROPERTIES_INTERFACE:
return self.get(msg)
elif interface_name == MPRIS_ROOT_INTERFACE:
return self.server.root_interface.get(msg)
elif interface_name == MPRIS_PLAYER_INTERFACE:
return self.server.player_interface.get(msg)
else:
return new_error(msg, *DBusErrors.invalidArgs(interface=interface_name))
def GetAll(self, msg: Message):
interface = msg.body[0]
if interface == PROPERTIES_INTERFACE:
body = self.get_all()
elif interface == MPRIS_ROOT_INTERFACE:
body = self.server.root_interface.get_all()
elif interface == MPRIS_PLAYER_INTERFACE:
body = self.server.player_interface.get_all()
else:
return new_error(msg, *DBusErrors.invalidArgs(interface=interface))
return new_method_return(msg, "a{sv}", body)