Updating zukebox_control_point to Python-Brisa version 0.10 .
authorHenry Bilby <henrymiller.engenheiro@gmail.com>
Thu, 4 Jun 2009 05:14:53 +0000 (01:14 -0400)
committerHenry Bilby <henrymiller.engenheiro@gmail.com>
Thu, 4 Jun 2009 05:14:53 +0000 (01:14 -0400)
control_point/zukebox_control_point.py

index f487e54..20cc09b 100644 (file)
@@ -13,104 +13,74 @@ 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
-    print "Type 'list' to see the whole list"
-    if not dev:
-        return
+    def __init__(self):
+       ControlPointAV.__init__(self)
 
-    print devices
-    devices.append(dev)
+
+    def start(self):
+
+        self.cp = self.create_control_point()
+        self.cp.start()
+
+        reactor.add_after_stop_func(self.cp.stop)
+        reactor.main()
+
+       cp.start_search(300, 'upnp:rootdevice')
+        while self.set_zukebox_server(cp):
+           print 'Searching Zukebox Server'
+
+
+    def create_control_point():
+        """ Creates the control point and binds callbacks to device events.
+        """
+        cp = ControlPointAV()
+        cp.subscribe('new_device_event', on_new_device)
+        cp.subscribe('removed_device_event', on_removed_device)
+        return cp
+
+
+    def on_new_device(dev):
+
+        if not dev:
+            return
+
+        devices.append(dev)
+        print 'Got new device: ', dev.udn
+       print "Type 'list' to see the whole list"
     
 
-def on_removed_device(udn):
-
-    print 'Device is gone: ', udn
-    for dev in devices:
-       if dev.udn == udn:
-           devices.remove(dev)
-
-def get_switch_service(device):
-    return device.services[service[1]]
-
-def create_control_point():
-    """ Creates the control point and binds callbacks to device events.
-    """
-    c = ControlPointAV()
-    c.subscribe('new_device_event', on_new_device)
-    c.subscribe('removed_device_event', on_removed_device)
-    return c
-
-
-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 _handle_cmds(c):
-    while True:
-       try:
-           input= raw_input('(in doubt use help)command: ')
-       except KeyboardInterrupt, EOFError:
-           c.stop()
-           break
-       # Handle command
-       if input == '':
-           continue
-       elif input == 'help':
-           print 'Available commands: '
-           for x in ['help', 'search', 'set_zukebox <dev number>', 'get_playlist', 'stop', 'list', 'exit']:
-               print '\t%s' % x
-       elif input == 'stop':
-           # Stop searching
-           c.stop_search()
-
-       elif input == 'search':
-           # Start searching
-           c.start_search(300, 'upnp:rootdevice')
-
-       elif input == 'list':
-           # List devices found
-           k=0
-           for d in c.get_devices().values():
-               print 'Device no.:', k
-               print 'UDN: ', d.udn
-               print 'Name: ', d.friendly_name
-               print 'Device type', d.device_type
-               print 'Services: ', d.services.keys()
-               print 'Embedded devices:', [dev.friendly_name for dev in d.devices.values()]
-               print
-               k+=1
-       elif input.startswith('set_zukebox'):
-           try:
-               device_number = int(input.split(' ')[1])
-               c.set_current_server(devices[device_number])
-           except Exception, e:
-               print 'Zukebox number not found. Please run list and check again. Exception: \n %s' % e
-               c.set_current_server(None)
-       elif input == 'get_playlist':
-           try:
-               print c.get_current_server().services
-               serviceTest = get_switch_service(c.get_current_server())
-               print dir(serviceTest.get_actions.__doc__)
-               playlist = serviceTest.get_actions()
-               print 'Playlist: %s' % playlist
-               #for music in playlist:
-                   #print '%s', music.name
-           except Exception, e:
-               if not hasattr(c, 'get_current_server()') or not c.get_current_server():
-                   print 'Zukebox device not set. Please use set zukebox <n>. Exception: %s' % e
-               else:
-                   print 'Erro in get_playlist: %s' % e
-       elif input == 'exit':
-           break
-
-    reactor.main_quit()
-
-if __name__ == '__main__':
-    main()
+    def on_removed_device(udn):
+
+        print 'Device is gone: ', udn
+        for dev in devices:
+           if dev.udn == udn:
+               devices.remove(dev)
+
+
+    def get_switch_service(device):
+        return device.services[service[1]]
+
+
+    def set_zukebox_server(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(cp):
+        
+
+    def search(cp):
+
+
+    def content_directory(cp):
+
+
+    def stop(cp):
+        cp.stop()
+        reactor.main_quit()