diff --git a/data/default/bundle.json b/data/default/bundle.json index ce2f663..e17e13b 100644 --- a/data/default/bundle.json +++ b/data/default/bundle.json @@ -1,7 +1,7 @@ { - "bundleName": "default", + "displayName": "default nimi testi toimiiko 123", "background": "bg.jpg", - "duration": 40, + "duration": 0, "transition": "tiles3d", "useWebFonts": false, "displayTime": true, @@ -18,5 +18,6 @@ "fontSize": 32, "fontWeight": 900, "fontFamily": "Arial Black" - } + }, + "bundleName": "default" } \ No newline at end of file diff --git a/data/set1/bundle.json b/data/set1/bundle.json index 243d72f..49aa4b3 100644 --- a/data/set1/bundle.json +++ b/data/set1/bundle.json @@ -1,5 +1,5 @@ { - "bundleName": "set1", + "displayName": "set1", "background": "bg.jpg", "displayTime": true, "useWebFonts": false, diff --git a/modules/admin.js b/modules/admin.js index d690f7e..a271dda 100644 --- a/modules/admin.js +++ b/modules/admin.js @@ -380,10 +380,16 @@ class admin { } var duration = data.duration; - if (data.duration === "") { - data.duration = null; + if (data.duration == "") { + duration = null; } + var transition = data.transition; + if (data.transition == "") { + transition = null; + } + + try { fs.writeFileSync("./data/" + data.bundleName + "/render/" + filename + ".png", data.png.replace(/^data:image\/png;base64,/, ""), "base64"); fs.writeFileSync("./data/" + data.bundleName + "/slides/" + filename, JSON.stringify(data.json)); @@ -399,7 +405,7 @@ class admin { displayTime: data.displayTime, type: "slide", index: bundle.allSlides.length, - transition: data.transition, + transition: transition, }; let obj = bundle.findSlideByUuid(filename); @@ -409,7 +415,7 @@ class admin { obj.name = data.name; obj.duration = duration; obj.displayTime = data.displayTime; - obj.transition = data.transition; + obj.transition = transition; } bundle.save(); @@ -497,7 +503,7 @@ class admin { previewInstances.push({adminId: socket.id, preview: {}, currentView: {}}); let serverOptions = getView(displayId).serverOptions; - let bundleDirs = getDirectories("./data"); + let bundleDirs = self.bundleManager.getBundleInfos(); let meta = JSON.parse(fs.readFileSync("./data/meta.json").toString()); socket.emit("callback.dashboard.sync", { diff --git a/modules/bundle.js b/modules/bundle.js index af3cf7c..949e0ab 100644 --- a/modules/bundle.js +++ b/modules/bundle.js @@ -1,11 +1,15 @@ let cli = require("./cli.js"); let fs = require("fs"); +/** + * + */ class bundleClass { constructor(name, data, slides) { this.name = name; this.bundleData = data; + this.bundleData['bundleName']= this.name; this.allSlides = slides; this.enabledSlides = []; this.disabledSlides = []; @@ -13,6 +17,7 @@ class bundleClass { } getBundleData() { + this.bundleData['bundleName'] = this.name; // to ensure backwards compatibility return this.bundleData; } diff --git a/modules/bundleManager.js b/modules/bundleManager.js index 3e50024..aadb55b 100644 --- a/modules/bundleManager.js +++ b/modules/bundleManager.js @@ -31,7 +31,7 @@ class bundleManager { return this.bundles[name]; } else { try { - cli.info(name + " not in bundles, trygin to load from fs..."); + cli.info(name + " not in bundles, trying to load from fs..."); let data = getJson("./data/" + name + "/bundle.json"); let slides = getJson("./data/" + name + "/slides.json"); this.bundles[name] = new bundle(name, data, slides); @@ -43,6 +43,20 @@ class bundleManager { } } + /** + * + * @return {Array} + */ + getBundleInfos() { + let out = []; + for (let key in this.bundles) { + out.push({ + dir: key, + name: this.bundles[key].getBundleData().displayName + }); + } + return out; + } } function getDirectories(path) { diff --git a/modules/display.js b/modules/display.js index 76e745b..539e14d 100644 --- a/modules/display.js +++ b/modules/display.js @@ -111,7 +111,6 @@ class display { init(meta) { this.changeBundle(meta.bundle); - this.mainLoop(); } /** @@ -123,9 +122,12 @@ class display { let bundle = this.getBundle(); this.serverOptions.loopIndex = 0; this.serverOptions.currentFile = bundle.enabledSlides[0] || ""; - this.serverOptions.slideDuration = bundle.findSlideByUuid(bundle.enabledSlides[0]).duration || bundle.getBundleData().duration; + 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.mainLoop(); } getSlideData() { @@ -189,25 +191,30 @@ class display { this.serverOptions.displayTime = bundle.bundleData.displayTime; } - this.displayCurrentSlide(); - - - this.serverOptions.loopIndex += 1; - if (this.serverOptions.loop) { let that = this; // override slide timeout if set by slide var slideTimeout = this.serverOptions.slideDuration * 1000; - if (this.serverOptions.currentMeta.duration !== null) { + if (this.serverOptions.currentMeta.duration > 5) { slideTimeout = parseFloat(this.serverOptions.currentMeta.duration) * 1000; } - this.timeoutId.push( - setTimeout(function () { - that.mainLoop(); - }, slideTimeout)); + console.log(this.serverOptions.displayId + " timeout:" + slideTimeout); + + if (slideTimeout >= 5000) { + this.timeoutId.push( + setTimeout(function () { + that.mainLoop(); + }, slideTimeout)); + + } else { + this.serverOptions.loop = false; + } } + + this.displayCurrentSlide(); + this.serverOptions.loopIndex += 1; } overrideSlide(json, pngData, duration) { diff --git a/public/js/dashboard.js b/public/js/dashboard.js index db042df..88c6b36 100644 --- a/public/js/dashboard.js +++ b/public/js/dashboard.js @@ -30,17 +30,18 @@ socket.on("callback.dashboard.sync", function (data) { // update dropdown at menu with bundles var valueArray = []; for (var dir of bundleDirs) { - valueArray.push({name: dir, value: dir}); + valueArray.push({name: dir.name, value: dir.dir}); } $('#bundles') .dropdown({ direction: "upward", values: valueArray, - action: function (text, value) { + action: function (_label, _value) { $('#bundles') .dropdown("hide"); - emit("admin.setBundle", {bundle: value}); + + emit("admin.setBundle", {bundle: _value}); } }).dropdown("set selected", {bundle: serverOptions.currentBundle}); $('#currentBundle').text(serverOptions.currentBundle); @@ -101,14 +102,15 @@ socket.on("callback.dashboard.sync", function (data) { let output = ""; for (var i in data.bundleDirs) { let bundle = data.bundleDirs[i]; - output += '