106 lines
2.4 KiB
Python
106 lines
2.4 KiB
Python
|
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()
|