Adding control_point/main.py, who starts the zukebox_control_point.
[zukebox] / control_point / zukebox_control_point.py
1 # Simple UPnP control point using BRisa framework
2
3 from brisa.core.reactors import install_default_reactor
4 reactor = install_default_reactor()
5
6 from brisa.core.network import parse_url
7 from brisa.core.threaded_call import run_async_function
8
9 from brisa.upnp.control_point.control_point import ControlPoint
10 from brisa.upnp.control_point.control_point_av import ControlPointAV
11
12 devices=[]
13 service = ('u','urn:schemas-upnp-org:service:PlayList:1')
14 zukebox_type = 'urn:schemas-upnp-org:device:ZukeBoxServer:1'
15
16 class ZukeboxControlPoint(ControlPointAV):
17
18     def __init__(self):
19         ControlPointAV.__init__(self)
20
21         self.cp = self.create_control_point()
22         self.cp.start()
23
24         reactor.add_after_stop_func(self.cp.stop)
25         reactor.main()
26
27         self.cp.start_search(300, 'upnp:rootdevice')
28         while self.set_zukebox_server(self.cp):
29             print 'Searching Zukebox Server'
30
31         return self.cp
32
33
34     def create_control_point(self):
35         """ Creates the control point and binds callbacks to device events.
36         """
37         cp = ControlPointAV()
38         cp.subscribe('new_device_event', self.on_new_device)
39         cp.subscribe('removed_device_event', self.on_removed_device)
40         return cp
41
42
43     def on_new_device(self, dev):
44
45         if not dev:
46             return
47
48         devices.append(dev)
49
50
51     def on_removed_device(self, udn):
52
53         for dev in devices:
54             if dev.udn == udn:
55                 devices.remove(dev)
56
57
58     def get_switch_service(self, device):
59         return device.services[service[1]]
60
61
62     def set_zukebox_server(self, cp):
63         
64         for device in cp.get_devices():
65             if device.values().friendly_name == 'Zukebox-Server':
66                 cp.set_current_server(device)
67                 return True
68
69         return False
70
71     def get_playlist(self, cp):
72         print 'Ainda falta implementar a chamada do playlist, esqueci o codigo no lab' 
73
74     def search(self, cp):
75         print 'O mesmo para o print acima - search '
76
77     def content_directory(self, cp):
78         print 'O mesmo para o print acima - content_directory '
79
80     def stop(self, cp):
81         cp.stop()
82         reactor.main_quit()