Beispiel #1
0
                                    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);
                                        });
                                    });
Beispiel #2
0
                    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);
                        }
                    });