From 6f53f637ad572c26ca48025b05e72a4a92e55514 Mon Sep 17 00:00:00 2001 From: Henry Bilby Date: Thu, 4 Jun 2009 01:14:53 -0400 Subject: [PATCH] Updating zukebox_control_point to Python-Brisa version 0.10 . --- control_point/zukebox_control_point.py | 164 +++++++++++++------------------- 1 file changed, 67 insertions(+), 97 deletions(-) diff --git a/control_point/zukebox_control_point.py b/control_point/zukebox_control_point.py index f487e54..20cc09b 100644 --- a/control_point/zukebox_control_point.py +++ b/control_point/zukebox_control_point.py @@ -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 ', '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 . 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() -- 1.7.9.5