diff --git a/modules/admin.js b/modules/admin.js index 57aa0f6..b80020b 100644 --- a/modules/admin.js +++ b/modules/admin.js @@ -57,6 +57,7 @@ export default class admin { io.emit("callback.dashboard.updateBundles", { "bundleDirs": bundleManager.getBundleInfos() }); + self.syncDashboard(io); }); io.on("connection", function (socket) { @@ -99,8 +100,10 @@ export default class admin { socket.on('controls.time.toggle', function () { let view = self.getView(); let bool = !view.serverOptions.displayTime; - - view.getBundle().bundleData.displayTime = bool; + let bundle = view.getBundle(); + if (bundle) { + bundle.bundleData.displayTime = bool; + } view.serverOptions.displayTime = bool; view.io.emit("callback.time", bool); @@ -156,15 +159,15 @@ export default class admin { let bundle = self.bundleManager.getBundle(data.bundle); let json = "{}"; if (data.fileName) { - json = bundle.getSlideJsonFile(data.fileName); + json = bundle?.getSlideJsonFile(data.fileName); } try { self.getPreview(socket).preview.emit("callback.preview", { - bundleData: bundle.getBundleData(), + bundleData: bundle?.getBundleData(), json: json, - slide: bundle.findSlideByUuid(data.fileName), + slide: bundle?.findSlideByUuid(data.fileName), displayId: data.displayId } ); @@ -176,24 +179,28 @@ export default class admin { socket.on("controls.skipTo", function (data) { let bundleSettings = self.screenView.getBundle(); - let slides = bundleSettings.enabledSlides; + if (bundleSettings) { + let slides = bundleSettings.enabledSlides; - let idx = slides.indexOf(data.fileName); - if (idx >= 0) { - self.getServerOptions().loopIndex = idx; + let idx = slides.indexOf(data.fileName); + if (idx >= 0) { + self.getServerOptions().loopIndex = idx; + } + self.screenView.mainLoop(); } - self.screenView.mainLoop(); }); socket.on('controls.toggle', function (data) { let fileName = data.fileName; let bundleSettings = self.screenView.getBundle(); - let idx = bundleSettings.disabledSlides.indexOf(fileName); + if (bundleSettings) { + let idx = bundleSettings.disabledSlides.indexOf(fileName); - if (idx > -1) { - bundleSettings.setSlideStatus(fileName, true); - } else { - bundleSettings.setSlideStatus(fileName, false); + if (idx > -1) { + bundleSettings.setSlideStatus(fileName, true); + } else { + bundleSettings.setSlideStatus(fileName, false); + } } self.updateDashboard(socket); bundleSettings = null; @@ -265,7 +272,7 @@ export default class admin { socket.on('admin.removeSlide', function (data) { try { let bundle = bundleManager.getBundle(data.bundleName); - bundle.removeUuid(data.uuid); + bundle?.removeUuid(data.uuid); self.updateSlides(); self.announce(null, "callback.removeSlide", data); } catch (err) { @@ -307,13 +314,15 @@ export default class admin { /** edit web links **/ socket.on('admin.editLink', function (data) { - let bundle = self.bundleManager.getBundle(data.bundleName); - let bundleData = bundle.getBundleData(); - let json = "{}"; - if (data.fileName) { - json = bundle.findSlideByUuid(data.fileName); + let bundle = self?.bundleManager?.getBundle(data.bundleName); + if (bundle) { + let bundleData = bundle.getBundleData(); + let json = "{}"; + if (data.fileName) { + json = bundle.findSlideByUuid(data.fileName); + } + socket.emit("callback.webpage", {bundleData: bundleData, json: json}); } - socket.emit("callback.webpage", {bundleData: bundleData, json: json}); }); @@ -330,7 +339,9 @@ export default class admin { try { let bundle = self.bundleManager.getBundle(data.bundleName); - + if (!bundle) { + throw "no active bundle"; + } let template = { uuid: filename, name: data.name, @@ -376,12 +387,14 @@ export default class admin { socket.on('admin.editVideo', function (data) { let bundle = self.bundleManager.getBundle(data.bundleName); - let bundleData = bundle.getBundleData(); - let json = "{}"; - if (data.fileName) { - json = bundle.findSlideByUuid(data.fileName); + if (bundle) { + let bundleData = bundle.getBundleData(); + let json = "{}"; + if (data.fileName) { + json = bundle.findSlideByUuid(data.fileName); + } + socket.emit("callback.video", {bundleData: bundleData, json: json}); } - socket.emit("callback.video", {bundleData: bundleData, json: json}); }); @@ -399,7 +412,9 @@ export default class admin { try { let bundle = self.bundleManager.getBundle(data.bundleName); - + if (!bundle) { + throw "no active bundle"; + } let template = { uuid: filename, name: data.name, @@ -446,25 +461,30 @@ export default class admin { /** edit **/ socket.on('admin.editSlide', function (data) { - let bundle = self.bundleManager.getBundle(data.bundleName); - let bundleData = bundle.getBundleData(); - let templateData = {}; - let json = "{}"; - if (fs.existsSync("./data/template.json")) { - templateData = JSON.parse(fs.readFileSync("./data/template.json").toString()); + let bundle = self?.bundleManager?.getBundle(data.bundleName); + if (bundle) { + let bundleData = bundle.getBundleData(); + let templateData = {}; + let json = "{}"; + if (fs.existsSync("./data/template.json")) { + templateData = JSON.parse(fs.readFileSync("./data/template.json").toString()); + } + let slide = { displayTime: null }; + if (data.fileName) { + json = bundle.getSlideJsonFile(data.fileName); + slide = bundle.findSlideByUuid(data.fileName); + } + socket.emit("callback.edit", {bundleData: bundleData, slideData: slide, json: json, templates: templateData, guardRails: config.guardRails}); } - let slide = { displayTime: null }; - if (data.fileName) { - json = bundle.getSlideJsonFile(data.fileName); - slide = bundle.findSlideByUuid(data.fileName); - } - socket.emit("callback.edit", {bundleData: bundleData, slideData: slide, json: json, templates: templateData, guardRails: config.guardRails}); }); /** rename **/ socket.on('admin.renameSlide', function (data) { try { let bundle = bundleManager.getBundle(data.bundleName); + if (!bundle) { + throw "no active bundle"; + } bundle.setName(data.uuid, data.name); self.updateSlides(); } catch (err) { @@ -533,11 +553,13 @@ export default class admin { try { + let bundle = self.bundleManager.getBundle(data.bundleName); + if (!bundle) { + throw "no active bundle"; + } fs.writeFileSync("./data/bundles/" + data.bundleName + "/render/" + filename + ".png", data.png.replace(/^data:image\/png;base64,/, ""), "base64"); fs.writeFileSync("./data/bundles/" + data.bundleName + "/slides/" + filename, JSON.stringify(data.json)); - let bundle = self.bundleManager.getBundle(data.bundleName); - let template = { uuid: filename, @@ -625,7 +647,7 @@ export default class admin { socket.emit("callback.dashboard.update", { bundleSettings: bundleSettings, - allSlides: bundleSettings.allSlides, + allSlides: bundleSettings?.allSlides, serverOptions: this.screenView.serverOptions, displayId: this.displayId }); diff --git a/modules/bundleManager.js b/modules/bundleManager.js index 34d717f..eb0644b 100644 --- a/modules/bundleManager.js +++ b/modules/bundleManager.js @@ -50,10 +50,11 @@ export default class bundleManager { } moveSlide(fromBundle, toBundle, uuid, position) { - let slideData = this.getBundle(fromBundle).moveTo(toBundle, uuid); + let fromBundleObj = this.getBundle(fromBundle); + let slideData = fromBundleObj?.moveTo(toBundle, uuid); let bundle = this.getBundle(toBundle); - slideData.index = position; - if (slideData) { + if (slideData && bundle) { + slideData.index = position; bundle.allSlides.push(slideData); bundle.save(); } @@ -64,10 +65,10 @@ export default class bundleManager { let bundle = this.getBundle(bundleName); let i = 0; for (let uuid of sortedIDs) { - bundle.setIndex(uuid, i); + bundle?.setIndex(uuid, i); i += 1; } - bundle.save(); + bundle?.save(); } /** diff --git a/modules/display.js b/modules/display.js index 57c1ba3..8ec5ffd 100644 --- a/modules/display.js +++ b/modules/display.js @@ -78,7 +78,7 @@ export default class display { dispatcher.on("display.recalcBundleData", function (bundleName) { if (self.serverOptions.currentBundle === bundleName) { - for (let slide of self.getBundle().allSlides) { + for (let slide of self.getBundle()?.allSlides) { // calculate new index for next slide; if (slide.uuid === self.serverOptions.currentFile) { self.serverOptions.loopIndex = slide.index + 1; @@ -143,21 +143,23 @@ export default class display { changeBundle(bundleName) { this.serverOptions.currentBundle = bundleName; let bundle = this.getBundle(); - this.serverOptions.loopIndex = 0; - this.serverOptions.currentFile = bundle.enabledSlides[0] || ""; - this.serverOptions.currentMeta = bundle.findSlideByUuid(bundle.enabledSlides[0]); - this.serverOptions.slideDuration = bundle.getBundleData().duration; - this.serverOptions.currentId = bundle.enabledSlides.indexOf(this.serverOptions.currentFile); - this.serverOptions.transition = bundle.getBundleData().transition; - this.serverOptions.loop = true; - this.io.emit("callback.load", this.getSlideData()); + if (bundle) { + this.serverOptions.loopIndex = 0; + this.serverOptions.currentFile = bundle.enabledSlides[0] || ""; + this.serverOptions.currentMeta = bundle.findSlideByUuid(bundle.enabledSlides[0]); + this.serverOptions.slideDuration = bundle.getBundleData().duration; + this.serverOptions.currentId = bundle.enabledSlides.indexOf(this.serverOptions.currentFile); + this.serverOptions.transition = bundle.getBundleData().transition; + this.serverOptions.loop = true; + this.io.emit("callback.load", this.getSlideData()); + } bundle = null; this.mainLoop(); } getSlideData() { let bundle = this.getBundle(); - return { bundleData: bundle.getBundleData(), slides: bundle.allSlides, serverOptions: this.serverOptions }; + return { bundleData: bundle?.getBundleData(), slides: bundle?.allSlides, serverOptions: this.serverOptions }; } /** @@ -171,7 +173,7 @@ export default class display { * @return {bundle} */ getBundle() { - return this.bundleManager.getBundle(this.serverOptions.currentBundle); + return this.bundleManager?.getBundle(this.serverOptions.currentBundle); } toggleBlackout() { @@ -205,6 +207,9 @@ export default class display { this.serverOptions.announceMeta = {}; let bundle = this.getBundle(); + if (!bundle) { + return + } let slides = bundle.getEnabledSlides(); if (slides.length >= 0) {