created the rederer file
[zukebox] / zukebox_render / src / zb_renderer.py
1
2 from brisa.core.reactors import GLib2Reactor
3 reactor = GLib2Reactor()
4
5 import brisa
6 brisa.__enable_offline_mode__ = True
7
8 import os
9 import dbus.mainloop.glib
10 import dbus.service
11
12 from brisa.core import config
13 from brisa.upnp.device import Device
14 from brisa.upnp.services.connmgr import ConnectionManagerRenderer
15
16 from zukebox_renderer.services.avtransport import AVTransport
17 from zukebox_renderer.services.render_control import RenderingControl
18
19 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
20
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.
25
26     ZukeBox Audio Renderer has a DBus interface where there are the
27     following methods:
28         halt() - Halts the ZukeBox renderer
29         ...
30     """
31     DBUS_SERVICE_NAME = "br.org.zagaia"
32     DBUS_OBJ_PATH = "/br/org/zagaia/zukebox/ZukeBoxRenderer"
33     DBUS_IFACE = "br.org.zagaia.zukebox.ZukeBoxRenderer"
34
35     def __init__(self, srv_name, listen_url=""):
36         """Constructor
37         @param srv_name:  the server name
38         @param listen_url: the url to be listen requests
39
40         @type srv_name: string
41         @type listen_url: string
42         """
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)
46
47         self.server_name = srv_name
48         self.listen_url = listen_url
49
50         self.device = None
51
52     def _create_device(self):
53         model_name = "ZukeBox Renderer version 0.1"
54         project_page = 'http://portal.fucapi.br/nepcomp/zagaia'
55         serial_no = "0000010"
56         self.device = Device('urn:schemas-upnp-org:device:ZukeBoxRenderer:1',
57                              self.server_name,
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)
66
67     def _create_services(self):
68         mod_path = config.get_parameter("zukebox_render", "home")
69         x_path = os.path.join(mod_path, "xml_descriptions")
70
71         avt = AVTransport(x_path)
72         rc = RenderingControl(x_path, avt.get_player())
73         cm = ConnectionManagerRenderer()
74
75         self.device.add_service(cm)
76         self.device.add_service(avt)
77         self.device.add_service(rc)
78
79     def start(self):
80         self._create_device()
81         self._create_services()
82         self.device.start()
83         reactor.add_after_stop_func(self.device.stop)
84         reactor.main()
85
86     @dbus.service.method(DBUS_IFACE)
87     def halt(self):
88         reactor.main_quit()
89