From bf22d8afc279cd71db9cc3d50e8eba889810f699 Mon Sep 17 00:00:00 2001 From: dario-cfpt Date: Tue, 10 Mar 2020 10:41:46 +0100 Subject: [PATCH] Add network verification The app doesn't try to get or update the data if the phone is not online. --- mobile/package-lock.json | 5 ++ mobile/package.json | 6 ++- mobile/www/index.html | 2 +- mobile/www/js/database.js | 102 ++++++++++++++++++++++++-------------- 4 files changed, 75 insertions(+), 40 deletions(-) diff --git a/mobile/package-lock.json b/mobile/package-lock.json index f015ba0..0b5af5d 100644 --- a/mobile/package-lock.json +++ b/mobile/package-lock.json @@ -274,6 +274,11 @@ "resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-2.0.3.tgz", "integrity": "sha512-Jb3V72btxf3XHpkPQsGdyc8N6tVBYn1vsxSFj43fIz9vonJDUThYPCJJHqk6PX6N4dJw6I4FjxkpfCR4LDYMlw==" }, + "cordova-plugin-network-information": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/cordova-plugin-network-information/-/cordova-plugin-network-information-2.0.2.tgz", + "integrity": "sha512-NwO3qDBNL/vJxUxBTPNOA1HvkDf9eTeGH8JSZiwy1jq2W2mJKQEDBwqWkaEQS19Yd/MQTiw0cykxg5D7u4J6cQ==" + }, "cordova-plugin-whitelist": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.4.tgz", diff --git a/mobile/package.json b/mobile/package.json index 4885ef2..49a1799 100644 --- a/mobile/package.json +++ b/mobile/package.json @@ -16,7 +16,8 @@ "cordova-android": "^8.1.0", "cordova-browser": "^6.0.0", "cordova-ios": "^5.1.1", - "cordova-plugin-device": "^2.0.3" + "cordova-plugin-device": "^2.0.3", + "cordova-plugin-network-information": "^2.0.2" }, "devDependencies": { "cordova-plugin-whitelist": "^1.3.4" @@ -24,7 +25,8 @@ "cordova": { "plugins": { "cordova-plugin-whitelist": {}, - "cordova-plugin-device": {} + "cordova-plugin-device": {}, + "cordova-plugin-network-information": {} }, "platforms": [ "android", diff --git a/mobile/www/index.html b/mobile/www/index.html index 2e925fc..0d248e1 100644 --- a/mobile/www/index.html +++ b/mobile/www/index.html @@ -104,13 +104,13 @@ + - diff --git a/mobile/www/js/database.js b/mobile/www/js/database.js index 0ae17a7..f81401b 100644 --- a/mobile/www/js/database.js +++ b/mobile/www/js/database.js @@ -6,45 +6,58 @@ Description : Communicates with the server to ensure that the data is up to date const BASE_URL = "http://localhost/"; let feData = JSON.parse(localStorage.getItem("feData")); -if (feData != null) { - let body = new FormData(); - body.append('version', feData.version); +function isOnline() { + const networkState = (navigator.connection) ? navigator.connection.type : null; - fetch(BASE_URL + "update", { - method: "POST", - body: body, - }) - .then(res => { - if (res.ok) { - return res.json(); - } else { - console.log(res); - } - }) - .then(data => { - updateData(data); - }) - .catch(err => { - console.log(err); - }); -} else { - // Import the data if none was found - fetch(BASE_URL + "all") - .then(res => { - if (res.ok) { - return res.json(); - } else { - console.log(res); - } - }) - .then(data => { - updateData(data); - }) - .catch(err => { - console.log(err); - }); + if (networkState != null && networkState != "none") { + return true; + } + return false; } +// Get the data from the server or update the data in the localstorage if needed +function getOrUpdateData() { + if (feData != null) { + let body = new FormData(); + body.append('version', feData.version); + + fetch(BASE_URL + "update", { + method: "POST", + body: body, + }) + .then(res => { + if (res.ok) { + return res.json(); + } else { + console.log(res); + } + }) + .then(data => { + updateData(data); + }) + .catch(err => { + console.log(err); + }); + } else { + // Import the data if none was found + fetch(BASE_URL + "all") + .then(res => { + if (res.ok) { + return res.json(); + } else { + console.log(res); + } + }) + .then(data => { + updateData(data); + }) + .catch(err => { + console.log(err); + }); + } +} + +// Update the data in the localstorage function updateData(data) { // If the data received from the server are not empty then we can save them in the local storage if (data != null && Object.keys(data).length > 0) { @@ -54,4 +67,19 @@ function updateData(data) { // End of the update process, we can now display the data displayCharacters(); -} \ No newline at end of file +} + +// Doesn't try to get or update the data if the user is not connected to the internet +if (isOnline()) { + getOrUpdateData(); +} else { + // If the user is not connected to internet but the data are already present in the app, then we display them + if (feData != null) { + displayCharacters(); + } else { + alert("Please connect to the internet to download the data"); + } + + // Create an event to get/update the data when the user goes online + document.addEventListener("online", getOrUpdateData, false); +}