70 lines
1.9 KiB
Python
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)
|