diff --git a/src/js/filemanager.js b/src/js/filemanager.js index 9ef6b8930..ff66f8c6e 100644 --- a/src/js/filemanager.js +++ b/src/js/filemanager.js @@ -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 = []; + }); }); } };