mirror of
https://github.com/nextcloud/server.git
synced 2026-06-08 00:02:54 -04:00
Merge pull request #30638 from nextcloud/backport/30620/stable21
[stable21] Properly abort uploads
This commit is contained in:
commit
09c350c576
1 changed files with 50 additions and 12 deletions
|
|
@ -322,26 +322,32 @@ OC.FileUpload.prototype = {
|
|||
);
|
||||
},
|
||||
|
||||
_delete: function() {
|
||||
if (this.data.isChunked) {
|
||||
this._deleteChunkFolder()
|
||||
}
|
||||
this.deleteUpload();
|
||||
},
|
||||
|
||||
/**
|
||||
* Abort the upload
|
||||
*/
|
||||
abort: function() {
|
||||
if (this.data.isChunked) {
|
||||
this._deleteChunkFolder();
|
||||
if (this.aborted) {
|
||||
return
|
||||
}
|
||||
this.data.abort();
|
||||
this.deleteUpload();
|
||||
this.aborted = true;
|
||||
this._delete();
|
||||
},
|
||||
|
||||
/**
|
||||
* Fail the upload
|
||||
*/
|
||||
fail: function() {
|
||||
this.deleteUpload();
|
||||
if (this.data.isChunked) {
|
||||
this._deleteChunkFolder();
|
||||
if (this.aborted) {
|
||||
return
|
||||
}
|
||||
this._delete();
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
@ -679,7 +685,26 @@ OC.Uploader.prototype = _.extend({
|
|||
return;
|
||||
}
|
||||
|
||||
delete this._uploads[upload.data.uploadId];
|
||||
// defer as some calls/chunks might still be busy failing, so we need
|
||||
// the upload info there still
|
||||
var self = this;
|
||||
var uploadId = upload.data.uploadId;
|
||||
// mark as deleted for the progress bar
|
||||
this._uploads[uploadId].deleted = true;
|
||||
window.setTimeout(function() {
|
||||
delete self._uploads[uploadId];
|
||||
}, 5000)
|
||||
},
|
||||
|
||||
_activeUploadCount: function() {
|
||||
var count = 0;
|
||||
for (var key in this._uploads) {
|
||||
if (!this._uploads[key].deleted) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
},
|
||||
|
||||
showUploadCancelMessage: _.debounce(function() {
|
||||
|
|
@ -905,6 +930,7 @@ OC.Uploader.prototype = _.extend({
|
|||
if ($uploadEl.exists()) {
|
||||
this.progressBar.on('cancel', function() {
|
||||
self.cancelUploads();
|
||||
self.showUploadCancelMessage();
|
||||
});
|
||||
|
||||
this.fileUploadParam = {
|
||||
|
|
@ -1075,6 +1101,10 @@ OC.Uploader.prototype = _.extend({
|
|||
var upload = self.getUpload(data);
|
||||
var status = null;
|
||||
if (upload) {
|
||||
if (upload.aborted) {
|
||||
// uploads might fail with errors from the server when aborted
|
||||
return
|
||||
}
|
||||
status = upload.getResponseStatus();
|
||||
}
|
||||
self.log('fail', e, upload);
|
||||
|
|
@ -1082,7 +1112,7 @@ OC.Uploader.prototype = _.extend({
|
|||
self.removeUpload(upload);
|
||||
|
||||
if (data.textStatus === 'abort' || data.errorThrown === 'abort') {
|
||||
self.showUploadCancelMessage();
|
||||
return
|
||||
} else if (status === 412) {
|
||||
// file already exists
|
||||
self.showConflict(upload);
|
||||
|
|
@ -1283,6 +1313,10 @@ OC.Uploader.prototype = _.extend({
|
|||
fileupload.on('fileuploadchunksend', function(e, data) {
|
||||
// modify the request to adjust it to our own chunking
|
||||
var upload = self.getUpload(data);
|
||||
if (!upload) {
|
||||
// likely cancelled
|
||||
return
|
||||
}
|
||||
var range = data.contentRange.split(' ')[1];
|
||||
var chunkId = range.split('/')[0].split('-')[0];
|
||||
data.url = OC.getRootPath() +
|
||||
|
|
@ -1298,9 +1332,9 @@ OC.Uploader.prototype = _.extend({
|
|||
|
||||
self._pendingUploadDoneCount++;
|
||||
|
||||
upload.done().then(function() {
|
||||
upload.done().always(function() {
|
||||
self._pendingUploadDoneCount--;
|
||||
if (Object.keys(self._uploads).length === 0 && self._pendingUploadDoneCount === 0) {
|
||||
if (self._activeUploadCount() === 0 && self._pendingUploadDoneCount === 0) {
|
||||
// All the uploads ended and there is no pending
|
||||
// operation, so hide the progress bar.
|
||||
// Note that this happens here only with chunked
|
||||
|
|
@ -1314,9 +1348,13 @@ OC.Uploader.prototype = _.extend({
|
|||
// hides the progress bar in that case).
|
||||
self._hideProgressBar();
|
||||
}
|
||||
|
||||
}).done(function() {
|
||||
self.trigger('done', e, upload);
|
||||
}).fail(function(status, response) {
|
||||
if (upload.aborted) {
|
||||
return
|
||||
}
|
||||
|
||||
var message = response.message;
|
||||
if (status === 507) {
|
||||
// not enough space
|
||||
|
|
|
|||
Loading…
Reference in a new issue