diff options
| author | Pliable Pixels <pliablepixels@gmail.com> | 2018-05-31 08:21:51 -0400 |
|---|---|---|
| committer | Pliable Pixels <pliablepixels@gmail.com> | 2018-05-31 08:21:51 -0400 |
| commit | 49263c5ddd92c4374b23cff4273c1e6460823f80 (patch) | |
| tree | 757fbd96ffdb3bc4d8856bc444a06cc0aa9447c0 /www/js/DataModel.js | |
| parent | fd3b8ae2015b8071cb89bd5831ebcfffda3f1709 (diff) | |
#636 introduce DB get/set checks
Diffstat (limited to 'www/js/DataModel.js')
| -rwxr-xr-x | www/js/DataModel.js | 126 |
1 files changed, 107 insertions, 19 deletions
diff --git a/www/js/DataModel.js b/www/js/DataModel.js index 3993ebbb..b5abe67f 100755 --- a/www/js/DataModel.js +++ b/www/js/DataModel.js @@ -514,33 +514,33 @@ angular.module('zmApp.controllers') //var d = $q.defer(); // if we are here, we should remove cache - localforage.removeItem("settings-temp-data"); + loginData = angular.copy(newLogin); serverGroupList[loginData.serverName] = angular.copy(loginData); var ct = CryptoJS.AES.encrypt(JSON.stringify(serverGroupList), zm.cipherKey).toString(); - return localforage.setItem("serverGroupList", ct) - .then(function () { + + //debug ("Crypto is: " + ct); + + localforage.setItem("serverGroupList", ct) + .then(function () { + debug ("saving serverGroupList worked"); return localforage.setItem("defaultServerName", loginData.serverName); - }) - .catch(function (err) { - log("localforage store error " + JSON.stringify(err)); + }) + .then (function () { + debug ("saving defaultServerName worked"); + return localforage.removeItem("settings-temp-data"); + }) + .then (function() { + debug ("removing settings-temp-data worked"); + }) + .catch(function (err) { + log("SetLogin localforage store error " + JSON.stringify(err)); }); - //console.log ("****serverLogin was encrypted to " + ct); - //$localstorage.setObject("serverGroupList", serverGroupList); - /* return localforage.setItem("serverGroupList", ct, function(err) - { - if (err) log("localforage store error " + JSON.stringify(err)); - }); - //$localstorage.set("defaultServerName", loginData.serverName); - return localforage.setItem("defaultServerName", loginData.serverName, function(err) - { - if (err) log("localforage store error " + JSON.stringify(err)); - });*/ - // return (d.promise); + } //credit: https://gist.github.com/alexey-bass/1115557 @@ -1507,7 +1507,10 @@ angular.module('zmApp.controllers') //localforage.setItem("isFirstUse", val, // function(err) {if (err) log ("localforage error, //storing isFirstUse: " + JSON.stringify(err));}); isFirstUse = val; - localforage.setItem("isFirstUse", val); + debug ("Setting isFirstUse to:"+val); + localforage.setItem("isFirstUse", val) + .then (function (succ) { debug ("Saved isFirstUse ok");}) + .catch (function (err) { debug ("Error Saving isFirstUse:" + JSON.stringify(err));}); //console.log (">>>>>>setting isFirstUse to " + val); }, @@ -2516,6 +2519,91 @@ angular.module('zmApp.controllers') return "(Unknown)"; }, + // tries to set up a DB + // set/get a value and if it fails + // goes back to localstorage + // needed for some old Android phones where index setting works, but actually fails + + configureStorageDB: function () { + + debug ("Inside configureStorageDB"); + var d = $q.defer(); + localforage.config({ + name: zm.dbName + + }); + + if ($rootScope.platformOS == 'ios') { + order = [window.cordovaSQLiteDriver._driver, + localforage.INDEXEDDB, + localforage.LOCALSTORAGE + ]; + } else { + // don't do SQL for Android + // large keys hang on some devices + // see https://github.com/litehelpers/Cordova-sqlite-storage/issues/533 + order = [ + localforage.INDEXEDDB, + localforage.LOCALSTORAGE, + ]; + } + + debug ("configureStorageDB: trying order:" + JSON.stringify(order)); + + localforage.defineDriver(window.cordovaSQLiteDriver).then(function () { + return localforage.setDriver( + // Try setting cordovaSQLiteDriver if available, + // for desktops, it will pick the next one + order + ); + }) + .then ( function (succ) { + log("configureStorageDB:localforage driver for storage:" + localforage.driver()); + debug ("configureStorageDB:Making sure this storage driver works..."); + return localforage.setItem('testPromiseKey', 'testPromiseValue'); + }) + .then (function (succ) { + return localforage.getItem('testPromiseKey'); + }) + .then (function (succ) { + if (succ != 'testPromiseValue') { + log ("configureStorageDB:this driver could not restore a test val, reverting to localstorage and hoping for the best..."); + return forceLocalStorage(); + } + else { + debug ("configureStorageDB:test get/set worked, this driver is ok..."); + d.resolve(true); + return d.promise; + } + }) + .catch (function (err) { + log ("configureStorageDB:this driver errored, reverting to localstorage and hoping for the best...: " + JSON.stringify(err)); + return forceLocalStorage(); + }); + + return d.promise; + + function forceLocalStorage() { + + // var d = $q.defer(); + localforage.setDriver (localforage.LOCALSTORAGE) + .then (function (succ) { + log ("configureStorageDB:localforage forced setting to localstorage returned a driver of: " + localforage.driver()); + d.resolve(true); + return d.promise; + }, + function (err) { + log ("*** configureStorageDB: Error setting localStorage too, zmNinja WILL NOT SAVE ***"); + log ("*** configureStorageDB: Dance, rejoice, keep re-configuring everytime you run ***"); + d.resolve(true); + return d.promise; + }); + return d.promise; + + } + + }, + getBaseURL: function (id) { var idnum = parseInt(id); for (var i = 0; i < monitors.length; i++) { |
