- (let ((from (mime-entity-fetch-field gnus-current-headers "from")))
- (when from
- (setq from (gnus-bbdb/extract-address-components
- (gnus-bbdb/decode-field-body from 'From))))
- (when (and (car (cdr from))
- (string-match (bbdb-user-mail-names)
- (car (cdr from))))
- ;; if logged-in user sent this, use recipients.
- (let ((to (mime-entity-fetch-field gnus-current-headers "to")))
- (when to
- (setq from
- (gnus-bbdb/extract-address-components
- (gnus-bbdb/decode-field-body to 'To))))))
- (when from
- (save-excursion
- (bbdb-annotate-message-sender from t
- (or (bbdb-invoke-hook-for-value
- bbdb/news-auto-create-p)
- offer-to-create)
- offer-to-create))))))
+ (let ((message-key
+ (intern (mail-header-id gnus-current-headers)))
+ record sender)
+ (or (and (setq record (bbdb-message-cache-lookup message-key))
+ (if (listp record)
+ (nth 1 record)
+ record))
+ (when (setq sender
+ (funcall gnus-bbdb/extract-message-sender-function))
+ (save-excursion
+ (setq record (bbdb-annotate-message-sender
+ sender t
+ (or (bbdb-invoke-hook-for-value
+ bbdb/news-auto-create-p)
+ offer-to-create)
+ offer-to-create)))
+ (when record
+ ;; XXX: BBDB 2.3x not only redefines
+ ;; `bbdb-encache-message' as a macro but also the inherent
+ ;; semantics of message caching functions is changed, so
+ ;; the following calls are much the same here.
+ (if (functionp 'bbdb-encache-message)
+ (car (bbdb-encache-message message-key (list record)))
+ (bbdb-encache-message message-key record))))))))