diff options
Diffstat (limited to 'model_fs.js')
-rw-r--r-- | model_fs.js | 121 |
1 files changed, 75 insertions, 46 deletions
diff --git a/model_fs.js b/model_fs.js index 6f68e02..c8d04e2 100644 --- a/model_fs.js +++ b/model_fs.js @@ -1,83 +1,112 @@ var walk = require('walk'); var fs = require('fs'); var path = require('path'); +var walker; +var watcher; 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) { + watcher = require('watch-tree').watchTree(configuration.dir, {'sample-rate': 5}); + watcher.on('fileDeleted', exports.rebuildFiles); + watcher.on('fileCreated', exports.rebuildFiles); + watcher.on('fileModified', exports.rebuildFiles); + exports.rebuildFiles(); + +}; + +exports.rebuildFiles = function() { + + 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: [] }; + configuration.template) , slides: []}; }); } next(); -}).on("file", function (root, fileStats, next) { - - if(fileStats.name == configuration.description) { + }).on("file", function(root, fileStats, next) { + if(fileStats.name == configuration.description || fileStats.name == configuration.events) { 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; + } + 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); + 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: ''}); } - 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("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]; + }).on("end", function() { + for(var slideset in files) { + if(!files.hasOwnProperty(slideset)) { continue; } + try { + var data = fs.readFileSync(path.join(__dirname, configuration.dir, slideset, configuration.description)); + } catch(e) { + console.log(e.toString()); + } + var descs = JSON.parse(data.toString()); + 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 comp = files[slideset]['slides'][file]['file'].split('/'); + if(descs[desc]['file'] == comp[comp.length - 1]) { + files[slideset]['slides'][file]['head'] = descs[desc]['head']; + files[slideset]['slides'][file]['text'] = descs[desc]['text']; + } } } + try { + data = fs.readFileSync(path.join(__dirname, configuration.dir, 'default', configuration.events)); + } catch(e) { + console.log(e.toString()); + } + files[slideset]['events'] = JSON.parse(data.toString()); } - } -}); + }); }; + exports.getSlides = function(slideset, cb) { for (var searchset in files) { if(!files.hasOwnProperty(searchset)) { continue; } if(files[searchset].name == slideset) { - cb(files[searchset]); + cb(null, files[searchset]); } } }; +exports.getAllSlides = function(cb) { + var slidesets = []; + for(var slideset in files) { + if(!files.hasOwnProperty(slideset)) { continue; } + slidesets.push(files[slideset].name); + } + cb(slidesets); +}; |