diff options
author | Struan Donald <struan@exo.org.uk> | 2013-08-09 14:52:56 +0100 |
---|---|---|
committer | Struan Donald <struan@exo.org.uk> | 2013-08-09 14:52:56 +0100 |
commit | 0bd61cc264657a9881addb0539514670d850b635 (patch) | |
tree | 1dab7d68bdba52be64572b418bfe58cc1ac04bc8 /src | |
parent | 188e270bbcc5acdd2ddb3698fede9d54cb71e352 (diff) |
Put in place timeout for file upload
A timeout mechanism that checks that the file is uploading and
if not then bails out, and even if it is bails out after 2 minutes
Fixes #87
Diffstat (limited to 'src')
-rw-r--r-- | src/js/models/report.js | 71 | ||||
-rw-r--r-- | src/js/strings.js | 1 | ||||
-rw-r--r-- | src/js/views/submit.js | 4 |
3 files changed, 58 insertions, 18 deletions
diff --git a/src/js/models/report.js b/src/js/models/report.js index 6162046..bc724ea 100644 --- a/src/js/models/report.js +++ b/src/js/models/report.js @@ -89,6 +89,7 @@ var that = this; if ( model.get('file') && model.get('file') !== '' ) { var fileUploadSuccess = function(r) { + FMS.uploading = false; $.mobile.loading('hide'); if ( r.response ) { var data; @@ -111,9 +112,15 @@ } }; - var fileUploadFail = function() { + var fileUploadFail = function(err) { + FMS.uploading = false; $.mobile.loading('hide'); - that.trigger('error', that, FMS.strings.report_send_error, options); + if ( err.code == FileTransferError.ABORT_ERR ) { + options.aborted = true; + that.trigger('error', that, FMS.strings.report_send_error, options); + } else { + that.trigger('error', that, FMS.strings.report_send_error, options); + } }; fileURI = model.get('file'); @@ -126,23 +133,53 @@ fileOptions.chunkedMode = false; var ft = new FileTransfer(); - ft.onprogress = function(evt) { - if (evt.lengthComputable) { - var pcnt = (evt.loaded/evt.total) * 80; - pcnt = pcnt + '%'; - $('.ui-loader #progress').css('display', 'block'); - $('.ui-loader #progress').css('width', pcnt); - if ( pcnt == '80%' ) { - $('.ui-loader #progress').css('background-color', 'green' ); + + FMS.uploading = false; + var setupChecker = function() { + var uploadPcnt = 0; + var lastUploadPcnt = 0; + var uploadComputable = false; + var startTime = Date.now(); + var checkUpload = function() { + if ( !FMS.uploading || ( uploadComputable && uploadPcnt == 80 ) ) { + return; } - } + + var uploadTime = Date.now() - startTime; + if ( ( lastUploadPcnt == 0 && uploadPcnt == 0 ) || + ( lastUploadPcnt > 0 && uploadPcnt == lastUploadPcnt ) || + uploadTime > 120000 + ) { + ft.abort(); + } else { + window.setTimeout( checkUpload, 15000 ); + } + lastUploadPcnt = uploadPcnt; + }; + ft.onprogress = function(evt) { + if (evt.lengthComputable) { + uploadComputable = true; + uploadPcnt = (evt.loaded/evt.total) * 80; + pcnt = uploadPcnt + '%'; + $('.ui-loader #progress').css('display', 'block'); + $('.ui-loader #progress').css('width', pcnt); + if ( pcnt == '80%' ) { + $('.ui-loader #progress').css('background-color', 'green' ); + } + } else { + uploadPcnt++; + } + }; + $.mobile.loading('show', { + text: FMS.strings.photo_loading, + textVisible: true, + html: '<span class="ui-icon ui-icon-loading"></span><h1>' + FMS.strings.photo_loading + '</h1><span id="progress"></span>' + }); + window.setTimeout( checkUpload, 15000 ); + FMS.uploading = true; + ft.upload(fileURI, CONFIG.FMS_URL + "report/new/mobile", fileUploadSuccess, fileUploadFail, fileOptions); }; - $.mobile.loading('show', { - text: FMS.strings.photo_loading, - textVisible: true, - html: '<span class="ui-icon ui-icon-loading"></span><h1>' + FMS.strings.photo_loading + '</h1><span id="progress"></span>' - }); - ft.upload(fileURI, CONFIG.FMS_URL + "report/new/mobile", fileUploadSuccess, fileUploadFail, fileOptions); + setupChecker(); } else { $.ajax( { url: CONFIG.FMS_URL + "report/new/mobile", diff --git a/src/js/strings.js b/src/js/strings.js index 1c1131d..1036729 100644 --- a/src/js/strings.js +++ b/src/js/strings.js @@ -42,6 +42,7 @@ invalid_report: 'Invalid report', photo_failed: 'There was a problem taking your photo.', photo_loading: 'Uploading images may take some time, please be patient', + upload_aborted: 'There was a problem uploading your report.', no_connection: 'No network connection available for submitting your report. Please try again later.', more_details: 'More details' } diff --git a/src/js/views/submit.js b/src/js/views/submit.js index 1d31098..34aaf83 100644 --- a/src/js/views/submit.js +++ b/src/js/views/submit.js @@ -107,13 +107,15 @@ var msg = FMS.strings.unknown_sync_error; if ( err.errors ) { msg = msg + ': ' + err.errors; + } else if ( options.aborted ) { + msg = FMS.strings.upload_aborted; } var that = this; navigator.notification.confirm( msg, function(index) { that.handleReportError(index); }, CONFIG.APP_NAME, - 'Save for Later,Try Again'); + ['Save for Later','Try Again']); }, handleReportError: function(index) { |