:type 'symbol
:group 'elmo)
+(defcustom elmo-msgdb-prefer-in-reply-to-for-parent nil
+ "*Non-nil to prefer In-Reply-To header for finding parent message on thread,
+rather than References header."
+ :type 'boolean
+ :group 'elmo)
+
(defvar modb-entity-default-cache-internal nil)
(defun elmo-message-entity-handler (&optional entity)
"Get modb entity handler instance which corresponds to the ENTITY."
(if (and entity
+ (car-safe entity)
+ (not (eq (car entity) t))
(not (stringp (car entity))))
(car entity)
(or modb-entity-default-cache-internal
extra field-body charset size)
(save-excursion
(setq entity (modb-legacy-make-message-entity args))
- (elmo-set-buffer-multibyte default-enable-multibyte-characters)
+ (set-buffer-multibyte default-enable-multibyte-characters)
(setq message-id (elmo-msgdb-get-message-id-from-buffer))
(and (setq charset (cdr (assoc "charset" (mime-read-Content-Type))))
(setq charset (intern-soft charset))
(setq default-mime-charset charset))
(setq references
- (or (elmo-msgdb-get-last-message-id
- (elmo-field-body "in-reply-to"))
- (elmo-msgdb-get-last-message-id
- (elmo-field-body "references")))
+ (if elmo-msgdb-prefer-in-reply-to-for-parent
+ (or (elmo-msgdb-get-last-message-id
+ (elmo-field-body "in-reply-to"))
+ (elmo-msgdb-get-last-message-id
+ (elmo-field-body "references")))
+ (or (elmo-msgdb-get-last-message-id
+ (elmo-field-body "references"))
+ (elmo-msgdb-get-last-message-id
+ (elmo-field-body "in-reply-to"))))
from (elmo-replace-in-string
(elmo-mime-string (or (elmo-field-body "from")
elmo-no-from))
(elmo-mime-string (or (elmo-field-body "subject")
elmo-no-subject))
"\t" " ")
- date (std11-unfold-string (elmo-field-body "date"))
+ date (elmo-unfold-field-body "date")
to (mapconcat 'identity (elmo-multiple-field-body "to") ",")
cc (mapconcat 'identity (elmo-multiple-field-body "cc") ","))
(unless (elmo-msgdb-message-entity-field handler entity 'size)
((handler modb-legacy-entity-handler) condition entity flags numbers)
(cond
((vectorp condition)
- (elmo-msgdb-match-condition-primitive condition entity flags numbers))
+ (elmo-msgdb-match-condition-primitive handler condition
+ entity flags numbers))
((eq (car condition) 'and)
(let ((lhs (elmo-msgdb-message-match-condition handler
(nth 1 condition)
entity flags numbers)))))))
;;
-(defun elmo-msgdb-match-condition-primitive (condition entity flags numbers)
+(defun elmo-msgdb-match-condition-primitive (handler
+ condition
+ entity
+ flags
+ numbers)
(catch 'unresolved
(let ((key (elmo-filter-key condition))
(case-fold-search t)
((string= key "last")
(setq result (<= (length (memq
(elmo-msgdb-message-entity-number
- (elmo-message-entity-handler entity)
- entity)
+ handler entity)
numbers))
(string-to-int (elmo-filter-value condition)))))
((string= key "first")
(length numbers)
(length (memq
(elmo-msgdb-message-entity-number
- (elmo-message-entity-handler entity)
- entity)
+ handler entity)
numbers)))
(string-to-int (elmo-filter-value condition)))))
((string= key "flag")
(setq result (string-match
(elmo-filter-value condition)
(elmo-msgdb-message-entity-field
- (elmo-message-entity-handler entity)
- entity 'from t))))
+ handler entity 'from t))))
((string= key "subject")
(setq result (string-match
(elmo-filter-value condition)
(elmo-msgdb-message-entity-field
- (elmo-message-entity-handler entity)
- entity 'subject t))))
+ handler entity 'subject t))))
((string= key "to")
(setq result (string-match
(elmo-filter-value condition)
(elmo-msgdb-message-entity-field
- (elmo-message-entity-handler entity)
- entity 'to))))
+ handler entity 'to))))
((string= key "cc")
(setq result (string-match
(elmo-filter-value condition)
(elmo-msgdb-message-entity-field
- (elmo-message-entity-handler entity)
- entity 'cc))))
+ handler entity 'cc))))
((or (string= key "since")
(string= key "before"))
(let ((field-date (elmo-date-make-sortable-string
(timezone-fix-time
(elmo-msgdb-message-entity-field
- (elmo-message-entity-handler entity)
- entity 'date)
+ handler entity 'date)
(current-time-zone) nil)))
(specified-date
(elmo-date-make-sortable-string
(string< specified-date field-date))
(string< field-date specified-date)))))
((member key elmo-msgdb-extra-fields)
- (let ((extval (elmo-msgdb-message-entity-field
- (elmo-message-entity-handler entity)
- entity (intern key))))
+ (let ((extval (elmo-msgdb-message-entity-field handler
+ entity
+ (intern key))))
(when (stringp extval)
(setq result (string-match
(elmo-filter-value condition)