diff options
author | Roeland Jago Douma <rullzer@users.noreply.github.com> | 2018-09-27 15:40:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-27 15:40:30 +0200 |
commit | 9c0a9a4d4692e42443aee2ae1b84e5559bb30da0 (patch) | |
tree | 2e1dd70b2f331e9abb4a06bd218d98b301f26e50 /apps | |
parent | 9fa50f48f1c3cb45b317dc876adf398b09be7a6f (diff) | |
parent | 1ee3c31f855eb03a2a6ff8daf0740cb5d44bcf3d (diff) | |
download | nextcloud-server-9c0a9a4d4692e42443aee2ae1b84e5559bb30da0.tar.gz nextcloud-server-9c0a9a4d4692e42443aee2ae1b84e5559bb30da0.zip |
Merge pull request #11400 from nextcloud/stable13-11112-do-not-hide-the-progress-bar-while-the-chunked-upload-is-being-assembled
[stable13] Do not hide the progress bar while the chunked upload is being assembled
Diffstat (limited to 'apps')
-rw-r--r-- | apps/files/js/file-upload.js | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js index fac086c3da8..9c1e2df53a0 100644 --- a/apps/files/js/file-upload.js +++ b/apps/files/js/file-upload.js @@ -402,6 +402,13 @@ OC.Uploader.prototype = _.extend({ _uploads: {}, /** + * Count of upload done promises that have not finished yet. + * + * @type int + */ + _pendingUploadDoneCount: 0, + + /** * List of directories known to exist. * * Key is the fullpath and value is boolean, true meaning that the directory @@ -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() { $('#uploadprogressbar').fadeIn(); this.$uploadEl.trigger(new $.Event('resized')); @@ -1126,7 +1154,7 @@ OC.Uploader.prototype = _.extend({ self.log('progress handle fileuploadstop', e, data); self.clear(); - self._hideProgressBar(); + self._updateProgressBarOnUploadStop(); self.trigger('stop', e, data); }); fileupload.on('fileuploadfail', function(e, data) { @@ -1194,7 +1222,26 @@ OC.Uploader.prototype = _.extend({ }); fileupload.on('fileuploaddone', function(e, data) { var upload = self.getUpload(data); + + self._pendingUploadDoneCount++; + 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); }).fail(function(status, response) { var message = response.message; |