diff --git a/headphones/notifiers.py b/headphones/notifiers.py index 3da78a6e..4db68ee4 100644 --- a/headphones/notifiers.py +++ b/headphones/notifiers.py @@ -192,6 +192,51 @@ class XBMC: except: logger.warn('Error sending notification request to XBMC') +class LMS: + +#Class for updating a Logitech Media Server + + def __init__(self): + + self.hosts = headphones.LMS_HOST + + def _sendjson(self, host): + data = {'id': 1, 'method': 'slim.request', 'params': ["",["rescan"]]} #Had a lot of trouble with simplejson, but this works. + data = simplejson.JSONEncoder().encode(data) + + content = {'Content-Type': 'application/json', 'Content-Length': len(data)} + + req = urllib2.Request(host+'/jsonrpc.js', data, content) + + try: + handle = urllib2.urlopen(req) + except Exception, e: + logger.warn('Error opening LMS url: %s' % e) + return + + response = simplejson.JSONDecoder().decode(handle.read()) + server_result = simplejson.dumps(response) + + try: + return response[0]['result'] + except: + logger.warn('LMS returned error: %s' % response[0]['error']) + return + + def update(self): + + #Send the ["rescan"] command to an LMS server. + #Note that the command must be prefixed with the 'player' that the command is aimed at, + #But with this being a request for the server to update its library, the player is blank, so "" + + hosts = [x.strip() for x in self.hosts.split(',')] + + for host in hosts: + logger.info('Sending library rescan command to LMS @ '+host) + request = self._sendjson(host) + + if not request: + logger.warn('Error sending rescan request to LMS') class Plex: