JD2022-TU1/main/extern/Hue/tools/simulator/server/entertainmentGroupsClient.js

93 lines
No EOL
2.3 KiB
JavaScript

function EntertainmentGroupsClient() {
var fs = require('fs');
const groupConfigFile = './config/groupConfig.json';
var groupConfig = getDefaultGroupConfig();
var that = this;
function getDefaultGroupConfig() {
return {
"1": {
name: "Livingroom",
type: "Entertainment",
class: "TV",
lights: [],
locationtype: "Grid16x16",
locations: {}
}
}
}
function loadGroupConfig() {
var success = false;
try {
var serialized = fs.readFileSync(groupConfigFile, 'utf8');
if (serialized) {
groupConfig = JSON.parse(serialized);
success = true;
}
}
catch (err) {
console.log(err);
}
return success;
}
function saveGroupConfig() {
fs.writeFileSync(groupConfigFile, JSON.stringify(groupConfig, null, 4), 'utf8');
}
function init() {
if (loadGroupConfig() == false) {
console.log("loading group config failed, initializing with empty one");
saveGroupConfig();
}
else {
console.log("group config loaded successfully");
}
}
function getFreeId() {
var sorted = groupConfig["1"].lights.sort(function(a, b){return a-b});
for (var i = 1; i < 63; i++) {
if (sorted[i] != i) {
return i;
}
}
return undefined;
}
that.addLight = function (x, y) {
var id = getFreeId();
if (id !== undefined) {
groupConfig["1"].lights.push(id);
groupConfig["1"].locations[String(id)] = [x, y];
saveGroupConfig();
}
return id;
};
that.deleteLight = function (id) {
var lightArray = groupConfig["1"].lights;
for (var i = lightArray.length - 1; i >= 0; i--) {
if (lightArray[i] === id) {
lightArray.splice(i, 1);
}
}
delete groupConfig["1"].locations[String(id)];
saveGroupConfig();
};
that.getConfig = function () {
return groupConfig;
};
init();
}
// export the class
module.exports = EntertainmentGroupsClient;