MarkTraceur has uploaded a new change for review.

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

Change subject: Remove upload object from FDT
......................................................................

Remove upload object from FDT

Bug: T77124
Change-Id: Ic8b76a6fa884e034715d2191add420e549b16880
---
M resources/mw.ApiUploadFormDataHandler.js
M resources/mw.FormDataTransport.js
2 files changed, 44 insertions(+), 35 deletions(-)


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

diff --git a/resources/mw.ApiUploadFormDataHandler.js 
b/resources/mw.ApiUploadFormDataHandler.js
index eb2ff09..782a551 100644
--- a/resources/mw.ApiUploadFormDataHandler.js
+++ b/resources/mw.ApiUploadFormDataHandler.js
@@ -17,14 +17,30 @@
                        format: 'json'
                };
 
+               upload.on( 'remove-upload', function () {
+                       handler.transport.abort();
+               } );
+
                this.transport = new mw.FormDataTransport(
                        this.$form[0].action,
                        this.formData,
                        this.upload
-               ).on( 'progress', function ( fraction ) {
-                       handler.upload.setTransportProgress( fraction );
+               ).on( 'progress', function ( evt, xhr ) {
+                       var fraction;
+
+                       if ( upload.state === 'aborted' ) {
+                               xhr.abort();
+                               return;
+                       }
+
+                       if ( evt.lengthComputable ) {
+                               fraction = parseFloat( evt.loaded / evt.total );
+                               upload.setTransportProgress( fraction );
+                       }
                } ).on( 'transported', function ( result ) {
-                       handler.upload.setTransported( result );
+                       upload.setTransported( result );
+               } ).on( 'update-stage', function ( stage ) {
+                       upload.ui.setStatus( 'mwe-upwiz-' + stage );
                } );
        };
 
@@ -53,7 +69,7 @@
                                handler.beginTime = ( new Date() ).getTime();
                                handler.upload.ui.setStatus( 
'mwe-upwiz-transport-started' );
                                handler.upload.ui.showTransportProgress();
