Use NativeStorage plugin as backup for localStorage data #60

Skylar Ittner 2 years ago
parent 18a49da6b0
commit ee091277dd

8
package-lock.json generated

@ -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"

@ -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"
}

@ -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");

@ -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();
}
);

@ -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);
});
}
});
}

@ -81,6 +81,7 @@ function syncNow(callback) {
function loadSettings() {
applyColorTheme();
setAnimations();
if (platform_type == "cordova") {
if (getStorage("wakelock") == "true") {

Loading…
Cancel
Save