from brisa.core.threaded_call import run_async_function
from brisa.upnp.control_point.control_point import ControlPoint
+from brisa.upnp.control_point.control_point_av import ControlPointAV
-service = ('u','urn:schemas-upnp-org:service:AudioLibrary:1')
+devices=[]
+service = ('u','urn:schemas-upnp-org:service:PlayList:1')
zukebox_type = 'urn:schemas-upnp-org:device:ZukeBoxServer:1'
-def on_new_device(dev):
+class ZukeboxControlPoint(ControlPointAV):
- print 'Got new device: ', dev.udn
- if not dev:
- return
+ def __init__(self):
+ ControlPointAV.__init__(self)
-def on_removed_device(udn):
+ self.cp = self.create_control_point()
+ self.cp.start()
- print 'Device is gone: ', udn
+ reactor.add_after_stop_func(self.cp.stop)
+ reactor.main()
-def get_switch_service(device):
- return device.services[service[1]]
+ self.cp.start_search(300, 'upnp:rootdevice')
+ while self.set_zukebox_server(self.cp):
+ print 'Searching Zukebox Server'
-def create_control_point():
- """ Creates the control point and binds callbacks to device events.
- """
- c = ControlPoint()
- c.subscribe('new_device_event', on_new_device)
- c.subscribe('removed_device_event', on_removed_device)
- return c
+ return self.cp
-def main():
- """ Main loop iteration receiving input commands.
- """
- c = create_control_point()
- c.start()
- #run_async_function(_handle_cmds, (c, ))
- reactor.add_after_stop_func(c.stop)
- reactor.main()
+ def create_control_point(self):
+ """ Creates the control point and binds callbacks to device events.
+ """
+ cp = ControlPointAV()
+ cp.subscribe('new_device_event', self.on_new_device)
+ cp.subscribe('removed_device_event', self.on_removed_device)
+ return cp
+
+
+ def on_new_device(self, dev):
+
+ if not dev:
+ return
+
+ devices.append(dev)
+
+
+ def on_removed_device(self, udn):
+
+ for dev in devices:
+ if dev.udn == udn:
+ devices.remove(dev)
+
+
+ def get_switch_service(self, device):
+ return device.services[service[1]]
+
+
+ def set_zukebox_server(self, cp):
+
+ for device in cp.get_devices():
+ if device.values().friendly_name == 'Zukebox-Server':
+ cp.set_current_server(device)
+ return True
+
+ return False
+
+ def get_playlist(self, cp):
+ print 'Ainda falta implementar a chamada do playlist, esqueci o codigo no lab'
+
+ def search(self, cp):
+ print 'O mesmo para o print acima - search '
+
+ def content_directory(self, cp):
+ print 'O mesmo para o print acima - content_directory '
+
+ def stop(self, cp):
+ cp.stop()
+ reactor.main_quit()