mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-03-11 21:27:05 +00:00
129 lines
3.2 KiB
JavaScript
129 lines
3.2 KiB
JavaScript
// Copyright (C) 2017-2020 Smart code 203358507
|
|
|
|
const EventEmitter = require('eventemitter3');
|
|
const { default: initialize_api, initialize_runtime } = require('@stremio/stremio-core-web');
|
|
const CoreTransport = require('./CoreTransport');
|
|
|
|
let transport = null;
|
|
let apiInitialized = null;
|
|
const apiEvents = new EventEmitter();
|
|
apiEvents.on('error', (error) => {
|
|
console.error(error);
|
|
});
|
|
initialize_api()
|
|
.then(() => {
|
|
const transportEvents = new EventEmitter();
|
|
transportEvents.on('error', (error) => {
|
|
console.error(error);
|
|
});
|
|
return initialize_runtime(({ name, args }) => {
|
|
try {
|
|
transportEvents.emit(name, args);
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
}).then(() => {
|
|
transport = new CoreTransport(transportEvents);
|
|
});
|
|
})
|
|
.then(() => {
|
|
apiInitialized = true;
|
|
apiEvents.emit('initialized');
|
|
})
|
|
.catch((error) => {
|
|
console.error(error);
|
|
apiInitialized = false;
|
|
apiEvents.emit('initialized');
|
|
});
|
|
|
|
function Core() {
|
|
let active = false;
|
|
let error = null;
|
|
let starting = false;
|
|
let _transport = null;
|
|
|
|
const events = new EventEmitter();
|
|
events.on('error', (error) => {
|
|
console.error(error);
|
|
});
|
|
|
|
function onAPIInitialized() {
|
|
if (apiInitialized) {
|
|
active = true;
|
|
error = null;
|
|
starting = false;
|
|
_transport = transport;
|
|
} else {
|
|
active = false;
|
|
error = new Error('Stremio Core API initialization failed');
|
|
starting = false;
|
|
_transport = null;
|
|
}
|
|
|
|
onStateChanged();
|
|
}
|
|
function onStateChanged() {
|
|
events.emit('stateChanged');
|
|
}
|
|
|
|
Object.defineProperties(this, {
|
|
active: {
|
|
configurable: false,
|
|
enumerable: true,
|
|
get: function() {
|
|
return active;
|
|
}
|
|
},
|
|
error: {
|
|
configurable: false,
|
|
enumerable: true,
|
|
get: function() {
|
|
return error;
|
|
}
|
|
},
|
|
starting: {
|
|
configurable: false,
|
|
enumerable: true,
|
|
get: function() {
|
|
return starting;
|
|
}
|
|
},
|
|
transport: {
|
|
configurable: false,
|
|
enumerable: true,
|
|
get: function() {
|
|
return _transport;
|
|
}
|
|
}
|
|
});
|
|
|
|
this.start = function() {
|
|
if (active || error instanceof Error || starting) {
|
|
return;
|
|
}
|
|
|
|
starting = true;
|
|
if (apiInitialized !== null) {
|
|
onAPIInitialized();
|
|
} else {
|
|
apiEvents.on('initialized', onAPIInitialized);
|
|
onStateChanged();
|
|
}
|
|
};
|
|
this.stop = function() {
|
|
apiEvents.off('initialized', onAPIInitialized);
|
|
active = false;
|
|
error = null;
|
|
starting = false;
|
|
onStateChanged();
|
|
_transport = null;
|
|
};
|
|
this.on = function(name, listener) {
|
|
events.on(name, listener);
|
|
};
|
|
this.off = function(name, listener) {
|
|
events.off(name, listener);
|
|
};
|
|
}
|
|
|
|
module.exports = Core;
|