196 lines
8.9 KiB
JavaScript
196 lines
8.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var Workflow_1 = require("../../../helper/Workflow");
|
|
var Errors_1 = require("../../../Errors");
|
|
var mimeTypes = require("mime-types");
|
|
var StandardMethods = /** @class */ (function () {
|
|
function StandardMethods() {
|
|
}
|
|
StandardMethods.standardMove = function (ctx, subPathFrom, fsFrom, subPathTo, fsTo, _overwrite, _callback) {
|
|
var callback = _callback ? _callback : _overwrite;
|
|
var overwrite = _callback ? _overwrite : false;
|
|
var go = function (fullPathFrom) {
|
|
StandardMethods.standardCopy(ctx, subPathFrom, fsFrom, subPathTo, fsTo, overwrite, -1, function (e, overwritten) {
|
|
if (e)
|
|
return callback(e, overwritten);
|
|
if (fullPathFrom) { // subPathFrom.isRoot() === true
|
|
ctx.server.removeFileSystem(fullPathFrom, function (nb) {
|
|
callback(null, overwritten);
|
|
});
|
|
return;
|
|
}
|
|
fsFrom.delete(ctx, subPathFrom, -1, function (e) { return callback(e, overwritten); });
|
|
});
|
|
};
|
|
if (subPathFrom.isRoot()) {
|
|
fsFrom.getFullPath(ctx, function (e, fullPathFrom) {
|
|
go(fullPathFrom);
|
|
});
|
|
}
|
|
else
|
|
go();
|
|
};
|
|
StandardMethods.standardCopy = function (ctx, subPathFrom, fsFrom, subPathTo, fsTo, _overwrite, _depth, _callback) {
|
|
var overwrite = _overwrite.constructor === Boolean ? _overwrite : false;
|
|
var depth = _callback ? _depth : (!_depth ? -1 : (_overwrite.constructor === Number ? _overwrite : -1));
|
|
var callback = _callback ? _callback : (_depth ? _depth : _overwrite);
|
|
if (subPathFrom.isRoot()) {
|
|
fsTo.getFullPath(ctx, subPathTo, function (e, fullPathTo) {
|
|
if (e)
|
|
return callback(e);
|
|
var overwritten = false;
|
|
ctx.server.getResource(ctx, fullPathTo, function (e, r) {
|
|
if (e)
|
|
return callback(e);
|
|
r.type(function (e, type) {
|
|
if (!e)
|
|
overwritten = true;
|
|
ctx.server.setFileSystem(fullPathTo, fsFrom, function (success) {
|
|
callback(null, overwritten);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
return;
|
|
}
|
|
var go = function () {
|
|
var copyProperties = function (callback) {
|
|
fsFrom.propertyManager(ctx, subPathFrom, function (e, pmFrom) {
|
|
if (e)
|
|
return callback(e);
|
|
fsTo.propertyManager(ctx, subPathTo, function (e, pmTo) {
|
|
if (e)
|
|
return callback(e);
|
|
pmFrom.getProperties(function (e, props) {
|
|
if (e)
|
|
return callback(e);
|
|
new Workflow_1.Workflow()
|
|
.each(Object.keys(props), function (name, cb) {
|
|
var prop = props[name];
|
|
pmTo.setProperty(name, prop.value, prop.attributes, cb);
|
|
})
|
|
.error(callback)
|
|
.done(function (_) { return callback(); });
|
|
});
|
|
});
|
|
});
|
|
};
|
|
var reverse1 = function (e) {
|
|
fsTo.delete(ctx, subPathTo, function () { return callback(e); });
|
|
};
|
|
var copyContent = function (callback) {
|
|
fsFrom.size(ctx, subPathFrom, true, function (e, size) {
|
|
fsFrom.openReadStream(ctx, subPathFrom, true, function (e, rStream) {
|
|
if (e)
|
|
return reverse1(e);
|
|
fsTo.openWriteStream(ctx, subPathTo, true, size, function (e, wStream) {
|
|
if (e)
|
|
return reverse1(e);
|
|
var _callback = function (e) {
|
|
_callback = function () { };
|
|
callback(e);
|
|
};
|
|
rStream.pipe(wStream);
|
|
rStream.on('error', _callback);
|
|
wStream.on('error', _callback);
|
|
wStream.on('finish', function () {
|
|
_callback(null);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
};
|
|
var copyChildren = function (callback) {
|
|
fsFrom.readDir(ctx, subPathFrom, false, function (e, files) {
|
|
if (e)
|
|
return callback(e);
|
|
var subDepth = depth === -1 ? -1 : Math.max(0, depth - 1);
|
|
new Workflow_1.Workflow()
|
|
.each(files, function (file, cb) { return StandardMethods.standardCopy(ctx, subPathFrom.getChildPath(file), fsFrom, subPathTo.getChildPath(file), fsTo, overwrite, subDepth, cb); })
|
|
.error(callback)
|
|
.done(function (_) { return callback(); });
|
|
});
|
|
};
|
|
fsFrom.type(ctx, subPathFrom, function (e, type) {
|
|
if (e)
|
|
return callback(e);
|
|
var overwritten = false;
|
|
var startCopy = function () {
|
|
var fns = [copyProperties];
|
|
if (type.isDirectory && depth !== 0)
|
|
fns.push(copyChildren);
|
|
if (type.isFile)
|
|
fns.push(copyContent);
|
|
new Workflow_1.Workflow()
|
|
.each(fns, function (fn, cb) { return fn(cb); })
|
|
.error(function (e) { return callback(e, overwritten); })
|
|
.done(function () { return callback(null, overwritten); });
|
|
};
|
|
fsTo.create(ctx, subPathTo, type, function (e) {
|
|
if (e === Errors_1.Errors.ResourceAlreadyExists && overwrite) {
|
|
fsTo.delete(ctx, subPathTo, -1, function (e) {
|
|
if (e)
|
|
return callback(e);
|
|
overwritten = true;
|
|
fsTo.create(ctx, subPathTo, type, function (e) {
|
|
if (e)
|
|
return callback(e);
|
|
startCopy();
|
|
});
|
|
});
|
|
return;
|
|
}
|
|
else if (e)
|
|
return callback(e);
|
|
startCopy();
|
|
});
|
|
});
|
|
};
|
|
fsFrom.fastExistCheckEx(ctx, subPathFrom, callback, function () {
|
|
if (!overwrite)
|
|
fsTo.fastExistCheckExReverse(ctx, subPathTo, callback, go);
|
|
else
|
|
go();
|
|
});
|
|
};
|
|
StandardMethods.standardMimeType = function (ctx, fs, path, targetSource, _defaultMimeType, _useWebName, _callback) {
|
|
var callback;
|
|
var useWebName = false;
|
|
var defaultMimeType = 'application/octet-stream';
|
|
if (_defaultMimeType.constructor === Function) {
|
|
callback = _defaultMimeType;
|
|
}
|
|
else if (_defaultMimeType.constructor === Boolean) {
|
|
callback = _useWebName;
|
|
if (_defaultMimeType !== undefined && _defaultMimeType !== null)
|
|
useWebName = _defaultMimeType;
|
|
}
|
|
else {
|
|
callback = _callback;
|
|
if (_useWebName !== undefined && _useWebName !== null)
|
|
useWebName = _useWebName;
|
|
if (_defaultMimeType !== undefined && _defaultMimeType !== null)
|
|
defaultMimeType = _defaultMimeType;
|
|
}
|
|
fs.type(ctx, path, function (e, type) {
|
|
if (e)
|
|
return callback(e, null);
|
|
if (type.isFile) {
|
|
var fn = useWebName ? fs.webName : fs.displayName;
|
|
fn.bind(fs)(ctx, path, function (e, name) {
|
|
if (e)
|
|
callback(e, null);
|
|
else {
|
|
var mt = mimeTypes.contentType(name);
|
|
callback(null, mt ? mt : defaultMimeType);
|
|
}
|
|
});
|
|
}
|
|
else
|
|
callback(Errors_1.Errors.NoMimeTypeForAFolder, null);
|
|
});
|
|
};
|
|
return StandardMethods;
|
|
}());
|
|
exports.StandardMethods = StandardMethods;
|