#!/usr/bin/env python def state_variable_change(variable): if variable.name == 'CurrentTrackMetaData': #print variable.value if variable.value != None and len(variable.value)>0: try: elt = DIDLLite.DIDLElement.fromString(variable.value) for item in elt.getItems(): print "now playing: %r - %r (%s/%r)" % (item.artist, item.title, item.id, item.upnp_class) except SyntaxError: #print "seems we haven't got an XML string" return elif variable.name == 'TransportState': print variable.name, 'changed from', variable.old_value, 'to', variable.value def media_renderer_found(client, usn): print "media_renderer_found", client.device.get_friendly_name() client.av_transport.subscribe_for_variable('CurrentTrackMetaData', state_variable_change) client.av_transport.subscribe_for_variable('TransportState', state_variable_change) def media_renderer_removed(usn): print "media_renderer_removed", usn if __name__ == '__main__': from twisted.python import usage import sys class Options(usage.Options): optParameters = [['connection', 'c', 'upnp', 'use upnp or dbus'], ] options = Options() try: options.parseOptions() except usage.UsageError, errortext: print '%s: %s' % (sys.argv[0], errortext) print '%s: Try --help for usage details.' % (sys.argv[0]) sys.exit(1) if options['connection'] == 'upnp': from twisted.internet import reactor from coherence.base import Coherence from coherence.upnp.devices.control_point import ControlPoint from coherence.upnp.core import DIDLLite import louie louie.connect(media_renderer_found, 'Coherence.UPnP.ControlPoint.MediaRenderer.detected', louie.Any) louie.connect(media_renderer_removed, 'Coherence.UPnP.ControlPoint.MediaRenderer.removed', louie.Any) ControlPoint(Coherence({'logmode':'info'})) else: from twisted.internet import glib2reactor glib2reactor.install() from twisted.internet import reactor #... reactor.run()