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