lisa-box
Version:
Home automation system L.I.S.A.
62 lines • 2.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const common_1 = require("@fabrix/fabrix/dist/common");
class DeviceService extends common_1.FabrixService {
find(criteria, options = {}) {
const footprintService = this.app.services.FootprintService;
options.include = [{
model: this.app.orm.Plugin, as: 'plugin', where: {
activated: 1
}
}];
return footprintService.find('device', criteria, options)
.then(devices => this.aggregateDevicesData(devices));
}
findWithFavorites(userId, criteria, options) {
const favoritesService = this.app.services.FavoritesService;
return this.find(criteria, options).then(devices => favoritesService.populateFavorite(userId, devices));
}
aggregateDevicesData(devices) {
const pluginService = this.app.services.PluginService;
const fullData = [];
const devicesByPlugin = this._sortDevicesByPlugin(devices);
for (const pluginName in devicesByPlugin) {
for (const driverName in devicesByPlugin[pluginName]) {
if (process.env.DEMO_MODE) {
fullData.push(Promise.resolve(devicesByPlugin[pluginName][driverName]));
}
else {
fullData.push(pluginService.callOnPluginDriver('getDevicesData', pluginName, driverName, [devicesByPlugin[pluginName][driverName]])
.catch(e => e));
}
}
}
return Promise.all(fullData).then(devicesData => {
let devices = [];
for (const deviceData of devicesData) {
if (Array.isArray(deviceData)) {
devices = devices.concat(deviceData);
}
else {
this.log.error('Retrieving some device data failed', deviceData);
}
}
return devices;
});
}
_sortDevicesByPlugin(devices) {
const devicesByPlugin = {};
for (const device of devices) {
if (!devicesByPlugin[device.pluginName]) {
devicesByPlugin[device.pluginName] = {};
}
if (!devicesByPlugin[device.pluginName][device.driver]) {
devicesByPlugin[device.pluginName][device.driver] = [];
}
devicesByPlugin[device.pluginName][device.driver].push(device.toRawData());
}
return devicesByPlugin;
}
}
exports.DeviceService = DeviceService;
//# sourceMappingURL=DeviceService.js.map