Adding control_point/main.py, who starts the zukebox_control_point.
[zukebox] / control_point / zukebox_control_point.py
index 503295d..fefad8a 100644 (file)
@@ -7,37 +7,76 @@ from brisa.core.network import parse_url
 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()