cloudcmd/lib/server/rest/fs/delete.js

71 lines
1.9 KiB
JavaScript

(function(){
'use strict';
var main = global.cloudcmd.main,
fs = require('fs'),
dir = main.dir,
Util = main.util,
rimraf = main.require('rimraf'),
fse = {
delete : rimraf || fs.rmdir,
};
exports.onDelete = onDelete;
function onDelete(name, files, query, callback) {
var func = Util.retExec(callback),
fileNames = Util.slice(files),
rmFile = fs.unlink,
rmDir = fse.delete;
switch(query) {
default:
rmFile(name, func);
break;
case 'dir':
rmDir(name, func);
break;
case 'files':
deleteFiles(name, fileNames, func);
break;
}
}
function deleteFiles(from, names, callback) {
var name,
rmFile = fs.unlink,
rmDir = fse.delete,
isLast = true;
isLast = !names.length;
name = names.shift();
if (isLast)
callback(null);
else
Util.ifExec(rimraf, function(result, func) {
(func || rimraf)(from + name, function(error) {
if (error)
callback(error);
else
deleteFiles(from, names, callback);
});
}, function(func) {
dir.isDir(name, function(error, isDir) {
var funcRm;
if (error)
callback(error);
else if (isDir)
funcRm = rmDir;
else
funcRm = rmFile;
func(null, funcRm);
});
});
}
})();