Merge pull request #11399 from nextcloud/stable14-11112-do-not-hide-the-progress-bar-while-the-chunked-upload-is-being-assembled

[stable14] Do not hide the progress bar while the chunked upload is being assembled
This commit is contained in:
Morris Jobke 2018-09-27 14:05:48 +02:00 committed by GitHub
commit 5d84475e11
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 48 additions and 1 deletions

View File

@ -401,6 +401,13 @@ OC.Uploader.prototype = _.extend({
*/ */
_uploads: {}, _uploads: {},
/**
* Count of upload done promises that have not finished yet.
*
* @type int
*/
_pendingUploadDoneCount: 0,
/** /**
* List of directories known to exist. * List of directories known to exist.
* *
@ -745,6 +752,27 @@ OC.Uploader.prototype = _.extend({
}); });
}, },
_updateProgressBarOnUploadStop: function() {
if (this._pendingUploadDoneCount === 0) {
// All the uploads ended and there is no pending operation, so hide
// the progress bar.
// Note that this happens here only with non-chunked uploads; if the
// upload was chunked then this will have been executed after all
// the uploads ended but before the upload done handler that reduces
// the pending operation count was executed.
this._hideProgressBar();
return;
}
$('#uploadprogressbar .label .mobile').text(t('core', '…'));
$('#uploadprogressbar .label .desktop').text(t('core', 'Processing files …'));
// Nothing is being uploaded at this point, and the pending operations
// can not be cancelled, so the cancel button should be hidden.
$('#uploadprogresswrapper .stop').fadeOut();
},
_showProgressBar: function() { _showProgressBar: function() {
$('#uploadprogressbar').fadeIn(); $('#uploadprogressbar').fadeIn();
this.$uploadEl.trigger(new $.Event('resized')); this.$uploadEl.trigger(new $.Event('resized'));
@ -1126,7 +1154,7 @@ OC.Uploader.prototype = _.extend({
self.log('progress handle fileuploadstop', e, data); self.log('progress handle fileuploadstop', e, data);
self.clear(); self.clear();
self._hideProgressBar(); self._updateProgressBarOnUploadStop();
self.trigger('stop', e, data); self.trigger('stop', e, data);
}); });
fileupload.on('fileuploadfail', function(e, data) { fileupload.on('fileuploadfail', function(e, data) {
@ -1194,7 +1222,26 @@ OC.Uploader.prototype = _.extend({
}); });
fileupload.on('fileuploaddone', function(e, data) { fileupload.on('fileuploaddone', function(e, data) {
var upload = self.getUpload(data); var upload = self.getUpload(data);
self._pendingUploadDoneCount++;
upload.done().then(function() { upload.done().then(function() {
self._pendingUploadDoneCount--;
if (Object.keys(self._uploads).length === 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
// uploads; if the upload was non-chunked then this
// handler is immediately executed, before the
// jQuery upload done handler that removes the
// upload from the list, and thus at this point
// there is still at least one upload that has not
// ended (although the upload stop handler is always
// executed after all the uploads have ended, which
// hides the progress bar in that case).
self._hideProgressBar();
}
self.trigger('done', e, upload); self.trigger('done', e, upload);
}).fail(function(status, response) { }).fail(function(status, response) {
var message = response.message; var message = response.message;