filefive
Version:
SFTP/FTP/Amazon S3 client and dual-panel file manager for macOS and Linux
68 lines (67 loc) • 3.3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = default_1;
const URI_1 = require("../utils/URI");
const types_1 = require("../types");
const Queue_1 = require("../queues/Queue");
const Session_1 = __importDefault(require("../Session"));
const Copy_1 = __importDefault(require("../queues/Copy"));
const Download_1 = __importDefault(require("../queues/Download"));
const Upload_1 = __importDefault(require("../queues/Upload"));
const uniqid_1 = __importDefault(require("../utils/uniqid"));
const App_1 = __importDefault(require("../App"));
const ramda_1 = require("ramda");
function default_1(src, dest, move, filter, root, sid, onComplete = () => { }) {
if (!src.length) {
return;
}
const { id: fromId } = (0, URI_1.parseURI)(src[0]);
const { id: toId, path: toPath } = (0, URI_1.parseURI)(dest);
const from = src.map((0, ramda_1.pipe)(URI_1.parseURI, (0, ramda_1.prop)('path')));
const id = (0, uniqid_1.default)();
let queueType;
let connection;
let queue;
const onConflict = (from, to) => {
if (sid) {
const action = Session_1.default.get(sid)?.action;
if (action) {
Queue_1.queues.get(id)?.resolve(action, true);
return;
}
}
App_1.default.onQueueUpdate(id, { type: types_1.QueueEventType.Ask, queueType, from, to, sid });
};
const onFinish = () => {
Queue_1.queues.delete(id);
App_1.default.onQueueUpdate(id, { type: types_1.QueueEventType.Complete });
onComplete();
};
if (fromId == toId) {
queueType = move ? types_1.QueueType.Move : types_1.QueueType.Copy;
connection = fromId;
queue = new Copy_1.default(connection, from, toPath, filter, root, state => App_1.default.onQueueUpdate(id, { type: types_1.QueueEventType.Update, state }), onConflict.bind(queue), error => {
App_1.default.onError({
type: types_1.FailureType.RemoteError,
id: fromId,
message: error.message ?? String(error)
});
}, onFinish, App_1.default.remoteWatcher, move);
}
else {
queueType = (0, URI_1.isLocal)(dest) ? types_1.QueueType.Download : types_1.QueueType.Upload;
connection = queueType == types_1.QueueType.Download ? fromId : toId;
queue = queueType == types_1.QueueType.Download ?
new Download_1.default(connection, from, toPath, filter, root, state => App_1.default.onQueueUpdate(id, { type: types_1.QueueEventType.Update, state }), onConflict.bind(queue), error => App_1.default.onError(error), onFinish) :
new Upload_1.default(connection, from, toPath, filter, root, state => App_1.default.onQueueUpdate(id, { type: types_1.QueueEventType.Update, state }), onConflict.bind(queue), error => App_1.default.onError(error), onFinish, App_1.default.remoteWatcher);
}
Queue_1.queues.set(id, queue);
setTimeout(() => {
App_1.default.onQueueUpdate(id, { type: types_1.QueueEventType.Create, queueType, connection });
queue.create();
}, 100);
return id;
}