Bartosz Dziewoński has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/248923

Change subject: mw.FormDataTransport: Get progress notifications for the whole 
file
......................................................................

mw.FormDataTransport: Get progress notifications for the whole file

Bug: T89194
Change-Id: I3e266a30d3d5d64aa54f595da6eeab78a0395ced
---
M resources/handlers/mw.ApiUploadFormDataHandler.js
M resources/transports/mw.FormDataTransport.js
2 files changed, 24 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/UploadWizard 
refs/changes/23/248923/1

diff --git a/resources/handlers/mw.ApiUploadFormDataHandler.js 
b/resources/handlers/mw.ApiUploadFormDataHandler.js
index cbd6c87..1efcbe1 100644
--- a/resources/handlers/mw.ApiUploadFormDataHandler.js
+++ b/resources/handlers/mw.ApiUploadFormDataHandler.js
@@ -58,16 +58,13 @@
                                handler.upload.ui.setStatus( 
'mwe-upwiz-transport-started' );
                                handler.upload.ui.showTransportProgress();
                                return handler.transport.upload( 
handler.upload.file )
-                                       .progress( function ( evt, xhr ) {
-                                               var fraction;
-
+                                       .progress( function ( fraction ) {
                                                if ( handler.upload.state === 
'aborted' ) {
-                                                       xhr.abort();
+                                                       
handler.transport.xhr.abort();
                                                        return;
                                                }
 
-                                               if ( evt.lengthComputable ) {
-                                                       fraction = parseFloat( 
evt.loaded / evt.total );
+                                               if ( fraction !== null ) {
                                                        
handler.upload.setTransportProgress( fraction );
                                                }
                                        } ).then( function ( result ) {
diff --git a/resources/transports/mw.FormDataTransport.js 
b/resources/transports/mw.FormDataTransport.js
index 85f8598..5a16281 100644
--- a/resources/transports/mw.FormDataTransport.js
+++ b/resources/transports/mw.FormDataTransport.js
@@ -64,7 +64,13 @@
                        transport = this;
 
                xhr.upload.addEventListener( 'progress', function ( evt ) {
-                       deferred.notify( evt, xhr );
+                       var fraction;
+                       if ( evt.lengthComputable ) {
+                               fraction = parseFloat( evt.loaded / evt.total );
+                       } else {
+                               fraction = null;
+                       }
+                       deferred.notify( fraction );
                }, false );
 
                xhr.addEventListener( 'abort', function ( evt ) {
@@ -130,7 +136,8 @@
         * @return {jQuery.Promise}
         */
        mw.FormDataTransport.prototype.upload = function ( file ) {
-               var formData, deferred, ext,
+               var formData, deferred, ext, totalUploaded,
+                       chunkSize = this.chunkSize,
                        transport = this;
 
                // use timestamp + filename to avoid conflicts on server
@@ -145,8 +152,18 @@
                        this.tempname = this.tempname.substr( 0, 240 - 
ext.length - 1 ) + '.' + ext;
                }
 
-               if ( this.config.enableChunked && file.size > this.chunkSize ) {
-                       return this.uploadChunk( file, 0 );
+               if ( this.config.enableChunked && file.size > chunkSize ) {
+                       totalUploaded = 0;
+                       // The progress notifications give us per-chunk 
progress, filter them to get progress
+                       // for the whole file
+                       return this.uploadChunk( file, 0 ).then( null, null, 
function ( fraction ) {
+                               if ( fraction === 1 ) {
+                                       // We completed a chunk
+                                       totalUploaded += chunkSize;
+                                       fraction = 0;
+                               }
+                               return ( totalUploaded + fraction * chunkSize ) 
/ file.size;
+                       } );
                } else {
                        deferred = $.Deferred();
                        this.xhr = this.createXHR( deferred );

-- 
To view, visit https://gerrit.wikimedia.org/r/248923
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3e266a30d3d5d64aa54f595da6eeab78a0395ced
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/UploadWizard
Gerrit-Branch: master
Gerrit-Owner: Bartosz Dziewoński <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to