aboutsummaryrefslogtreecommitdiffstats
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
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
-rw-r--r--locale/FixMyStreetMobileApp.po10
-rw-r--r--locale/en_GB.UTF-8/LC_MESSAGES/FixMyStreetMobileApp.po10
-rw-r--r--src/js/models/report.js71
-rw-r--r--src/js/strings.js1
-rw-r--r--src/js/views/submit.js4
-rw-r--r--templates/strings.js1
6 files changed, 73 insertions, 24 deletions
diff --git a/locale/FixMyStreetMobileApp.po b/locale/FixMyStreetMobileApp.po
index bceef21..fa8ac36 100644
--- a/locale/FixMyStreetMobileApp.po
+++ b/locale/FixMyStreetMobileApp.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
"Report-Msgid-Bugs-To: struan@mysociety.org\n"
-"POT-Creation-Date: 2013-08-09 09:57+0100\n"
+"POT-Creation-Date: 2013-08-09 14:51+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <team@fixmystreet.com>\n"
@@ -149,7 +149,7 @@ msgstr ""
msgid "Login"
msgstr ""
-#: templates/strings.js:46
+#: templates/strings.js:47
msgid "More details"
msgstr ""
@@ -165,7 +165,7 @@ msgstr ""
msgid "Next"
msgstr ""
-#: templates/strings.js:45
+#: templates/strings.js:46
msgid "No network connection available for submitting your report. Please try again later."
msgstr ""
@@ -361,6 +361,10 @@ msgstr ""
msgid "There was a problem taking your photo."
msgstr ""
+#: templates/strings.js:45
+msgid "There was a problem uploading your report."
+msgstr ""
+
#: templates/strings.js:26
msgid "There was a problem with your email/password combination. If you have forgotten your password, or do not have one, you can set one by returning to the email screen and selecting the set password option."
msgstr ""
diff --git a/locale/en_GB.UTF-8/LC_MESSAGES/FixMyStreetMobileApp.po b/locale/en_GB.UTF-8/LC_MESSAGES/FixMyStreetMobileApp.po
index 915c8f5..10a2df7 100644
--- a/locale/en_GB.UTF-8/LC_MESSAGES/FixMyStreetMobileApp.po
+++ b/locale/en_GB.UTF-8/LC_MESSAGES/FixMyStreetMobileApp.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
"Report-Msgid-Bugs-To: struan@mysociety.org\n"
-"POT-Creation-Date: 2013-08-09 09:57+0100\n"
+"POT-Creation-Date: 2013-08-09 14:51+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <team@fixmystreet.com>\n"
@@ -154,7 +154,7 @@ msgstr ""
msgid "Login"
msgstr ""
-#: templates/strings.js:46
+#: templates/strings.js:47
msgid "More details"
msgstr ""
@@ -173,7 +173,7 @@ msgstr ""
msgid "Next"
msgstr ""
-#: templates/strings.js:45
+#: templates/strings.js:46
msgid ""
"No network connection available for submitting your report. Please try again "
"later."
@@ -388,6 +388,10 @@ msgstr ""
msgid "There was a problem taking your photo."
msgstr ""
+#: templates/strings.js:45
+msgid "There was a problem uploading your report."
+msgstr ""
+
#: templates/strings.js:26
msgid ""
"There was a problem with your email/password combination. If you have "
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) {
diff --git a/templates/strings.js b/templates/strings.js
index 00154ee..dbcd4c7 100644
--- a/templates/strings.js
+++ b/templates/strings.js
@@ -42,6 +42,7 @@
invalid_report: '[% loc('Invalid report') %]',
photo_failed: '[% loc('There was a problem taking your photo.') %]',
photo_loading: '[% loc('Uploading images may take some time, please be patient') %]',
+ upload_aborted: '[% loc('There was a problem uploading your report.') %]',
no_connection: '[% loc('No network connection available for submitting your report. Please try again later.') %]',
more_details: '[% loc('More details') %]'
}