jenkins-bot has submitted this change and it was merged.
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, 47 insertions(+), 38 deletions(-)
Approvals:
Gilles: Looks good to me, approved
jenkins-bot: Verified
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 92c00a2..858844e 100644
--- a/resources/mw.FormDataTransport.js
+++ b/resources/mw.FormDataTransport.js
@@ -9,15 +9,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,
@@ -43,10 +42,17 @@
FDTP = mw.FormDataTransport.prototype;
- FDTP.upload = function () {
+ FDTP.abort = function () {
+ this.aborted = true;
+
+ if ( this.xhr ) {
+ this.xhr.abort();
+ }
+ };
+
+ FDTP.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;
@@ -56,7 +62,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) {
@@ -67,15 +73,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 );
@@ -100,13 +98,12 @@
}
};
- FDTP.uploadChunk = function ( offset ) {
+ FDTP.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();
}
@@ -141,7 +138,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++;
@@ -152,7 +149,7 @@
} else {
mw.log( 'Retry #' +
transport.retries + ' on unknown response' );
setTimeout(function () {
-
transport.uploadChunk(offset);
+ transport.uploadChunk(
file, offset );
}, 3000);
}
}
@@ -167,18 +164,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 );
@@ -223,9 +214,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();
}
@@ -249,10 +242,10 @@
window.console.log(
'Unable to check file\'s status' );
} else {
//Statuses that can be
returned:
- // *mwe-upwiz-queued
- // *mwe-upwiz-publish
- // *mwe-upwiz-assembling
-
transport.uploadObject.ui.setStatus( 'mwe-upwiz-' + response.upload.stage );
+ // * queued
+ // * publish
+ // * assembling
+ 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: merged
Gerrit-Change-Id: Ic8b76a6fa884e034715d2191add420e549b16880
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/UploadWizard
Gerrit-Branch: master
Gerrit-Owner: MarkTraceur <[email protected]>
Gerrit-Reviewer: Gilles <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits