refactor(commander) readDir

This commit is contained in:
coderaiser 2014-07-04 09:31:41 -04:00
parent f8a564f2c8
commit 0b1f69ba89

View file

@ -37,71 +37,48 @@
* @param pFiles
*/
function readDir(params, error, names) {
var n, stats, filesData, fill, fileParams,
var length = names.length,
funcs = {},
p = params,
dirPath = format.addSlashToEnd(p.path);
if (error)
Util.exec(p.callback, error);
else {
/* Получаем информацию о файлах */
n = names.length,
stats = {},
if (error) {
p.callback(error);
} else {
filesData = {
names : names,
stats : stats,
callback : p.callback,
path : p.path
},
fill = fillJSON.bind(null, filesData);
if (!n)
fillJSON(filesData);
if (!length)
funcs.exec = Util.exec.ret;
else
names.forEach(function(name) {
fileParams = {
callback : fill,
count : n,
name : name,
stats : stats,
};
var path = dirPath + name;
fs.lstat(dirPath + name, onStat.bind(null, fileParams));
funcs[name] = Util.exec.with(getStat, name, path);
});
Util.exec.parallel(funcs, function(error, files) {
fillJSON(dirPath, files || {}, p.callback);
});
}
}
/**
* async getting file states
* and putting it to stats object
*/
function onStat(params, error, stat) {
var n, keys, p = params;
if (!error)
p.stats[p.name] = stat;
else
p.stats[p.name] = {
function getStat(name, path, callback) {
fs.lstat(path, function(error, data) {
callback(null, data || {
'mode' : 0,
'size' : 0,
'isDirectory' : Util.retFalse
};
keys = Object.keys(p.stats);
n = keys.length;
if (p.count === n)
Util.exec(p.callback);
});
});
}
function parseStats(names, stats) {
function parseStats(stats) {
var files;
Util.checkArgs(arguments, ['names', 'stats']);
Util.checkArgs(arguments, ['stats']);
files = names.map(function(name) {
files = Object.keys(stats).map(function(name) {
var file, isDir, size, mode, modeStr,
stat = stats[name],
owner = stat.uid;
@ -132,9 +109,8 @@
*
* @param params - { files, stats, path }
*/
function fillJSON(params) {
var p = params,
files,
function fillJSON(path, stats, callback) {
var files,
json = {
path : '',
@ -143,12 +119,12 @@
Util.checkArgs(arguments, ['params']);
files = parseStats(p.names, p.stats);
files = parseStats(stats);
json.files = changeOrder(files);
json.path = format.addSlashToEnd(p.path);
json.path = format.addSlashToEnd(path);
changeUIDToName(json, function(error) {
p.callback(error, json);
callback(error, json);
});
}