mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-07-18 00:47:01 +00:00
refactor(commander) readDir
This commit is contained in:
parent
f8a564f2c8
commit
0b1f69ba89
1 changed files with 28 additions and 52 deletions
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue