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()