return new Promise<any>((resolve, reject) => { if (!kodi.isConnected()) { client.$proxy().unregisterPlayer({ identity: kodiService.id, name: kodiService.name }) reject(new Error('Not connected')); return; } akala.each(m.params, function (value) { if (value.required && typeof (params[value.name]) == 'undefined') { throw JSON.stringify(params) + ' is missing the required param ' + value.name + ' for ' + ns[1]; } }); akala.logger.verbose('calling ' + i, JSON.stringify(params)); kodi.send(i as string, params, (error, result) => { if (error) reject(error); else resolve(result); }); });
kodi.send('JSONRPC.Introspect', [], async function (error, reply) { if (error) { debug.error(error); reject(error); } else { akala.each(reply['methods'], function (m, i) { var ns = (i as string).split('.'); if (typeof (kodi[ns[0]]) == 'undefined') kodi[ns[0]] = {}; kodi[ns[0]][ns[1]] = function (params) { return new Promise<any>((resolve, reject) => { if (!kodi.isConnected()) { client.$proxy().unregisterPlayer({ identity: kodiService.id, name: kodiService.name }) reject(new Error('Not connected')); return; } akala.each(m.params, function (value) { if (value.required && typeof (params[value.name]) == 'undefined') { throw JSON.stringify(params) + ' is missing the required param ' + value.name + ' for ' + ns[1]; } }); akala.logger.verbose('calling ' + i, JSON.stringify(params)); kodi.send(i as string, params, (error, result) => { if (error) reject(error); else resolve(result); }); }); } }) akala.each(reply['notifications'], function (i, m) { var ns = i.split('.'); if (typeof (kodi[ns[0]]) == 'undefined') kodi[ns[0]] = {}; kodi[ns[0]][ns[1]] = function (callback) { if (typeof (callback) == 'undefined') { throw 'callback is missing for ' + ns[1]; } akala.logger.info('monitoring ' + i, JSON.stringify(i)); kodi.expose(i, callback); } }) debug('kodi client built'); await kodi['JSONRPC'].SetConfiguration({ notifications: { gui: false, system: true, player: true, audiolibrary: false, other: false, videolibrary: false } }); kodi['Player'].OnPause(function () { debug('OnPause') client.status({ target: kodiService.id }); stopTimer(kodiService.id); }); kodi['Player'].OnPlay(function () { debug('OnPlay') client.status({ target: kodiService.id }); client.playlist({ target: kodiService.id }); startTimer(kodiService.id); }); kodi['Player'].OnSeek(function () { debug('OnSeek') client.status({ target: kodiService.id }); }); kodi['Player'].OnPropertyChanged(function () { debug('OnPropertyChanged') client.status({ target: kodiService.id }); }); kodi['Player'].OnStop(function () { debug('OnStop') client.status({ target: kodiService.id }); stopTimer(kodiService.id); }); resolve(kodi as any); } });