diff --git a/package.json b/package.json index ac50963..f08f3fd 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "dependencies": { "express": "3.x", "slug": "~0.4.0", - "express-resource": "~1.0.0" + "express-resource": "~1.0.0", + "when": "~3.1.0" } } diff --git a/routes/mods.js b/routes/mods.js index 469b606..e8e9199 100644 --- a/routes/mods.js +++ b/routes/mods.js @@ -1,7 +1,47 @@ -var fs = require('fs'); +var fs = require('fs') +, path = require('path') +, when = require('when') +, nodefn = require('when/node/function'); var config = require('./../config'); +function walk (directory) { + createFile = function (file, stat) { + return { + type: "file", + name: file, + size: stat.size + }; + }; + + createFolder = function (folder) { + return { + type: "folder", + name: folder, + files: [] + }; + }; + + var results = []; + + return when.map(nodefn.call(fs.readdir, directory), function(file) { + var absolutePath = path.join(directory, file); + return nodefn.call(fs.stat, absolutePath).then(function(stat) { + if (stat.isFile()) { + return results.push(createFile(file, stat)); + } + + folder = createFolder(file); + return walk(absolutePath).then(function(filesInDir) { + folder.files = filesInDir; + results.push(folder); + }); + }); + }).then(function() { + return results; + }); +}; + exports.index = function(req, res){ fs.readdir(config.path, function (err, files) { if (err) { @@ -22,9 +62,14 @@ exports.create = function(req, res){ }; exports.show = function(req, res){ - res.send('show mod ' + req.params.mod); + walk(config.path + "/" + req.params.mod).then(function(files) { + res.json(files); + }).otherwise(function(error) { + console.error(error.stack || error); + res.send({success: false}); + }); }; exports.destroy = function(req, res){ res.send('destroy mod ' + req.params.mod); -}; \ No newline at end of file +};