diff options
Diffstat (limited to 'model_fs.js')
-rw-r--r-- | model_fs.js | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/model_fs.js b/model_fs.js new file mode 100644 index 0000000..6f68e02 --- /dev/null +++ b/model_fs.js @@ -0,0 +1,83 @@ +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]); + } + } +}; + + |