diff --git a/package-lock.json b/package-lock.json index fa027ac..d2f0ded 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "com.netsyms.packagehelper", - "version": "1.6.3", + "version": "1.6.4", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -620,6 +620,12 @@ "integrity": "sha512-jPvcwDx2/L5ZbVG69NT2xmlG1E+MljRxkdsFpgj/5aoaF4oPqxg44J/bYxJNWgQtGnRSRWoqCRmU7FgmmMNMxA==", "dev": true }, + "cordova-plugin-nativestorage": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/cordova-plugin-nativestorage/-/cordova-plugin-nativestorage-2.3.2.tgz", + "integrity": "sha512-olg/BzYRk0NGbKQ5f7rf21RYQEyJI19CCZn6RpVMO9/kbRRFqae/6ixjDNy81dXSu2TQ42brjBddGe1Qpn5ViA==", + "dev": true + }, "cordova-plugin-powermanagement-netsyms": { "version": "git+https://source.netsyms.com/Netsyms/cordova-plugin-powermanagement#1cca6de3d8153b369cef147d7e1689272d0944f3", "from": "git+https://source.netsyms.com/Netsyms/cordova-plugin-powermanagement" diff --git a/package.json b/package.json index c791002..e0b70a8 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,8 @@ "phonegap-plugin-barcodescanner": { "ANDROID_SUPPORT_V4_VERSION": "27.+" }, - "cordova-plugin-velda-devicefeedback": {} + "cordova-plugin-velda-devicefeedback": {}, + "cordova-plugin-nativestorage": {} }, "platforms": [ "browser", @@ -51,6 +52,7 @@ "devDependencies": { "cordova-ios": "^6.1.1", "cordova-plugin-inappbrowser": "^4.1.0", + "cordova-plugin-nativestorage": "^2.3.2", "cordova-plugin-velda-devicefeedback": "0.0.2", "phonegap-plugin-barcodescanner": "^8.1.0" } diff --git a/www/assets/js/main.js b/www/assets/js/main.js index 10d8900..fba4318 100644 --- a/www/assets/js/main.js +++ b/www/assets/js/main.js @@ -95,6 +95,24 @@ router.on("routeChange", function (newRoute) { console.log("Info", "Navigating to ", newRoute.path); }); +try { +// Detect if localStorage is gone and try to restore it from NativeStorage plugin + if (getStorage("syncstateversion") == null || getStorage("syncstateversion") == 0) { + console.log("LocalStorage syncstateversion is null or zero, restoring from NativeStorage"); + // "restore" localStorage + copyNativeStorageToLocalStorage(); + // give it some arbitrary amount of time because I'm too lazy to do real async + setTimeout(function () { + loadSettings(); + }, 60 * 1000); + } else { + // "back up" localStorage + copyLocalStorageToNativeStorage(); + } +} catch (ex) { + // Well we tried +} + // Set alert radius to 100 meters by default if (getStorage("alertradius") == null) { setStorage("alertradius", 100); @@ -188,7 +206,6 @@ function setAnimations(enabled) { } } -applyColorTheme(); -setAnimations(); +loadSettings(); router.navigate("/home"); \ No newline at end of file diff --git a/www/assets/js/settings.js b/www/assets/js/settings.js index 7377ad0..c6d9eac 100644 --- a/www/assets/js/settings.js +++ b/www/assets/js/settings.js @@ -10,9 +10,10 @@ function logout() { "Are you sure you want to log out?", "Log out?", function () { - localStorage.removeItem('password'); - localStorage.removeItem('username'); - localStorage.removeItem('lastsync'); + removeStorage('username'); + removeStorage('password'); + removeStorage('lastsync'); + removeStorage('syncstateversion'); restartApplication(); } ); diff --git a/www/assets/js/storage.js b/www/assets/js/storage.js index 075056c..d29e77e 100644 --- a/www/assets/js/storage.js +++ b/www/assets/js/storage.js @@ -17,6 +17,11 @@ function setStorage(key, value, nochangeupdate) { nochangeupdate = false; } localStorage.setItem(key, value); + try { + NativeStorage.setItem(key, value); + } catch (ex) { + // skip + } if (!nochangeupdate && !SETTINGS.synckeyblacklist.includes(key)) { var version = getStorage("syncstateversion") == null ? 0 : getStorage("syncstateversion"); localStorage.setItem("syncstateversion", Number(version) + 1); @@ -41,6 +46,15 @@ function inStorage(key) { return localStorage.getItem(key) != null; } +/** + * Erase the key and its value from the persistent storage. + * @param {string} key + * @returns {undefined} + */ +function removeStorage(key) { + localStorage.removeItem(key); +} + /** * Get all item from persistent storage. * @returns {Array} [{key: "", value: ""},...] @@ -56,4 +70,22 @@ function getAllStorage() { } } return all; +} + +function copyLocalStorageToNativeStorage() { + for (var key in localStorage) { + if (localStorage.hasOwnProperty(key)) { + NativeStorage.setItem(key, localStorage.getItem(key)); + } + } +} + +function copyNativeStorageToLocalStorage() { + NativeStorage.keys(function (keys) { + for (var key in keys) { + NativeStorage.getItem(key, function (val) { + localStorage.setItem(key, val); + }); + } + }); } \ No newline at end of file diff --git a/www/assets/js/sync.js b/www/assets/js/sync.js index f6bcf94..569fb6a 100644 --- a/www/assets/js/sync.js +++ b/www/assets/js/sync.js @@ -81,6 +81,7 @@ function syncNow(callback) { function loadSettings() { applyColorTheme(); + setAnimations(); if (platform_type == "cordova") { if (getStorage("wakelock") == "true") {