Revert "LP#1718301 Offline db connections via promise" user/bshum/lp-1717777-load-all-PO-files
authorBen Shum <ben@evergreener.net>
Wed, 20 Sep 2017 23:16:30 +0000 (19:16 -0400)
committerBen Shum <ben@evergreener.net>
Wed, 20 Sep 2017 23:16:30 +0000 (19:16 -0400)
This reverts commit b87a437825a531a3e6977d1e0b17e48d8f41f74a.

Open-ILS/web/js/ui/default/staff/services/lovefield.js

index 0621911..a05e824 100644 (file)
@@ -31,6 +31,12 @@ osb.createTable('OfflineBlocks').
     addColumn('reason', lf.Type.STRING).
     addPrimaryKey(['barcode']);
 
+lf.connecting = true;
+osb.connect().then(function (db) {
+    lf.offlineDB = db;
+    lf.connecting = false;
+});
+
 /**
  * Core Service - egLovefield
  *
@@ -44,47 +50,31 @@ angular.module('egCoreMod')
     
     var service = {};
 
-    function connectOrGo() {
-
-        if (lf.offlineDB) { // offline DB connected
-            return $q.when();
+    function connectOrGo (resolver) {
+        if (lf.offlineDB) {
+            return resolver();
         }
 
-        if (service.cannotConnect) { // connection will never happen
-            return $q.reject();
-        }
+        // apparently, this might take a while...
+        if (lf.connecting) return $timeout(function() {
+                return connectOrGo(resolver);
+        });
 
-        if (service.connectPromise) { // connection in progress
-            return service.connectPromise;
-        }
+        console.log('egLovefield connecting to offline DB');
 
-        // start a new connection attempt
-        
-        var deferred = $q.defer();
-
-        console.debug('attempting offline DB connection');
-        osb.connect().then(
-            function(db) {
-                console.debug('successfully connected to offline DB');
-                service.connectPromise = null;
+        try {
+            return osb.connect().then(function (db) {
                 lf.offlineDB = db;
-                deferred.resolve();
-            },
-            function(err) {
-                // assumes that a single connection failure means
-                // a connection will never succeed.
-                service.cannotConnect = true;
-                console.error('Cannot connect to offline DB: ' + err);
-            }
-        );
-
-        service.connectPromise = deferred.promise;
-        return service.connectPromise;
+                return resolver();
+            });
+        } catch (err) {
+                alert('attempted reconnect failure: ' + err.toString());
+        }
     }
 
     service.isCacheGood = function (type) {
 
-        return connectOrGo().then(function() {
+        return connectOrGo(function() {
             var cacheDate = lf.offlineDB.getSchema().table('CacheDate');
 
             return lf.offlineDB.
@@ -105,7 +95,7 @@ angular.module('egCoreMod')
     }
 
     service.destroyPendingOfflineXacts = function () {
-        return connectOrGo().then(function() {
+        return connectOrGo(function() {
             var table = lf.offlineDB.getSchema().table('OfflineXact');
             return lf.offlineDB.
                 delete().
@@ -115,7 +105,7 @@ angular.module('egCoreMod')
     }
 
     service.havePendingOfflineXacts = function () {
-        return connectOrGo().then(function() {
+        return connectOrGo(function() {
             var table = lf.offlineDB.getSchema().table('OfflineXact');
             return lf.offlineDB.
                 select(table.reason).
@@ -128,7 +118,7 @@ angular.module('egCoreMod')
     }
 
     service.retrievePendingOfflineXacts = function () {
-        return connectOrGo().then(function() {
+        return connectOrGo(function() {
             var table = lf.offlineDB.getSchema().table('OfflineXact');
             return lf.offlineDB.
                 select(table.value).
@@ -141,7 +131,7 @@ angular.module('egCoreMod')
     }
 
     service.destroyOfflineBlocks = function () {
-        return connectOrGo().then(function() {
+        return connectOrGo(function() {
             var table = lf.offlineDB.getSchema().table('OfflineBlocks');
             return $q.when(
                 lf.offlineDB.
@@ -153,7 +143,7 @@ angular.module('egCoreMod')
     }
 
     service.addOfflineBlock = function (barcode, reason) {
-        return connectOrGo().then(function() {
+        return connectOrGo(function() {
             var table = lf.offlineDB.getSchema().table('OfflineBlocks');
             return $q.when(
                 lf.offlineDB.
@@ -167,7 +157,7 @@ angular.module('egCoreMod')
 
     // Returns a promise with true for blocked, false for not blocked
     service.testOfflineBlock = function (barcode) {
-        return connectOrGo().then(function() {
+        return connectOrGo(function() {
             var table = lf.offlineDB.getSchema().table('OfflineBlocks');
             return lf.offlineDB.
                 select(table.reason).
@@ -181,7 +171,7 @@ angular.module('egCoreMod')
     }
 
     service.addOfflineXact = function (obj) {
-        return connectOrGo().then(function() {
+        return connectOrGo(function() {
             var table = lf.offlineDB.getSchema().table('OfflineXact');
             return $q.when(
                 lf.offlineDB.
@@ -196,7 +186,7 @@ angular.module('egCoreMod')
     service.setStatCatsCache = function (statcats) {
         if (lf.isOffline) return $q.when();
 
-        return connectOrGo().then(function() {
+        return connectOrGo(function() {
             var table = lf.offlineDB.getSchema().table('StatCat');
             var rlist = [];
 
@@ -215,7 +205,7 @@ angular.module('egCoreMod')
     }
 
     service.getStatCatsCache = function () {
-        return connectOrGo().then(function() {
+        return connectOrGo(function() {
 
             var table = lf.offlineDB.getSchema().table('StatCat');
             var result = [];
@@ -253,7 +243,7 @@ angular.module('egCoreMod')
     service.setSettingsCache = function (settings) {
         if (lf.isOffline) return $q.when();
 
-        return connectOrGo().then(function() {
+        return connectOrGo(function() {
 
             var table = lf.offlineDB.getSchema().table('Setting');
             var rlist = [];
@@ -276,7 +266,7 @@ angular.module('egCoreMod')
     }
 
     service.getSettingsCache = function (settings) {
-        return connectOrGo().then(function() {
+        return connectOrGo(function() {
 
             var table = lf.offlineDB.getSchema().table('Setting');
 
@@ -301,7 +291,7 @@ angular.module('egCoreMod')
     service.setListInOfflineCache = function (type, list) {
         if (lf.isOffline) return $q.when();
 
-        return connectOrGo().then(function() {
+        return connectOrGo(function() {
 
             service.isCacheGood(type).then(function(good) {
                 if (!good) {
@@ -331,7 +321,7 @@ angular.module('egCoreMod')
     }
 
     service.getListFromOfflineCache = function(type) {
-        return connectOrGo().then(function() {
+        return connectOrGo(function() {
 
             var object = lf.offlineDB.getSchema().table('Object');