From 3c1188f60b2fa5804cbbf7086ba3660026dc5296 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Mon, 4 Jan 2021 12:05:24 -0500 Subject: [PATCH] LP1901760 Improve SharedWorker non-support handling (AngJS) 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 Signed-off-by: Terran McCanna Signed-off-by: Jason Boyer Signed-off-by: Jason Stephenson Signed-off-by: John Amundson --- .../js/ui/default/staff/services/lovefield.js | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 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 0e7d2b3804..4414c8e2d8 100644 --- a/Open-ILS/web/js/ui/default/staff/services/lovefield.js +++ b/Open-ILS/web/js/ui/default/staff/services/lovefield.js @@ -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 -- 2.43.2