2 from brisa.core.reactors import GLib2Reactor
3 reactor = GLib2Reactor()
6 brisa.__enable_offline_mode__ = True
9 import dbus.mainloop.glib
12 from brisa.core import config
13 from brisa.upnp.device import Device
14 from brisa.upnp.services.connmgr import ConnectionManagerRenderer
16 from zukebox_renderer.services.avtransport import AVTransport
17 from zukebox_renderer.services.render_control import RenderingControl
19 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
21 class ZukeBoxRenderer(dbus.service.Object):
22 """ZukeBox Audio Renderer
23 ZukeBox Renderer allow "play" a stream of audio, that come from a
24 ControlPoint or ZukeBox Audio Server.
26 ZukeBox Audio Renderer has a DBus interface where there are the
28 halt() - Halts the ZukeBox renderer
31 DBUS_SERVICE_NAME = "br.org.zagaia"
32 DBUS_OBJ_PATH = "/br/org/zagaia/zukebox/ZukeBoxRenderer"
33 DBUS_IFACE = "br.org.zagaia.zukebox.ZukeBoxRenderer"
35 def __init__(self, srv_name, listen_url=""):
37 @param srv_name: the server name
38 @param listen_url: the url to be listen requests
40 @type srv_name: string
41 @type listen_url: string
43 bus = dbus.SessionBus()
44 busname = dbus.service.BusName(self.DBUS_IFACE, bus=bus)
45 dbus.service.Object.__init__(self, busname, self.DBUS_OBJ_PATH)
47 self.server_name = srv_name
48 self.listen_url = listen_url
52 def _create_device(self):
53 model_name = "ZukeBox Renderer version 0.1"
54 project_page = 'http://portal.fucapi.br/nepcomp/zagaia'
56 self.device = Device('urn:schemas-upnp-org:device:ZukeBoxRenderer:1',
58 force_listen_url=self.listen_url,
59 manufacturer='ZukeBox Team. Zagaia Laboratory'
60 manufacturer_url=project_page,
61 model_description='A Renderer fo audio types',
62 model_name=model_name,
63 model_number=serial_no,
64 model_url=project_page,
65 serial_number=serial_no)
67 def _create_services(self):
68 mod_path = config.get_parameter("zukebox_render", "home")
69 x_path = os.path.join(mod_path, "xml_descriptions")
71 avt = AVTransport(x_path)
72 rc = RenderingControl(x_path, avt.get_player())
73 cm = ConnectionManagerRenderer()
75 self.device.add_service(cm)
76 self.device.add_service(avt)
77 self.device.add_service(rc)
81 self._create_services()
83 reactor.add_after_stop_func(self.device.stop)
86 @dbus.service.method(DBUS_IFACE)