var walk = require('walk'); var fs = require('fs'); var path = require('path'); var configuration; var files = []; exports.start = function(config) { configuration = config; var walker = walk.walk(configuration.dir, { followLinks: false }); walker.on("directories", function (root, dirAr, next) { var lastDir = path.join(__dirname, root).split('/'); if((lastDir.length - __dirname.split('/').length) < 2) { dirAr.forEach(function(dir) { files[dir.name] = { name: dir.name, template: path.join(configuration.defaultSlides, configuration.template) , slides: [] }; }); } next(); }).on("file", function (root, fileStats, next) { if(fileStats.name == configuration.description) { next(); } else if(fileStats.name == configuration.template) { var lastDir = root.split('/'); files[lastDir[lastDir.length - 1]]['template'] = path.join(lastDir[lastDir.length - 1], fileStats.name); next(); } else { var lastDir = path.join(root).split('/'); if(files.hasOwnProperty(lastDir[lastDir.length - 1])) { var ext = path.extname(fileStats.name); var type = 'image'; switch (ext) { case '.mp4': case '.avi': case '.ogv': case '.mkv': type = 'video'; break; } files[lastDir[lastDir.length - 1]]['slides'].push({ type: type, file: path.join(lastDir[lastDir.length - 1], fileStats.name), head: '', text: ''}); } next(); } }).on("errors", function (root, nodeStatsArray, next) { next(); }).on("end", function () { for(var slideset in files) { if(!files.hasOwnProperty(slideset)) { continue; } var data = fs.readFileSync(__dirname+'/'+configuration.dir+'/'+slideset+'/desc'); var descs = data.toString().split('\n'); for(var file in files[slideset]['slides']) { if(!files[slideset]['slides'].hasOwnProperty(file)) { continue; } if(!files[slideset]['slides'][file].hasOwnProperty('file')) { continue; } for(var desc in descs) { if(!descs.hasOwnProperty(desc)) { continue; } var info = descs[desc].split('|'); var comp = files[slideset]['slides'][file]['file'].split('/'); if(info[0] === comp[comp.length - 1]) { files[slideset]['slides'][file]['head'] = info[1]; files[slideset]['slides'][file]['text'] = info[2]; } } } } }); }; exports.getSlides = function(slideset, cb) { for (var searchset in files) { if(!files.hasOwnProperty(searchset)) { continue; } if(files[searchset].name == slideset) { cb(files[searchset]); } } };