From 520c4b7fcbb00c38b4597c32aeaab479fde6fc40 Mon Sep 17 00:00:00 2001
From: Christoph Reiter <reiter.christoph@gmail.com>
Date: Tue, 12 Jan 2021 15:20:33 +0100
Subject: [PATCH] placment warning: refactor

Now that we check every file on start we can just compute the value
there and re-use it for future checks.
---
 src/dbp-official-signature-pdf-upload.js  | 48 +++++++++++------------
 src/dbp-qualified-signature-pdf-upload.js | 48 +++++++++++------------
 2 files changed, 44 insertions(+), 52 deletions(-)

diff --git a/src/dbp-official-signature-pdf-upload.js b/src/dbp-official-signature-pdf-upload.js
index 481e799..679aaf4 100644
--- a/src/dbp-official-signature-pdf-upload.js
+++ b/src/dbp-official-signature-pdf-upload.js
@@ -44,7 +44,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
         this.withSigBlock = false;
         this.queuedFilesSignaturePlacements = [];
         this.queuedFilesPlacementModes = [];
-        this.queuedFilesMissingPlacement = new Map();
+        this.queuedFilesNeedsPlacement = new Map();
         this.currentPreviewQueueKey = '';
     }
 
@@ -90,15 +90,12 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
         setInterval(() => { this.handleQueuedFiles(); }, 1000);
     }
 
