(require 'elmo-util)
(require 'emu)
(require 'std11)
+(require 'mime)
;;; MSGDB interface.
(defun elmo-load-msgdb (path)
msgdb))
(defsubst elmo-msgdb-get-mark (msgdb number)
- "Get mark from MSGDB which corresponds to the message with NUMBER."
+ "Get mark string from MSGDB which corresponds to the message with NUMBER."
(cadr (elmo-get-hash-val (format "#%d" number)
(elmo-msgdb-get-mark-hashtb msgdb))))
(defsubst elmo-msgdb-set-mark (msgdb number mark)
- "Set MARK of the message with NUMBER in the MSGDB."
+ "Set MARK of the message with NUMBER in the MSGDB.
+if MARK is nil, mark is removed."
(elmo-msgdb-set-mark-alist
msgdb
(elmo-msgdb-mark-alist-set (elmo-msgdb-get-mark-alist msgdb)
(message "Sorting...done")
(list overview (nth 1 msgdb)(nth 2 msgdb))))
+(defun elmo-msgdb-make-entity (&rest args)
+ "Make an msgdb entity."
+ (cons (plist-get args :message-id)
+ (vector (plist-get args :number)
+ (plist-get args :references)
+ (plist-get args :from)
+ (plist-get args :subject)
+ (plist-get args :date)
+ (plist-get args :to)
+ (plist-get args :cc)
+ (plist-get args :size)
+ (plist-get args :extra))))
+
;;;
(defsubst elmo-msgdb-append-element (list element)
(if list
seen-list))
(defun elmo-msgdb-get-message-id-from-buffer ()
- (or (elmo-field-body "message-id")
+ (let ((msgid (elmo-field-body "message-id")))
+ (if msgid
+ (if (string-match "<\\(.+\\)>$" msgid)
+ msgid
+ (concat "<" msgid ">")) ; Invaild message-id.
;; no message-id, so put dummy msgid.
- (concat (timezone-make-date-sortable
- (elmo-field-body "date"))
+ (concat "<" (timezone-make-date-sortable
+ (elmo-field-body "date"))
(nth 1 (eword-extract-address-components
- (or (elmo-field-body "from") "nobody"))))))
+ (or (elmo-field-body "from") "nobody"))) ">"))))
(defsubst elmo-msgdb-create-overview-from-buffer (number &optional size time)
"Create overview entity from current buffer.
Header region is supposed to be narrowed."
(save-excursion
(let ((extras elmo-msgdb-extra-fields)
+ (default-mime-charset default-mime-charset)
message-id references from subject to cc date
- extra field-body)
+ extra field-body charset)
(elmo-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"))))
- (setq from (elmo-mime-string (elmo-delete-char
- ?\"
- (or
- (elmo-field-body "from")
- elmo-no-from))))
- (setq subject (elmo-mime-string (or (elmo-field-body "subject")
- elmo-no-subject)))
+ (setq from (elmo-replace-in-string
+ (elmo-mime-string (or (elmo-field-body "from")
+ elmo-no-from))
+ "\t" " ")
+ subject (elmo-replace-in-string
+ (elmo-mime-string (or (elmo-field-body "subject")
+ elmo-no-subject))
+ "\t" " "))
(setq date (or (elmo-field-body "date") time))
(setq to (mapconcat 'identity (elmo-multiple-field-body "to") ","))
(setq cc (mapconcat 'identity (elmo-multiple-field-body "cc") ","))
elmo-msgdb-location-filename
dir) alist))
+(put 'elmo-msgdb-do-each-entity 'lisp-indent-function '1)
+(def-edebug-spec elmo-msgdb-do-each-entity
+ ((symbolp form &rest form) &rest form))
+(defmacro elmo-msgdb-do-each-entity (spec &rest form)
+ `(dolist (,(car spec) (elmo-msgdb-get-overview ,(car (cdr spec))))
+ ,@form))
+
(require 'product)
(product-provide (provide 'elmo-msgdb) (require 'elmo-version))