LP#1750894 Settings migration function
authorBill Erickson <berickxx@gmail.com>
Tue, 22 May 2018 17:31:34 +0000 (13:31 -0400)
committerBill Erickson <berickxx@gmail.com>
Tue, 29 May 2018 14:13:36 +0000 (10:13 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/web/js/ui/default/staff/services/hatch.js

index db08feb..973f145 100644 (file)
@@ -368,6 +368,76 @@ angular.module('egCoreMod')
         });
     }
 
+    service.migrateServerSettings = function() {
+
+        if (!service.auth) service.auth = $injector.get('egAuth');
+        if (!service.auth.token()) return $q.reject('no authtoken');
+
+        var deferred = $q.defer();
+        var settings = service.serverSettings.slice(0); // clone
+
+        function migrateNext(key) {
+            if (!key) {
+                return deferred.resolve();
+            }
+
+            service.migrateOneServerSetting(key).then(
+                function() {
+                    deferred.notify('migrated ' + key);
+                    migrateNext(settings.shift());
+                },
+                function() {
+                    deferred.reject(
+                        'Something failed during settings migration');
+                }
+            );
+
+        }
+
+        return deferred.promise;
+    }
+
+    service.migrateOneServerSetting = function(key) {
+        console.log('migrating server setting ' + key);
+        var deferred = $q.defer();
+
+        function remove(key) {
+            return service.useSettings() ? 
+                service.removeRemoteItem(key) :
+                $q.when(service.removeLocalItem(key));
+        }
+
+        var prom = service.useSettings() ? 
+            service.getRemoteItem(key) :
+            $q.when(service.getLocalItem(key));
+
+        prom.then(function(value) {
+
+            if (value === undefined || value === null) {
+                remove(key); // for good measure.
+                return deferred.resolve();
+            }
+
+            service.setServerItem(key, value).then(
+                function() {
+                    console.debug(
+                        'setting ' + key + ' successfully stored on server');
+
+                    remove(key).then(function() {
+                        console.debug(
+                            'setting ' + key + ' removed from local storage');
+                        deferred.resolve();
+                    });
+                },
+                function() {
+                    deferred.reject('applying server setting ' + key);
+                }
+            );
+        })
+
+        return deferred.promise;
+    }
+
     service.getServerItemBatch = function(keys) {
         // no cache checking for now.  assumes batch mode is only
         // called once on page load.  maybe add cache checking later.