"use strict"; const bundle = require(`./bundle.js`); let fs = require("fs"); let cli = require(`./cli.js`); /** * @module infoscreen3/bundleManager */ class bundleManager { constructor() { this.syncBundles(); } /** * Sync bundles... */ syncBundles() { this.bundles = {}; let dirs = getDirectories("./data/bundles/"); dirs.sort(); for (let name of dirs) { let data = getJson("./data/bundles/" + name + "/bundle.json"); let slides = getJson("./data/bundles/" + name + "/slides.json"); this.bundles[name] = new bundle(name, data, slides); } } /** * get bundle * @param {string} name * @returns {bundle} */ getBundle(name) { if (this.bundles.hasOwnProperty(name)) { return this.bundles[name]; } else { try { cli.info(name + " not in bundles, trying to load from fs..."); let data = getJson("./data/bundles/" + name + "/bundle.json"); let slides = getJson("./data/bundles/" + name + "/slides.json"); this.bundles[name] = new bundle(name, data, slides); cli.success(name + " load"); return this.bundles[name]; } catch (err) { cli.error("bundle by name " + name + " not found on filesystem", err); } } } /** * * @return {Array} */ getBundleInfos() { let out = []; for (let key in this.bundles) { out.push({ dir: key, name: this.bundles[key].getBundleData().displayName }); } return out; } } /** * helper function to returns all directories for path * @param path * @return {string[]} */ function getDirectories(path) { return fs.readdirSync(path).filter(function (file) { return fs.statSync(path + '/' + file).isDirectory(); }); } /** * helper function to load and parse json to array * @param file * @return {object} */ function getJson(file) { return JSON.parse(fs.readFileSync(file).toString()); } /** * @type {bundleManager} */ module.exports = bundleManager;