-    async _updateMissingPlacementStatus(id) {
+    async _updateNeedsPlacementStatus(id) {
         let file = this.queuedFiles[id];
-        let isManual = this.queuedFilesPlacementModes[id] === 'manual';
-        this.queuedFilesMissingPlacement.delete(id);
-        if (!isManual) {
-            let sigCount = await getPDFSignatureCount(file);
-            if (sigCount > 0)
-                this.queuedFilesMissingPlacement.set(id, true);
-        }
+        let sigCount = await getPDFSignatureCount(file);
+        this.queuedFilesNeedsPlacement.delete(id);
+        if (sigCount > 0)
+            this.queuedFilesNeedsPlacement.set(id, true);
     }
 
     /**
@@ -118,20 +115,18 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
         this.signaturePlacementInProgress = false;
 
         // Validate that all PDFs with a signature have manual placement
-        this.queuedFilesMissingPlacement.clear();
         for (const key of Object.keys(this.queuedFiles)) {
-            await this._updateMissingPlacementStatus(key);
-        }
-
-        // Some have a signature but are not "manual", stop everything
-        if (this.queuedFilesMissingPlacement.size) {
-            notify({
-                "body": i18n.t('error-manual-positioning-missing'),
-                "type": "danger",
-            });
-            this.signingProcessEnabled = false;
-            this.signingProcessActive = false;
-            return;
+            const isManual = this.queuedFilesPlacementModes[key] === 'manual';
+            if (this.queuedFilesNeedsPlacement.get(key) && !isManual) {
+                // Some have a signature but are not "manual", stop everything
+                notify({
+                    "body": i18n.t('error-manual-positioning-missing'),
+                    "type": "danger",
+                });
+                this.signingProcessEnabled = false;
+                this.signingProcessActive = false;
+                return;
+            }
         }
 
         // take the file off the queue
@@ -171,7 +166,6 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
         let key = this.currentPreviewQueueKey;
         this.queuedFilesSignaturePlacements[key] = placement;
         this.queuedFilesPlacementModes[key] = placementMode;
-        this.queuedFilesMissingPlacement.delete(key);
         this.signaturePlacementInProgress = false;
     }
 
@@ -197,6 +191,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
         } else if (this.currentPreviewQueueKey === key) {
             this.signaturePlacementInProgress = false;
         }
+        this.requestUpdate();
     }
 
     /**
@@ -245,7 +240,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
 
     async queueFile(file) {
         let id = await super.queueFile(file);
-        await this._updateMissingPlacementStatus(id);
+        await this._updateNeedsPlacementStatus(id);
         this.requestUpdate();
         return id;
     }
@@ -378,7 +373,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
     clearQueuedFiles() {
         this.queuedFilesSignaturePlacements = [];
         this.queuedFilesPlacementModes = [];
-        this.queuedFilesMissingPlacement.clear();
+        this.queuedFilesNeedsPlacement.clear();
         super.clearQueuedFiles();
     }
 
@@ -654,7 +649,8 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem
 
         ids.forEach((id) => {
             const file = this.queuedFiles[id];
-            const placementMissing = this.queuedFilesMissingPlacement.get(id);
+            const isManual = this.queuedFilesPlacementModes[id] === 'manual';
+            const placementMissing = this.queuedFilesNeedsPlacement.get(id) && !isManual;
 
             results.push(html`
                 <div class="file-block">
diff --git a/src/dbp-qualified-signature-pdf-upload.js b/src/dbp-qualified-signature-pdf-upload.js
index 31a613a..852d4a4 100644
--- a/src/dbp-qualified-signature-pdf-upload.js
+++ b/src/dbp-qualified-signature-pdf-upload.js
@@ -45,7 +45,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle
         this.withSigBlock = false;
         this.queuedFilesSignaturePlacements = [];
         this.queuedFilesPlacementModes = [];
-        this.queuedFilesMissingPlacement = new Map();
+        this.queuedFilesNeedsPlacement = new Map();
         this.currentPreviewQueueKey = '';
 
         this._onReceiveIframeMessage = this.onReceiveIframeMessage.bind(this);
@@ -111,15 +111,12 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle
         super.disconnectedCallback();
     }
 
-    async _updateMissingPlacementStatus(id) {
+    async _updateNeedsPlacementStatus(id) {
         let file = this.queuedFiles[id];
-        let isManual = this.queuedFilesPlacementModes[id] === 'manual';
-        this.queuedFilesMissingPlacement.delete(id);
-        if (!isManual) {
-            let sigCount = await getPDFSignatureCount(file);
-            if (sigCount > 0)
-                this.queuedFilesMissingPlacement.set(id, true);
-        }
+        let sigCount = await getPDFSignatureCount(file);
+        this.queuedFilesNeedsPlacement.delete(id);
+        if (sigCount > 0)
+            this.queuedFilesNeedsPlacement.set(id, true);
     }
 
     /**
@@ -139,20 +136,18 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle
         this.signaturePlacementInProgress = false;
 
         // Validate that all PDFs with a signature have manual placement
-        this.queuedFilesMissingPlacement.clear();
         for (const key of Object.keys(this.queuedFiles)) {
-            await this._updateMissingPlacementStatus(key);
-        }
-
-        // Some have a signature but are not "manual", stop everything
-        if (this.queuedFilesMissingPlacement.size) {
-            notify({
-                "body": i18n.t('error-manual-positioning-missing'),
-                "type": "danger",
-            });
-            this.signingProcessEnabled = false;
-            this.signingProcessActive = false;
-            return;
+            const isManual = this.queuedFilesPlacementModes[key] === 'manual';
+            if (this.queuedFilesNeedsPlacement.get(key) && !isManual) {
+                // Some have a signature but are not "manual", stop everything
+                notify({
+                    "body": i18n.t('error-manual-positioning-missing'),
+                    "type": "danger",
+                });
+                this.signingProcessEnabled = false;
+                this.signingProcessActive = false;
+                return;
+            }
         }
 
         // take the file off the queue
@@ -190,7 +185,6 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle
         let key = this.currentPreviewQueueKey;
         this.queuedFilesSignaturePlacements[key] = placement;
         this.queuedFilesPlacementModes[key] = placementMode;
-        this.queuedFilesMissingPlacement.delete(key);
         this.signaturePlacementInProgress = false;
     }
 
@@ -216,6 +210,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle
         } else if (this.currentPreviewQueueKey === key) {
             this.signaturePlacementInProgress = false;
         }
+        this.requestUpdate();
     }
 
     /**
@@ -366,7 +361,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle
 
     async queueFile(file) {
         let id = await super.queueFile(file);
-        await this._updateMissingPlacementStatus(id);
+        await this._updateNeedsPlacementStatus(id);
         this.requestUpdate();
         return id;
     }
@@ -500,7 +495,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle
     clearQueuedFiles() {
         this.queuedFilesSignaturePlacements = [];
         this.queuedFilesPlacementModes = [];
-        this.queuedFilesMissingPlacement.clear();
+        this.queuedFilesNeedsPlacement.clear();
         super.clearQueuedFiles();
     }
 
@@ -794,7 +789,8 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle
 
         ids.forEach((id) => {
             const file = this.queuedFiles[id];
-            const placementMissing = this.queuedFilesMissingPlacement.get(id);
+            const isManual = this.queuedFilesPlacementModes[id] === 'manual';
+            const placementMissing = this.queuedFilesNeedsPlacement.get(id) && !isManual;
 
             results.push(html`
                 <div class="file-block">
-- 
GitLab