Advanced option for XBMC to only update first in list

Thanks @cliffordwhansen
This commit is contained in:
Ruud
2013-06-15 22:17:23 +02:00
parent 9bf006f4d3
commit ca9a78eea4
2 changed files with 42 additions and 9 deletions
@@ -31,6 +31,13 @@ config = [{
'default': '', 'default': '',
'type': 'password', 'type': 'password',
}, },
{
'name': 'only_first',
'default': 0,
'type': 'bool',
'advanced': True,
'description': 'Only update the first host when movie snatched, useful for synced XBMC',
},
{ {
'name': 'on_snatch', 'name': 'on_snatch',
'default': 0, 'default': 0,
+35 -9
View File
@@ -1,8 +1,10 @@
from couchpotato.core.helpers.variable import splitString from couchpotato.core.helpers.variable import splitString
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.core.notifications.base import Notification from couchpotato.core.notifications.base import Notification
from urllib2 import URLError
import base64 import base64
import json import json
import socket
import traceback import traceback
import urllib import urllib
@@ -20,19 +22,30 @@ class XBMC(Notification):
hosts = splitString(self.conf('host')) hosts = splitString(self.conf('host'))
successful = 0 successful = 0
max_successful = 0
for host in hosts: for host in hosts:
if self.use_json_notifications.get(host) is None: if self.use_json_notifications.get(host) is None:
self.getXBMCJSONversion(host, message = message) self.getXBMCJSONversion(host, message = message)
if self.use_json_notifications.get(host): if self.use_json_notifications.get(host):
response = self.request(host, [ calls = [
('GUI.ShowNotification', {'title': self.default_title, 'message': message, 'image': self.getNotificationImage('small')}), ('GUI.ShowNotification', {'title': self.default_title, 'message': message, 'image': self.getNotificationImage('small')}),
('VideoLibrary.Scan', {}), ]
])
if not self.conf('only_first') or hosts.index(host) == 0:
calls.append(('VideoLibrary.Scan', {}))
max_successful += len(calls)
response = self.request(host, calls)
else: else:
response = self.notifyXBMCnoJSON(host, {'title':self.default_title, 'message':message}) response = self.notifyXBMCnoJSON(host, {'title':self.default_title, 'message':message})
response += self.request(host, [('VideoLibrary.Scan', {})])
if not self.conf('only_first') or hosts.index(host) == 0:
response += self.request(host, [('VideoLibrary.Scan', {})])
max_successful += 1
max_successful += 1
try: try:
for result in response: for result in response:
@@ -44,7 +57,7 @@ class XBMC(Notification):
except: except:
log.error('Failed parsing results: %s', traceback.format_exc()) log.error('Failed parsing results: %s', traceback.format_exc())
return successful == len(hosts) * 2 return successful == max_successful
def getXBMCJSONversion(self, host, message = ''): def getXBMCJSONversion(self, host, message = ''):
@@ -53,7 +66,7 @@ class XBMC(Notification):
# XBMC JSON-RPC version request # XBMC JSON-RPC version request
response = self.request(host, [ response = self.request(host, [
('JSONRPC.Version', {}) ('JSONRPC.Version', {})
]) ])
for result in response: for result in response:
if (result.get('result') and type(result['result']['version']).__name__ == 'int'): if (result.get('result') and type(result['result']['version']).__name__ == 'int'):
# only v2 and v4 return an int object # only v2 and v4 return an int object
@@ -138,7 +151,7 @@ class XBMC(Notification):
# <li>Error:<message> # <li>Error:<message>
# </html> # </html>
# #
response = self.urlopen(server, headers = headers) response = self.urlopen(server, headers = headers, timeout = 3, show_error = False)
if 'OK' in response: if 'OK' in response:
log.debug('Returned from non-JSON-type request %s: %s', (host, response)) log.debug('Returned from non-JSON-type request %s: %s', (host, response))
@@ -149,6 +162,13 @@ class XBMC(Notification):
# manually fake expected response array # manually fake expected response array
return [{'result': 'Error'}] return [{'result': 'Error'}]
except URLError, e:
if isinstance(e.reason, socket.timeout):
log.info('Couldn\'t send request to XBMC, assuming it\'s turned off')
return [{'result': 'Error'}]
else:
log.error('Failed sending non-JSON-type request to XBMC: %s', traceback.format_exc())
return [{'result': 'Error'}]
except: except:
log.error('Failed sending non-JSON-type request to XBMC: %s', traceback.format_exc()) log.error('Failed sending non-JSON-type request to XBMC: %s', traceback.format_exc())
return [{'result': 'Error'}] return [{'result': 'Error'}]
@@ -177,11 +197,17 @@ class XBMC(Notification):
try: try:
log.debug('Sending request to %s: %s', (host, data)) log.debug('Sending request to %s: %s', (host, data))
rdata = self.urlopen(server, headers = headers, params = data, multipart = True) response = self.getJsonData(server, headers = headers, params = data, timeout = 3, show_error = False)
response = json.loads(rdata)
log.debug('Returned from request %s: %s', (host, response)) log.debug('Returned from request %s: %s', (host, response))
return response return response
except URLError, e:
if isinstance(e.reason, socket.timeout):
log.info('Couldn\'t send request to XBMC, assuming it\'s turned off')
return []
else:
log.error('Failed sending request to XBMC: %s', traceback.format_exc())
return []
except: except:
log.error('Failed sending request to XBMC: %s', traceback.format_exc()) log.error('Failed sending request to XBMC: %s', traceback.format_exc())
return [] return []