From 457d7f65aeba76f7deb4581e8f3e1930aad4f592 Mon Sep 17 00:00:00 2001
From: Bill Erickson <berickxx@gmail.com>
Date: Tue, 7 Aug 2018 12:10:17 -0400
Subject: [PATCH] LP#1768947 Disable offline download button, improve logging

Once the offline block list download button is clicked, it's disabled to
prevent any possibility of double-clicks.  The shared worker also
reports a more meaningful error in case a double-click sneaks past.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
---
 Open-ILS/src/templates/staff/offline-interface.tt2    | 1 +
 Open-ILS/web/js/ui/default/staff/offline-db-worker.js | 9 +++++++--
 Open-ILS/web/js/ui/default/staff/offline.js           | 7 ++++++-
 3 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/Open-ILS/src/templates/staff/offline-interface.tt2 b/Open-ILS/src/templates/staff/offline-interface.tt2
index 16424ce54c..fafc74e12b 100644
--- a/Open-ILS/src/templates/staff/offline-interface.tt2
+++ b/Open-ILS/src/templates/staff/offline-interface.tt2
@@ -35,6 +35,7 @@
         </button>
         <button
           class="btn btn-default"
+          ng-disabled="buildingBlockList"
           ng-if="logged_in"
           ng-click="downloadBlockList()">
             [% l('Download block list') %]
diff --git a/Open-ILS/web/js/ui/default/staff/offline-db-worker.js b/Open-ILS/web/js/ui/default/staff/offline-db-worker.js
index 6c2e1ad61c..32399001e7 100644
--- a/Open-ILS/web/js/ui/default/staff/offline-db-worker.js
+++ b/Open-ILS/web/js/ui/default/staff/offline-db-worker.js
@@ -207,7 +207,11 @@ var buildingBlockList = false;
 // Fetches the offline block list and rebuilds the offline blocks
 // table from the new data.
 function populateBlockList(authtoken) {
-    if (buildingBlockList) return;
+
+    if (buildingBlockList) {
+        return Promise.reject('Block list download already in progress');
+    }
+
     buildingBlockList = true;
 
     var url = '/standalone/list.txt?ses=' + 
@@ -234,6 +238,7 @@ function populateBlockList(authtoken) {
                         }
                     );
                 } else {
+                    buildingBlockList = false;
                     reject('Error fetching offline block list');
                 }
             }
@@ -300,7 +305,7 @@ function insertOfflineBlocks(lines) {
 function insertOfflineChunks(chunks, offset, resolve, reject) {
     var chunk = chunks[offset];
     if (!chunk || chunk.length === 0) {
-        console.debug('Block list successfully stored');
+        console.debug('Block list store completed');
         return resolve();
     }
 
diff --git a/Open-ILS/web/js/ui/default/staff/offline.js b/Open-ILS/web/js/ui/default/staff/offline.js
index 0e990a1cc2..7ab361f34b 100644
--- a/Open-ILS/web/js/ui/default/staff/offline.js
+++ b/Open-ILS/web/js/ui/default/staff/offline.js
@@ -393,7 +393,9 @@ function($routeProvider , $locationProvider , $compileProvider) {
             } 
         });
 
+        $scope.buildingBlockList = false;
         $scope.downloadBlockList = function () {
+            $scope.buildingBlockList = true;
             egProgressDialog.open();
             egLovefield.populateBlockList().then(
                 function(){
@@ -403,7 +405,10 @@ function($routeProvider , $locationProvider , $compileProvider) {
                     ngToast.warning(egCore.strings.OFFLINE_BLOCKLIST_FAIL);
                     egCore.audio.play('warning.offline.blocklist_fail');
                 }
-            )['finally'](egProgressDialog.close);
+            )['finally'](function() {
+                $scope.buildingBlockList = false;
+                egProgressDialog.close();
+            });
         }
 
         $scope.createOfflineXactBlob = function () {
-- 
2.11.0