LP1901760 Improve SharedWorker non-support handling (AngJS)
authorBill Erickson <berickxx@gmail.com>
Mon, 4 Jan 2021 17:05:24 +0000 (12:05 -0500)
committerJason Stephenson <jason@sigio.com>
Fri, 22 Jan 2021 18:19:15 +0000 (13:19 -0500)
Force the SharedWorker code to run before org settings cache requests
are attempted so that we can tell before the lovefield request is made
wether or not a connection will be successfull.  In other words, we may
not know if cannotConnect is true yet, so force that logic to run first.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
Signed-off-by: Jason Boyer <JBoyer@equinoxinitiative.org>
Signed-off-by: Jason Stephenson <jason@sigio.com>
Signed-off-by: John Amundson <jamundson@cwmars.org>
Open-ILS/web/js/ui/default/staff/services/lovefield.js

index 0e7d2b3..4414c8e 100644 (file)
@@ -20,16 +20,19 @@ angular.module('egCoreMod')
         workerUrl: '/js/ui/default/staff/offline-db-worker.js'
     };
 
+    // Returns true if the connection was possible
     service.connectToWorker = function() {
-        if (service.worker) return;
+        if (service.worker) return true;
+        if (service.cannotConnect) return false;
 
         try {
             // relative path would be better...
+            throw Error('NOPE');
             service.worker = new SharedWorker(service.workerUrl);
         } catch (E) {
             console.warn('SharedWorker() not supported', E);
             service.cannotConnect = true;
-            return;
+            return false;
         }
 
         service.worker.onerror = function(err) {
@@ -61,6 +64,7 @@ angular.module('egCoreMod')
         });
 
         service.worker.port.start();
+        return true;
     }
 
     service.connectToSchemas = function() {
@@ -143,6 +147,8 @@ angular.module('egCoreMod')
     }
 
     service.isCacheGood = function (type) {
+        if (lf.isOffline || !service.connectToWorker()) return $q.when(true);
+
         return service.request({
             schema: 'cache',
             table: 'CacheDate',
@@ -241,7 +247,7 @@ angular.module('egCoreMod')
 
     service.setStatCatsCache = function (statcats) {
         if (lf.isOffline || !statcats || 
-            statcats.length === 0 || service.cannotConnect) {
+            statcats.length === 0 || !service.connectToWorker()) {
             return $q.when();
         }
 
@@ -258,7 +264,6 @@ angular.module('egCoreMod')
     }
 
     service.getStatCatsCache = function () {
-
         return service.request({
             schema: 'cache',
             table: 'StatCat',
@@ -292,7 +297,7 @@ angular.module('egCoreMod')
     }
 
     service.setSettingsCache = function (settings) {
-        if (lf.isOffline || service.cannotConnect) return $q.when();
+        if (lf.isOffline || !service.connectToWorker()) return $q.when();
 
         var rows = [];
         angular.forEach(settings, function (val, key) {
@@ -308,6 +313,7 @@ angular.module('egCoreMod')
     }
 
     service.getSettingsCache = function (settings) {
+        if (lf.isOffline || !service.connectToWorker()) return $q.when([]);
 
         var promise;
 
@@ -336,7 +342,7 @@ angular.module('egCoreMod')
     }
 
     service.destroySettingsCache = function () {
-        if (lf.isOffline || service.cannotConnect) return $q.when();
+        if (lf.isOffline || !service.connectToWorker()) return $q.when();
         return service.request({
             schema: 'cache',
             table: 'Setting',
@@ -345,7 +351,7 @@ angular.module('egCoreMod')
     }
 
     service.setListInOfflineCache = function (type, list) {
-        if (lf.isOffline || service.cannotConnect) return $q.when();
+        if (lf.isOffline || !service.connectToWorker()) return $q.when();
 
         return service.isCacheGood(type).then(function(good) {
             if (good) { return };  // already cached