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