branch: elpa/jabber
commit dda3eccea41a0d78c0cbc1dacbcd4dcc3a97d6b2
Author: Thanos Apollo <[email protected]>
Commit: Thanos Apollo <[email protected]>

    pep: Fix duplicate handler registration and OpenPGP key refetch
    
    * PubSub node handlers used push, which accumulated duplicates on
      repeated loads.
    * Replace with setf alist-get for idempotent registration.
    * Also skip OpenPGP key fetch when the key is already in the local GPG
      keyring.
---
 lisp/jabber-bookmarks.el |  6 +++---
 lisp/jabber-omemo.el     |  6 +++---
 lisp/jabber-openpgp.el   | 17 +++++++++++------
 3 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/lisp/jabber-bookmarks.el b/lisp/jabber-bookmarks.el
index ae60a9077f..a68d32027f 100644
--- a/lisp/jabber-bookmarks.el
+++ b/lisp/jabber-bookmarks.el
@@ -221,9 +221,9 @@ Legacy accounts ignore these events."
            (jabber-bookmarks2--maybe-leave jc jid)))))))
 
 (with-eval-after-load "jabber-pubsub"
-  (push (cons jabber-bookmarks2-xmlns
-              #'jabber-bookmarks2--handle-event)
-        jabber-pubsub-node-handlers))
+  (setf (alist-get jabber-bookmarks2-xmlns jabber-pubsub-node-handlers
+                   nil nil #'equal)
+        #'jabber-bookmarks2--handle-event))
 
 ;;; Fetch bookmarks
 
diff --git a/lisp/jabber-omemo.el b/lisp/jabber-omemo.el
index 424e83742d..c69bc0c07c 100644
--- a/lisp/jabber-omemo.el
+++ b/lisp/jabber-omemo.el
@@ -1313,9 +1313,9 @@ Returns non-nil if handled, nil to fall through to 
plaintext."
 (jabber-disco-advertise-feature (concat jabber-omemo-devicelist-node 
"+notify"))
 
 (with-eval-after-load "jabber-pubsub"
-  (push (cons jabber-omemo-devicelist-node
-              #'jabber-omemo--handle-device-list)
-        jabber-pubsub-node-handlers))
+  (setf (alist-get jabber-omemo-devicelist-node jabber-pubsub-node-handlers
+                   nil nil #'equal)
+        #'jabber-omemo--handle-device-list))
 
 ;;;###autoload
 (with-eval-after-load "jabber-core"
diff --git a/lisp/jabber-openpgp.el b/lisp/jabber-openpgp.el
index 3740107664..6283ff5773 100644
--- a/lisp/jabber-openpgp.el
+++ b/lisp/jabber-openpgp.el
@@ -463,8 +463,13 @@ local GPG keyring."
          (fingerprint (and meta
                            (jabber-xml-get-attribute meta 'v4-fingerprint)))
          (jid (jabber-jid-user from)))
-    (if (null fingerprint)
-        (message "OpenPGP: key update from %s but no fingerprint in metadata" 
jid)
+    (cond
+     ((null fingerprint)
+      (message "OpenPGP: key update from %s but no fingerprint in metadata" 
jid))
+     ;; Skip fetch if we already have this key locally.
+     ((car (epg-list-keys (epg-make-context 'OpenPGP) fingerprint))
+      nil)
+     (t
       (message "OpenPGP: %s updated key %s, fetching..." jid fingerprint)
       (let ((node (concat jabber-openpgp-pubkeys-node ":" fingerprint)))
         (jabber-pubsub-request
@@ -478,12 +483,12 @@ local GPG keyring."
                 (message "OpenPGP: failed to import key for %s" jid)))))
          (lambda (_jc _xml-data _closure)
            (message "OpenPGP: failed to fetch key %s for %s"
-                    fingerprint jid)))))))
+                    fingerprint jid))))))))
 
 (with-eval-after-load "jabber-pubsub"
-  (push (cons jabber-openpgp-pubkeys-node
-              #'jabber-openpgp--handle-keys-event)
-        jabber-pubsub-node-handlers))
+  (setf (alist-get jabber-openpgp-pubkeys-node jabber-pubsub-node-handlers
+                   nil nil #'equal)
+        #'jabber-openpgp--handle-keys-event))
 
 (jabber-chat-register-decrypt-handler
  'openpgp

Reply via email to