whiteboard/scripts/s_whiteboard.js
2021-03-11 15:05:38 +01:00

132 lines
4.7 KiB
JavaScript

//This file is only for saving the whiteboard.
const fs = require("fs");
const config = require("./config/config");
var savedBoards = {};
var savedUndos = {};
var saveDelay = false;
if (config.backend.enableFileDatabase) {
//read saved boards from file
fs.readFile("savedBoards.json", (err, data) => {
if (err) {
return console.log(
"No persistend Whiteboard Datafile found... this is not a problem on the first start!"
);
}
savedBoards = JSON.parse(data);
});
}
module.exports = {
handleEventsAndData: function (content) {
var tool = content["t"]; //Tool witch is used
var wid = content["wid"]; //whiteboard ID
var username = content["username"];
if (tool === "clear") {
//Clear the whiteboard
delete savedBoards[wid];
delete savedUndos[wid];
} else if (tool === "undo") {
//Undo an action
if (!savedUndos[wid]) {
savedUndos[wid] = [];
}
if (savedBoards[wid]) {
for (var i = savedBoards[wid].length - 1; i >= 0; i--) {
if (savedBoards[wid][i]["username"] == username) {
var drawId = savedBoards[wid][i]["drawId"];
for (var i = savedBoards[wid].length - 1; i >= 0; i--) {
if (
savedBoards[wid][i]["drawId"] == drawId &&
savedBoards[wid][i]["username"] == username
) {
savedUndos[wid].push(savedBoards[wid][i]);
savedBoards[wid].splice(i, 1);
}
}
break;
}
}
if (savedUndos[wid].length > 1000) {
savedUndos[wid].splice(0, savedUndos[wid].length - 1000);
}
}
} else if (tool === "redo") {
if (!savedUndos[wid]) {
savedUndos[wid] = [];
}
if (!savedBoards[wid]) {
savedBoards[wid] = [];
}
for (var i = savedUndos[wid].length - 1; i >= 0; i--) {
if (savedUndos[wid][i]["username"] == username) {
var drawId = savedUndos[wid][i]["drawId"];
for (var i = savedUndos[wid].length - 1; i >= 0; i--) {
if (
savedUndos[wid][i]["drawId"] == drawId &&
savedUndos[wid][i]["username"] == username
) {
savedBoards[wid].push(savedUndos[wid][i]);
savedUndos[wid].splice(i, 1);
}
}
break;
}
}
} else if (
[
"line",
"pen",
"rect",
"circle",
"eraser",
"addImgBG",
"recSelect",
"eraseRec",
"addTextBox",
"setTextboxText",
"removeTextbox",
"setTextboxPosition",
"setTextboxFontSize",
"setTextboxFontColor",
].includes(tool)
) {
//Save all this actions
savedBoards[wid] = savedBoards[wid] ? savedBoards[wid] : [];
delete content["wid"]; //Delete id from content so we don't store it twice
if (tool === "setTextboxText") {
for (var i = savedBoards[wid].length - 1; i >= 0; i--) {
//Remove old textbox tex -> dont store it twice
if (
savedBoards[wid][i]["t"] === "setTextboxText" &&
savedBoards[wid][i]["d"][0] === content["d"][0]
) {
savedBoards[wid].splice(i, 1);
}
}
}
savedBoards[wid].push(content);
}
if (config.backend.enableFileDatabase) {
//Save whiteboard to file
if (!saveDelay) {
saveDelay = true;
setTimeout(function () {
saveDelay = false;
fs.writeFile("savedBoards.json", JSON.stringify(savedBoards), (err) => {
if (err) {
return console.log(err);
}
});
}, 1000 * 10); //Save after 10 sec
}
}
},
loadStoredData: function (wid) {
//Load saved whiteboard
return savedBoards[wid] ? savedBoards[wid] : [];
},
};