All pastes #799361 Raw Edit

Miscellany

public text v1 · immutable
#799361 ·published 2007-11-27 16:10 UTC
rendered paste body
#!/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()