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