diff --git a/couchpotato/core/notifications/xbmc/main.py b/couchpotato/core/notifications/xbmc/main.py old mode 100644 new mode 100755 index 30759716..a2a81d70 --- a/couchpotato/core/notifications/xbmc/main.py +++ b/couchpotato/core/notifications/xbmc/main.py @@ -1,7 +1,7 @@ -from couchpotato.core.helpers.encoding import tryUrlencode from couchpotato.core.helpers.variable import splitString from couchpotato.core.logger import CPLog from couchpotato.core.notifications.base import Notification +from flask.helpers import json import base64 log = CPLog(__name__) @@ -17,28 +17,43 @@ class XBMC(Notification): hosts = splitString(self.conf('host')) successful = 0 for host in hosts: - if self.send({'command': 'ExecBuiltIn', 'parameter': 'Notification(CouchPotato, %s)' % message}, host): - successful += 1 - if self.send({'command': 'ExecBuiltIn', 'parameter': 'XBMC.updatelibrary(video)'}, host): - successful += 1 + response = self.request(host, [ + ('GUI.ShowNotification', {"title":"CouchPotato", "message":message}), + ('VideoLibrary.Scan', {}), + ]) + + for result in response: + if result['result'] == "OK": + successful += 1 return successful == len(hosts) * 2 - def send(self, command, host): + def request(self, host, requests): + server = 'http://%s/jsonrpc' % host - url = 'http://%s/xbmcCmds/xbmcHttp/?%s' % (host, tryUrlencode(command)) + data = [] + for req in requests: + method, kwargs = req + data.append({ + 'method': method, + 'params': kwargs, + 'jsonrpc': '2.0', + 'id': method, + }) + data = json.dumps(data) + + headers = { + 'Content-Type': 'application/json', + } - headers = {} if self.conf('password'): - headers = { - 'Authorization': "Basic %s" % base64.encodestring('%s:%s' % (self.conf('username'), self.conf('password')))[:-1] - } + base64string = base64.encodestring('%s:%s' % (self.conf('username'), self.conf('password'))).replace('\n', '') + headers['Authorization'] = 'Basic %s' % base64string - try: - self.urlopen(url, headers = headers, show_error = False) - except: - log.error("Couldn't sent command to XBMC") - return False + log.debug('Sending request to %s: %s', (host, data)) + rdata = self.urlopen(server, headers = headers, params = data, multipart = True) + response = json.loads(rdata) + log.debug('Returned from request %s: %s', (host, response)) + + return response - log.info('XBMC notification to %s successful.', host) - return True diff --git a/couchpotato/core/plugins/base.py b/couchpotato/core/plugins/base.py index 5f3a9a44..46847154 100644 --- a/couchpotato/core/plugins/base.py +++ b/couchpotato/core/plugins/base.py @@ -124,7 +124,7 @@ class Plugin(object): try: if multipart: - log.info('Opening multipart url: %s, params: %s', (url, [x for x in params.iterkeys()])) + log.info('Opening multipart url: %s, params: %s', (url, [x for x in params.iterkeys()] if isinstance(params, dict) else 'with data')) request = urllib2.Request(url, params, headers) cookies = cookielib.CookieJar()