PlexKodiConnect/resources/lib/kodijsonrpc.py

106 lines
2.4 KiB
Python
Raw Normal View History

2018-10-01 01:35:23 +10:00
import xbmc
import json
class JSONRPCMethod:
class Exception(Exception):
pass
def __init__(self):
self.family = None
def __getattr__(self, method):
def handler(**kwargs):
command = {
'jsonrpc': '2.0',
'id': 1,
'method': '{0}.{1}'.format(self.family, method)
}
if kwargs:
command['params'] = kwargs
# xbmc.log(json.dumps(command))
ret = json.loads(xbmc.executeJSONRPC(json.dumps(command)))
if ret:
if 'error' in ret:
raise self.Exception(ret['error'])
else:
return ret['result']
else:
return None
return handler
def __call__(self, family):
self.family = family
return self
class KodiJSONRPC:
def __init__(self):
self.methodHandler = JSONRPCMethod()
def __getattr__(self, family):
return self.methodHandler(family)
rpc = KodiJSONRPC()
class BuiltInMethod:
class Exception(Exception):
pass
def __init__(self):
self.module = None
def __getattr__(self, method):
def handler(*args, **kwargs):
args = [str(a).replace(',', '\,') for a in args]
for k, v in kwargs.items():
args.append('{0}={v}'.format(k, str(v).replace(',', '\,')))
if args:
command = '{0}.{1}({2})'.format(self.module, method, ','.join(args))
else:
command = '{0}.{1}'.format(self.module, method)
xbmc.log(command, xbmc.LOGNOTICE)
xbmc.executebuiltin(command)
return handler
def __call__(self, *args, **kwargs):
args = [str(a).replace(',', '\,') for a in args]
for k, v in kwargs.items():
args.append('{0}={v}'.format(k, str(v).replace(',', '\,')))
if args:
command = '{0}({1})'.format(self.module, ','.join(args))
else:
command = '{0}'.format(self.module)
xbmc.log(command, xbmc.LOGNOTICE)
xbmc.executebuiltin(command)
def initModule(self, module):
self.module = module
return self
class KodiBuiltin:
def __init__(self):
self.methodHandler = BuiltInMethod()
def __getattr__(self, module):
return self.methodHandler.initModule(module)
builtin = KodiBuiltin()