-                               handler.transport.upload();
+                               handler.transport.upload( handler.upload.file );
                        }
 
                        function err( code, info ) {
diff --git a/resources/mw.FormDataTransport.js 
b/resources/mw.FormDataTransport.js
index 95b9a93..5969b8a 100644
--- a/resources/mw.FormDataTransport.js
+++ b/resources/mw.FormDataTransport.js
@@ -7,15 +7,14 @@
         * @constructor
         * @param {string} postUrl URL to post to.
         * @param {Object} formData Additional form fields required for upload 
api call
-        * @param {mw.UploadWizardUpload} uploadObject Stupidly included object 
that is controlling the upload details
         */
-       mw.FormDataTransport = function ( postUrl, formData, uploadObject ) {
+       mw.FormDataTransport = function ( postUrl, formData ) {
                var profile = $.client.profile();
 
                oo.EventEmitter.call( this );
 
                this.formData = formData;
-               this.uploadObject = uploadObject;
+               this.aborted = false;
 
                this.postUrl = postUrl;
                // Set chunk size to configured chunk size or max php size,
@@ -40,10 +39,17 @@
        oo.inheritClass( mw.FormDataTransport, oo.EventEmitter );
 
        mw.FormDataTransport.prototype = {
-               upload: function () {
+               abort: function () {
+                       this.aborted = true;
+
+                       if ( this.xhr ) {
+                               this.xhr.abort();
+                       }
+               },
+
+               upload: function ( file ) {
                        var formData,
-                               transport = this,
-                               file = this.uploadObject.file;
+                               transport = this;
 
                        // use timestamp + filename to avoid conflicts on server
                        this.tempname = ( new Date() ).getTime().toString() + 
file.name;
@@ -53,7 +59,7 @@
                        }).join('');
 
                        if ( mw.UploadWizard.config.enableChunked && file.size 
> this.chunkSize ) {
-                               this.uploadChunk(0);
+                               this.uploadChunk( file, 0 );
                        } else {
                                this.xhr = new XMLHttpRequest();
                                this.xhr.addEventListener('load', function 
(evt) {
@@ -64,15 +70,7 @@
                                }, false);
 
                                this.xhr.upload.addEventListener( 'progress', 
function ( evt ) {
-                                       if ( transport.uploadObject.state === 
'aborted' ) {
-                                               transport.xhr.abort();
-                                               return;
-                                       }
-
-                                       if ( evt.lengthComputable ) {
-                                               var progress = 
parseFloat(evt.loaded / evt.total );
-                                               transport.emit( 'progress', 
progress );
-                                       }
+                                       transport.emit( 'progress', evt );
                                }, false);
                                this.xhr.addEventListener('abort', function 
(evt) {
                                        transport.emitParsedResponse( evt );
@@ -96,13 +94,12 @@
                                this.xhr.send(formData);
                        }
                },
-               uploadChunk: function (offset) {
+               uploadChunk: function ( file, offset ) {
                        var formData,
                                transport = this,
-                               file = this.uploadObject.file,
                                bytesAvailable = file.size,
                                chunk;
-                       if ( this.uploadObject.state === 'aborted' ) {
+                       if ( this.aborted ) {
                                if ( this.xhr ) {
                                        this.xhr.abort();
                                }
@@ -137,7 +134,7 @@
                                                //reset retry counter
                                                transport.retries = 0;
                                                //start uploading next chunk
-                                               
transport.uploadChunk(response.upload.offset);
+                                               transport.uploadChunk( file, 
response.upload.offset );
                                        } else {
                                                //failed to upload, try again 
in 3 seconds
                                                transport.retries++;
@@ -148,7 +145,7 @@
                                                } else {
                                                        mw.log( 'Retry #' + 
transport.retries + ' on unknown response' );
                                                        setTimeout(function () {
-                                                               
transport.uploadChunk(offset);
+                                                               
transport.uploadChunk( file, offset );
                                                        }, 3000);
                                                }
                                        }
@@ -163,18 +160,12 @@
                                } else {
                                        mw.log( 'Retry #' + transport.retries + 
' on error event' );
                                        setTimeout(function () {
-                                               transport.uploadChunk(offset);
+                                               transport.uploadChunk(file, 
offset );
                                        }, 3000);
                                }
                        }, false);
                        this.xhr.upload.addEventListener( 'progress', function 
( evt ) {
-                               if ( transport.uploadObject.state === 'aborted' 
) {
-                                       transport.xhr.abort();
-                               }
-                               if ( evt.lengthComputable ) {
-                                       var progress = parseFloat( offset + 
evt.loaded ) / bytesAvailable;
-                                       transport.emit( 'progress', progress );
-                               }
+                               transport.emit( 'progress', evt );
                        }, false );
                        this.xhr.addEventListener('abort', function (evt) {
                                transport.emitParsedResponse( evt );
@@ -218,9 +209,11 @@
                        var transport = this,
                                api = new mw.Api(),
                                params = {};
-                       if ( this.uploadObject.state === 'aborted' ) {
+
+                       if ( this.aborted ) {
                                return;
                        }
+
                        if (!this.firstPoll) {
                                this.firstPoll = ( new Date() ).getTime();
                        }
@@ -247,7 +240,7 @@
                                                                // 
*mwe-upwiz-queued
                                                                // 
*mwe-upwiz-publish
                                                                // 
*mwe-upwiz-assembling
-                                                               
transport.uploadObject.ui.setStatus( 'mwe-upwiz-' + response.upload.stage );
+                                                               transport.emit( 
'update-stage', response.upload.stage );
                                                                
setTimeout(function () {
                                                                        
transport.checkStatus();
                                                                }, 3000);

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic8b76a6fa884e034715d2191add420e549b16880
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/UploadWizard
Gerrit-Branch: master
Gerrit-Owner: MarkTraceur <[email protected]>

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

Reply via email to