From 53c7d08dfd9a9ab4b062fd9b53c27880f3083422 Mon Sep 17 00:00:00 2001 From: Ben Shum Date: Wed, 20 Sep 2017 19:16:30 -0400 Subject: [PATCH] Revert "LP#1718301 Offline db connections via promise" This reverts commit b87a437825a531a3e6977d1e0b17e48d8f41f74a. --- .../web/js/ui/default/staff/services/lovefield.js | 80 ++++++++++------------ 1 file changed, 35 insertions(+), 45 deletions(-) diff --git a/Open-ILS/web/js/ui/default/staff/services/lovefield.js b/Open-ILS/web/js/ui/default/staff/services/lovefield.js index 0621911648..a05e824d88 100644 --- a/Open-ILS/web/js/ui/default/staff/services/lovefield.js +++ b/Open-ILS/web/js/ui/default/staff/services/lovefield.js @@ -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'); -- 2.11.0