filemanager: recursive copy

This commit is contained in:
Johannes Zellner
2021-02-01 17:20:51 +01:00
parent 2935fa6a36
commit f47015223c
+55 -9
View File
@@ -360,6 +360,40 @@ app.controller('FileManagerController', ['$scope', '$translate', '$timeout', 'Cl
$scope.clipboardCut = false;
};
function collectFiles(entry, callback) {
if (entry.isDirectory) {
Client.filesGet($scope.id, $scope.type, entry.fullFilePath, 'data', function (error, result) {
if (error) return callback(error);
if (!result.entries) return callback(new Error('not a folder'));
// amend fullFilePath
result.entries.forEach(function (e) {
e.fullFilePath = sanitize(entry.fullFilePath + '/' + e.fileName);
});
console.log('=--=', result.entries)
var collectedFiles = [];
async.eachLimit(result.entries, 5, function (entry, callback) {
collectFiles(entry, function (error, result) {
if (error) return callback(error);
collectedFiles = collectedFiles.concat(result);
callback();
});
}, function (error) {
if (error) return callback(error);
callback(null, collectedFiles);
});
});
return;
}
callback(null, [ entry ]);
}
$scope.actionPaste = function (destinationEntry) {
if ($scope.clipboardCut) {
// move files
@@ -377,21 +411,33 @@ app.controller('FileManagerController', ['$scope', '$translate', '$timeout', 'Cl
$scope.refresh();
});
} else {
// TODO collect files recoursively if we have folders
// copy files
async.eachLimit($scope.clipboard, 5, function (entry, callback) {
var newFilePath = sanitize($scope.cwd + '/' + ((destinationEntry && destinationEntry.isDirectory) ? destinationEntry.fileName : '') + '/' + entry.fileName);
// TODO this will NOT overwrite files in destination!
Client.filesCopy($scope.id, $scope.type, entry.fullFilePath, newFilePath, callback);
// first collect all files recursively
var collectedFiles = [];
async.eachLimit($scope.clipboard, 5, function (entry, callback) {
collectFiles(entry, function (error, result) {
if (error) return callback(error);
collectedFiles = collectedFiles.concat(result);
callback();
});
}, function (error) {
if (error) return Client.error(error);
// clear clipboard
$scope.clipboard = [];
async.eachLimit(collectedFiles, 5, function (entry, callback) {
var newFilePath = sanitize($scope.cwd + '/' + ((destinationEntry && destinationEntry.isDirectory) ? destinationEntry.fileName : '') + '/' + entry.fullFilePath);
$scope.refresh();
// TODO this will NOT overwrite files in destination!
Client.filesCopy($scope.id, $scope.type, entry.fullFilePath, newFilePath, callback);
}, function (error) {
if (error) return Client.error(error);
// clear clipboard
$scope.clipboard = [];
});
});
}
};