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 @@
-
{{ uploadStatus.error }}
+
One or more files already exist.
+
Failed to upload one or more files. Please try again.
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 () {