Advanced option for XBMC to only update first in list
Thanks @cliffordwhansen
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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 []
|
||||||
|
|||||||
Reference in New Issue
Block a user