diff --git a/src/filemanager.html b/src/filemanager.html index 5c049ebc4..e8618117c 100644 --- a/src/filemanager.html +++ b/src/filemanager.html @@ -211,7 +211,8 @@ diff --git a/src/js/client.js b/src/js/client.js index e5a18d88f..9cee23a57 100644 --- a/src/js/client.js +++ b/src/js/client.js @@ -2630,10 +2630,12 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout }); }; - Client.prototype.filesUpload = function (appId, path, file, progressHandler, callback) { + Client.prototype.filesUpload = function (appId, path, file, overwrite, progressHandler, callback) { var fd = new FormData(); fd.append('file', file); + if (overwrite) fd.append('overwrite', 'true'); + function done(error, data, status) { if (error) return callback(error); if (status !== 200) return callback(new ClientError(status, data)); diff --git a/src/js/filemanager.js b/src/js/filemanager.js index 26415f7c9..ae30723ee 100644 --- a/src/js/filemanager.js +++ b/src/js/filemanager.js @@ -216,9 +216,9 @@ app.controller('FileManagerController', ['$scope', '$timeout', 'Client', functio var folderItem; try { folderItem = event.originalEvent.dataTransfer.items[0].webkitGetAsEntry(); - if (folderItem.isFile) return uploadFiles(event.originalEvent.dataTransfer.files, targetFolder); + if (folderItem.isFile) return uploadFiles(event.originalEvent.dataTransfer.files, targetFolder, false); } catch (e) { - return uploadFiles(event.originalEvent.dataTransfer.files, targetFolder); + return uploadFiles(event.originalEvent.dataTransfer.files, targetFolder, false); } // if we got here we have a folder drop and a modern browser @@ -252,7 +252,7 @@ app.controller('FileManagerController', ['$scope', '$timeout', 'Client', functio if (error) return console.error(error); - uploadFiles(fileList, targetFolder); + uploadFiles(fileList, targetFolder, false); }); }; @@ -332,13 +332,16 @@ app.controller('FileManagerController', ['$scope', '$timeout', 'Client', functio countDone: 0, size: 0, done: 0, - percentDone: 0 + percentDone: 0, + files: [], + targetFolder: '' }; - function uploadFiles(files, targetFolder) { + function uploadFiles(files, targetFolder, overwrite) { if (!files || !files.length) return; targetFolder = targetFolder || ''; + overwrite = !!overwrite; // prevent it from getting closed $('#uploadModal').modal({ @@ -346,6 +349,8 @@ app.controller('FileManagerController', ['$scope', '$timeout', 'Client', functio keyboard: false }); + $scope.uploadStatus.files = files; + $scope.uploadStatus.targetFolder = targetFolder; $scope.uploadStatus.error = null; $scope.uploadStatus.busy = true; $scope.uploadStatus.count = files.length; @@ -363,7 +368,7 @@ app.controller('FileManagerController', ['$scope', '$timeout', 'Client', functio $scope.uploadStatus.fileName = file.name; - Client.filesUpload($scope.appId, filePath, file, function (loaded) { + Client.filesUpload($scope.appId, filePath, file, overwrite, function (loaded) { $scope.uploadStatus.percentDone = ($scope.uploadStatus.done+loaded) * 100 / $scope.uploadStatus.size; }, function (error) { if (error) return callback(error); @@ -377,9 +382,12 @@ app.controller('FileManagerController', ['$scope', '$timeout', 'Client', functio }, function (error) { $scope.uploadStatus.busy = false; - if (error) { + if (error && error.statusCode === 409) { + $scope.uploadStatus.error = 'exists'; + return; + } else if (error) { console.error(error); - $scope.uploadStatus.error = 'Failed to upload one or more files. Please try again.'; + $scope.uploadStatus.error = 'generic'; return; } @@ -390,17 +398,23 @@ app.controller('FileManagerController', ['$scope', '$timeout', 'Client', functio $scope.uploadStatus.size = 0; $scope.uploadStatus.done = 0; $scope.uploadStatus.percentDone = 100; + $scope.uploadStatus.files = []; + $scope.uploadStatus.targetFolder = ''; $scope.refresh(); }); } + $scope.retryUpload = function (overwrite) { + uploadFiles($scope.uploadStatus.files, $scope.uploadStatus.targetFolder, !!overwrite); + }; + // file upload - $('#uploadFileInput').on('change', function (e) { uploadFiles(e.target.files || []); }); + $('#uploadFileInput').on('change', function (e) { uploadFiles(e.target.files || [], '', false); }); $scope.onUploadFile = function () { $('#uploadFileInput').click(); }; // folder upload - $('#uploadFolderInput').on('change', function (e ) { uploadFiles(e.target.files || []); }); + $('#uploadFolderInput').on('change', function (e ) { uploadFiles(e.target.files || [], '', false); }); $scope.onUploadFolder = function () { $('#uploadFolderInput').click(); }; $scope.newDirectory = { @@ -459,7 +473,7 @@ app.controller('FileManagerController', ['$scope', '$timeout', 'Client', functio var filePath = sanitize($scope.cwd + '/' + $scope.newFile.name); - Client.filesUpload($scope.appId, filePath, new File([], $scope.newFile.name), function () {}, function (error) { + Client.filesUpload($scope.appId, filePath, new File([], $scope.newFile.name), false, function () {}, function (error) { $scope.newFile.busy = false; if (error && error.statusCode === 409) return $scope.newFile.error = 'Already exists'; if (error) return Client.error(error); @@ -569,7 +583,7 @@ app.controller('FileManagerController', ['$scope', '$timeout', 'Client', functio var filePath = sanitize($scope.cwd + '/' + $scope.textEditor.entry.fileName); var file = new File([newContent], 'file'); - Client.filesUpload($scope.appId, filePath, file, function () {}, function (error) { + Client.filesUpload($scope.appId, filePath, file, true, function () {}, function (error) { if (error) return Client.error(error); $timeout(function () {