You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.2 KiB
87 lines
2.2 KiB
import json
|
|
|
|
from couchpotato import CPLog
|
|
from couchpotato.core.event import addEvent
|
|
from couchpotato.core.helpers.encoding import tryUrlencode
|
|
import requests
|
|
|
|
|
|
log = CPLog(__name__)
|
|
|
|
|
|
class PlexClientProtocol(object):
|
|
def __init__(self, plex):
|
|
self.plex = plex
|
|
|
|
addEvent('notify.plex.notifyClient', self.notify)
|
|
|
|
def notify(self, client, message):
|
|
raise NotImplementedError()
|
|
|
|
|
|
class PlexClientHTTP(PlexClientProtocol):
|
|
def request(self, command, client):
|
|
url = 'http://%s:%s/xbmcCmds/xbmcHttp/?%s' % (
|
|
client['address'],
|
|
client['port'],
|
|
tryUrlencode(command)
|
|
)
|
|
|
|
headers = {}
|
|
|
|
try:
|
|
self.plex.urlopen(url, headers = headers, timeout = 3, show_error = False)
|
|
except Exception as err:
|
|
log.error("Couldn't sent command to Plex: %s", err)
|
|
return False
|
|
|
|
return True
|
|
|
|
def notify(self, client, message):
|
|
if client.get('protocol') != 'xbmchttp':
|
|
return None
|
|
|
|
data = {
|
|
'command': 'ExecBuiltIn',
|
|
'parameter': 'Notification(CouchPotato, %s)' % message
|
|
}
|
|
|
|
return self.request(data, client)
|
|
|
|
|
|
class PlexClientJSON(PlexClientProtocol):
|
|
def request(self, method, params, client):
|
|
log.debug('sendJSON("%s", %s, %s)', (method, params, client))
|
|
url = 'http://%s:%s/jsonrpc' % (
|
|
client['address'],
|
|
client['port']
|
|
)
|
|
|
|
headers = {
|
|
'Content-Type': 'application/json'
|
|
}
|
|
|
|
request = {
|
|
'id': 1,
|
|
'jsonrpc': '2.0',
|
|
'method': method,
|
|
'params': params
|
|
}
|
|
|
|
try:
|
|
requests.post(url, headers = headers, timeout = 3, data = json.dumps(request))
|
|
except Exception as err:
|
|
log.error("Couldn't sent command to Plex: %s", err)
|
|
return False
|
|
|
|
return True
|
|
|
|
def notify(self, client, message):
|
|
if client.get('protocol') not in ['xbmcjson', 'plex']:
|
|
return None
|
|
|
|
params = {
|
|
'title': 'CouchPotato',
|
|
'message': message
|
|
}
|
|
return self.request('GUI.ShowNotification', params, client)
|
|
|