Add Timeout to all xhrs so the app doesn't get stuck + change reject to resolve so the spinner hides itself
This commit is contained in:
parent
0c0d66b3da
commit
3a4d8c92c8
|
@ -34,6 +34,7 @@
|
|||
<preference name="StatusBarOverlaysWebView" value="false" />
|
||||
<preference name="StatusBarBackgroundColor" value="#000000" />
|
||||
<preference name="StatusBarStyle" value="blackopaque" />
|
||||
<preference name="AndroidPersistentFileLocation" value="Compatibility" />
|
||||
<feature name="http://api.phonegap.com/1.0/file" />
|
||||
<!--gap:plugin name="org.apache.cordova.file" version="3.0.0" />
|
||||
<gap:plugin name="org.apache.cordova.file-transfer" version="1.4.0" />
|
||||
|
|
|
@ -19,11 +19,15 @@
|
|||
"parents": {
|
||||
"/*": [
|
||||
{
|
||||
"xml": "<feature name=\"InAppBrowser\"><param name=\"android-package\" value=\"org.apache.cordova.inappbrowser.InAppBrowser\" /></feature>",
|
||||
"xml": "<feature name=\"File\"><param name=\"android-package\" value=\"org.apache.cordova.file.FileUtils\" /><param name=\"onload\" value=\"true\" /></feature>",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"xml": "<feature name=\"Whitelist\"><param name=\"android-package\" value=\"org.apache.cordova.whitelist.WhitelistPlugin\" /><param name=\"onload\" value=\"true\" /></feature>",
|
||||
"xml": "<feature name=\"FileTransfer\"><param name=\"android-package\" value=\"org.apache.cordova.filetransfer.FileTransfer\" /></feature>",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"xml": "<feature name=\"InAppBrowser\"><param name=\"android-package\" value=\"org.apache.cordova.inappbrowser.InAppBrowser\" /></feature>",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
|
@ -31,11 +35,7 @@
|
|||
"count": 1
|
||||
},
|
||||
{
|
||||
"xml": "<feature name=\"File\"><param name=\"android-package\" value=\"org.apache.cordova.file.FileUtils\" /><param name=\"onload\" value=\"true\" /></feature>",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"xml": "<feature name=\"FileTransfer\"><param name=\"android-package\" value=\"org.apache.cordova.filetransfer.FileTransfer\" /></feature>",
|
||||
"xml": "<feature name=\"Whitelist\"><param name=\"android-package\" value=\"org.apache.cordova.whitelist.WhitelistPlugin\" /><param name=\"onload\" value=\"true\" /></feature>",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
|
@ -60,19 +60,19 @@
|
|||
}
|
||||
},
|
||||
"installed_plugins": {
|
||||
"cordova-plugin-inappbrowser": {
|
||||
"cordova-plugin-file": {
|
||||
"PACKAGE_NAME": "com.cadoles.momo"
|
||||
},
|
||||
"cordova-plugin-whitelist": {
|
||||
"cordova-plugin-file-transfer": {
|
||||
"PACKAGE_NAME": "com.cadoles.momo"
|
||||
},
|
||||
"cordova-plugin-inappbrowser": {
|
||||
"PACKAGE_NAME": "com.cadoles.momo"
|
||||
},
|
||||
"cordova-plugin-statusbar": {
|
||||
"PACKAGE_NAME": "com.cadoles.momo"
|
||||
},
|
||||
"cordova-plugin-file": {
|
||||
"PACKAGE_NAME": "com.cadoles.momo"
|
||||
},
|
||||
"cordova-plugin-file-transfer": {
|
||||
"cordova-plugin-whitelist": {
|
||||
"PACKAGE_NAME": "com.cadoles.momo"
|
||||
},
|
||||
"cordova-plugin-zip": {
|
||||
|
|
|
@ -29,6 +29,7 @@ var ANIMATION_BACK_OUT_CLASS = 'pt-page-moveToRightEasing pt-page-ontop';
|
|||
var ANIMATION_BACK_IN_CLASS = 'pt-page-moveFromLeft';
|
||||
var ON_PULL = 'checkForUpdate'; // || 'update'
|
||||
var CHECK_FOR_CONNECTION_INTERVAL = 3000;
|
||||
var AJAX_TIMEOUT = 5000;
|
||||
|
||||
// Application
|
||||
var app = {
|
||||
|
@ -120,12 +121,9 @@ var app = {
|
|||
// Device ready callback
|
||||
onDeviceReady: function() {
|
||||
var request = new XMLHttpRequest();
|
||||
request.open('GET', '../index.json');
|
||||
request.open('GET', './index.json');
|
||||
request.onload = function() {
|
||||
if (request.status != 200) {
|
||||
/* this should never happen */
|
||||
app.utils.setLoadingMsg("Initialisation de l'application : erreur de chargement");
|
||||
} else {
|
||||
if (request.status >= 200 && request.status < 400 || request.status === 0 /* iOS OhMyBuddha!! */) {
|
||||
var new_manifest = JSON.parse(this.responseText);
|
||||
for (var attr in new_manifest.meta) {
|
||||
if (new_manifest.meta.hasOwnProperty(attr)) {
|
||||
|
@ -137,8 +135,15 @@ var app = {
|
|||
app.manifest.pages = new_manifest.pages;
|
||||
app.manifest.footer = new_manifest.footer;
|
||||
app.onDefaultManifestLoaded();
|
||||
} else {
|
||||
/* this should never happen */
|
||||
app.utils.setLoadingMsg("Initialisation de l'application : Erreur de chargement");
|
||||
}
|
||||
};
|
||||
request.timeout = AJAX_TIMEOUT;
|
||||
request.ontimeout = function(){
|
||||
app.utils.setLoadingMsg("Initialisation de l'application : Temps imparti dépassé");
|
||||
};
|
||||
request.send();
|
||||
},
|
||||
|
||||
|
@ -253,6 +258,7 @@ var app = {
|
|||
}
|
||||
}
|
||||
}
|
||||
app.online = true;
|
||||
// Hide offline specific elements
|
||||
var i, elements;
|
||||
elements = document.getElementsByClassName("offline-hidden");
|
||||
|
@ -325,6 +331,8 @@ var app = {
|
|||
}
|
||||
|
||||
var onGetMtime = function(key, mtime, ready){
|
||||
var l = key + ' ' + mtime + ' ' + ready;
|
||||
console.log(l);
|
||||
var old_mtime = localStorage.getItem("momo-"+key+"-mtime");
|
||||
if (mtime) {
|
||||
if(mtime != old_mtime) {
|
||||
|
@ -336,10 +344,7 @@ var app = {
|
|||
if(ready){
|
||||
if(updateError){
|
||||
if(DEBUG){ console.error('Error checking for updates'); }
|
||||
app.flash("Impossible de détecter des nouvelles mises à jour", 'danger');
|
||||
if(typeof reject === 'function'){
|
||||
reject();
|
||||
}
|
||||
app.flash("Impossible de détecter des nouvelles mises à jour. Veuillez vérifier votre connexion internet.", 'danger');
|
||||
if(typeof resolve === 'function'){
|
||||
resolve(false);
|
||||
}
|
||||
|
@ -401,6 +406,7 @@ var app = {
|
|||
var url = app.manifest.meta.manifestUrl;
|
||||
var request = new XMLHttpRequest();
|
||||
|
||||
// Force reload with timestamp injected in URL
|
||||
request.open('GET', app.utils.addParameter(url, 'timestamp', (+new Date()), true), true);
|
||||
|
||||
// AJAX Callback
|
||||
|
@ -461,6 +467,17 @@ var app = {
|
|||
app.onAjaxError(url);
|
||||
};
|
||||
|
||||
// Set AJAX Timeout
|
||||
request.timeout = AJAX_TIMEOUT;
|
||||
|
||||
// Handle AJAX Timeout
|
||||
request.ontimeout = function() {
|
||||
if(typeof reject === "function"){
|
||||
reject();
|
||||
}
|
||||
app.onAjaxError(url);
|
||||
};
|
||||
|
||||
// Send AJAX
|
||||
request.send();
|
||||
},
|
||||
|
@ -1592,23 +1609,29 @@ var app = {
|
|||
if (xhr.status >= 200 && xhr.status < 400 || xhr.status === 0 /* iOS OhMyBuddha!! */) {
|
||||
var mtime = new Date(xhr.getResponseHeader('Last-Modified'));
|
||||
if (mtime.toString() === 'Invalid Date') {
|
||||
//app.onAjaxError(url);
|
||||
callback(); // dont want to return a bad date
|
||||
} else {
|
||||
callback(mtime);
|
||||
}
|
||||
// AJAX error
|
||||
} else {
|
||||
//app.onAjaxError(url);
|
||||
callback(); // dont want to return a bad date
|
||||
}
|
||||
};
|
||||
|
||||
// Handle AJAX Error
|
||||
//xhr.onerror = function() {
|
||||
// //app.onAjaxError(url);
|
||||
// callback();
|
||||
//};
|
||||
xhr.onerror = function() {
|
||||
//app.onAjaxError(url);
|
||||
callback();
|
||||
};
|
||||
|
||||
// Set AJAX Timeout
|
||||
xhr.timeout = AJAX_TIMEOUT;
|
||||
|
||||
// Handle AJAX Timout
|
||||
xhr.ontimeout = function(){
|
||||
callback(); // dont want to return a bad date
|
||||
}
|
||||
xhr.send();
|
||||
},
|
||||
|
||||
|
|
Reference in New Issue