cloudcmd/lib/server/files.js
2013-11-29 16:50:41 +00:00

104 lines
3.2 KiB
JavaScript

(function(object) {
'use strict';
if(!global.cloudcmd)
return console.log(
'# files.js' + '\n' +
'# -----------' + '\n' +
'# Module is part of Cloud Commander,' + '\n' +
'# used for reading a couple files.' + '\n' +
'# http://cloudcmd.io' + '\n');
var main = global.cloudcmd.main,
fs = main.fs,
path = main.path,
pipe = main.pipe,
CloudFunc = main.cloudfunc,
Util = main.util;
object.read = function(pFiles, pOptions, pCallBack) {
var lDone = [],
lFiles,
lErrors,
i, n,
lName,
lReadedFiles = {},
lDoneFunc = function (pParams) {
var msg, status, p, lName,
lRet = Util.checkObj(pParams, ['error', 'data', 'params']);
if (lRet) {
lDone.pop();
p = pParams,
lName = p.params;
if (p.error) {
status = 'error';
if (!lErrors)
lErrors = {};
lErrors[lName] = p.error;
}
else {
status = 'ok';
lReadedFiles[lName] = p.data;
}
lName = path.basename(lName);
msg = CloudFunc.formatMsg('read', lName, status);
Util.log(msg);
if (!lDone.length)
Util.exec(pCallBack, lErrors, lReadedFiles);
}
};
if (Util.isFunction(pOptions)) {
pCallBack = pOptions;
pOptions = null;
}
if (Util.isArray(pFiles))
lFiles = pFiles;
else
lFiles = [pFiles];
for(i = 0, n = lFiles.length; i < n; i++) {
lName = lFiles.pop();
lDone.push(lName);
fs.readFile(lName, pOptions, Util.call(lDoneFunc, lName));
}
};
object.readPipe = readPipe;
function readPipe(params) {
var name,
p = params,
length = p.names && p.names.length;
if (!length) {
p.write.end();
Util.exec(p.callback);
} else {
name = p.dir + p.names.pop();
pipe.create({
from : name,
write : p.write,
gzip : p.gzip,
notEnd : true,
callback: function(error) {
if (error)
Util.exec(p.callback, error);
else
readPipe(params);
}
});
}
}
})(this);