aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorStruan Donald <struan@exo.org.uk>2013-08-09 14:52:56 +0100
committerStruan Donald <struan@exo.org.uk>2013-08-09 14:52:56 +0100
commit0bd61cc264657a9881addb0539514670d850b635 (patch)
tree1dab7d68bdba52be64572b418bfe58cc1ac04bc8 /src
parent188e270bbcc5acdd2ddb3698fede9d54cb71e352 (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.js71
-rw-r--r--src/js/strings.js1
-rw-r--r--src/js/views/submit.js4
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) {