From 887fedc500a304a9b8e4ff57c372b44a2fc4bd25 Mon Sep 17 00:00:00 2001 From: Prateek Saxena Date: Thu, 1 Oct 2015 01:08:38 +0530 Subject: [PATCH] mw.Upload.BookletLayout: Move error checking for uploadToStash to uploadFile We were checking for uploadToStash errors in saveFile, instead of in uploadFile itself. Apart from being just wrong it was causing two issues: 1. We would show an upload error until after you've tried to save the file. 2. If there was an error in saving, and you try again, the first thing it would do is check mw.Upload.State to hopefully check for uploadToStash errors. Instead of running the finishStashUpload again it would fail because of the earlier error, thus making all errors unrecoverable. Bug: T114130 Change-Id: I56f4ef6e6536840a63402688eb2a1875a6876fcc --- .../mediawiki.Upload.BookletLayout.js | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js b/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js index 41200d3ea6..fa2fb0b831 100644 --- a/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js +++ b/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js @@ -175,16 +175,31 @@ * @return {jQuery.Promise} */ mw.Upload.BookletLayout.prototype.uploadFile = function () { - var file = this.getFile(); + var deferred = $.Deferred(), + layout = this, + file = this.getFile(); this.filenameWidget.setValue( file.name ); this.setPage( 'info' ); this.upload.setFile( file ); this.uploadPromise = this.upload.uploadToStash(); - this.uploadPromise.then( this.emit.bind( this, 'fileUploaded' ) ); + this.uploadPromise.then( function () { + deferred.resolve(); + layout.emit( 'fileUploaded' ); + } ); + this.uploadPromise.always( function () { + if ( layout.upload.getState() === mw.Upload.State.ERROR ) { + deferred.reject( new OO.ui.Error( mw.msg( 'upload-process-error' ) ) ); + return false; + } + if ( layout.upload.getState() === mw.Upload.State.WARNING ) { + deferred.reject( new OO.ui.Error( mw.msg( 'upload-process-error' ) ) ); + return false; + } + } ); - return this.uploadPromise; + return deferred; }; /** @@ -206,17 +221,6 @@ this.upload.setText( this.getText() ); this.uploadPromise.always( function () { - - if ( layout.upload.getState() === mw.Upload.State.ERROR ) { - deferred.reject( new OO.ui.Error( mw.msg( 'upload-process-error' ) ) ); - return false; - } - - if ( layout.upload.getState() === mw.Upload.State.WARNING ) { - deferred.reject( new OO.ui.Error( mw.msg( 'upload-process-error' ) ) ); - return false; - } - layout.upload.finishStashUpload().always( function () { var name; -- 2.20.1