:type '(string :tag "Mark")
:group 'elmo)
-;; Not implemented yet.
(defcustom elmo-msgdb-answered-cached-mark "&"
"Mark for answered and cached message."
:type '(string :tag "Mark")
:type '(string :tag "Mark")
:group 'elmo)
-(defcustom elmo-msgdb-important-mark"$"
+(defcustom elmo-msgdb-important-mark "$"
"Mark for important message."
:type '(string :tag "Mark")
:group 'elmo)
;; elmo-flag-table-get
;; elmo-flag-table-save
-;; elmo-msgdb-append-entity
-;; msgdb entity flag-table
+;; elmo-msgdb-append-entity MSGDB ENTITY MARK-OR-FLAGS
;; ENTITY elmo-msgdb-make-entity ARGS
;; VALUE elmo-msgdb-entity-field ENTITY
(elmo-msgdb-overview-load msgdb-or-path)
(elmo-msgdb-get-overview msgdb-or-path))))
+(defsubst elmo-msgdb-mark-to-flags (mark)
+ (append
+ (and (string= mark elmo-msgdb-new-mark)
+ '(new))
+ (and (string= mark elmo-msgdb-important-mark)
+ '(important))
+ (and (member mark (elmo-msgdb-unread-marks))
+ '(unread))
+ (and (member mark (elmo-msgdb-answered-marks))
+ '(answered))
+ (and (not (member mark (elmo-msgdb-uncached-marks)))
+ '(cached))))
+
+(defsubst elmo-msgdb-flags-to-mark (flags cached use-cache)
+ (cond ((memq 'new flags)
+ elmo-msgdb-new-mark)
+ ((memq 'important flags)
+ elmo-msgdb-important-mark)
+ ((memq 'answered flags)
+ (if cached
+ elmo-msgdb-answered-cached-mark
+ elmo-msgdb-answered-uncached-mark))
+ ((memq 'unread flags)
+ (if cached
+ elmo-msgdb-unread-cached-mark
+ elmo-msgdb-unread-uncached-mark))
+ (t
+ (if (or cached (not use-cache))
+ nil
+ elmo-msgdb-read-uncached-mark))))
+
(defsubst elmo-msgdb-get-mark (msgdb number)
"Get mark string from MSGDB which corresponds to the message with NUMBER."
(cadr (elmo-get-hash-val (format "#%d" number)
elmo-msgdb-unread-uncached-mark
elmo-msgdb-read-uncached-mark))))
+(defun elmo-msgdb-append-entity (msgdb entity &optional mark)
+ (when entity
+ (let ((number (elmo-msgdb-overview-entity-get-number entity))
+ (message-id (elmo-msgdb-overview-entity-get-id entity)))
+ (elmo-msgdb-set-overview
+ msgdb
+ (nconc (elmo-msgdb-get-overview msgdb)
+ (list entity)))
+ (elmo-msgdb-set-number-alist
+ msgdb
+ (nconc (elmo-msgdb-get-number-alist msgdb)
+ (list (cons number message-id))))
+ (when mark
+ (elmo-msgdb-set-mark-alist
+ msgdb
+ (nconc (elmo-msgdb-get-mark-alist msgdb)
+ (list (list number mark)))))
+ (elmo-msgdb-make-index
+ msgdb
+ (list entity)
+ (list (list number mark))))))
+
(defsubst elmo-msgdb-get-number (msgdb message-id)
"Get number of the message which corrensponds to MESSAGE-ID from MSGDB."
(elmo-msgdb-overview-entity-get-number
(elmo-msgdb-overview-get-entity
number msgdb)))))
-(defsubst elmo-msgdb-append (msgdb msgdb-append)
- (list
- (nconc (car msgdb) (car msgdb-append))
- (nconc (cadr msgdb) (cadr msgdb-append))
- (nconc (caddr msgdb) (caddr msgdb-append))
- (elmo-msgdb-make-index-return
- msgdb
- (elmo-msgdb-get-overview msgdb-append)
- (elmo-msgdb-get-mark-alist msgdb-append))
- (nth 4 msgdb)))
+(defun elmo-msgdb-append (msgdb msgdb-append)
+ "Return a list of messages which have duplicated message-id."
+ (let (duplicates)
+ (elmo-msgdb-set-overview
+ msgdb
+ (nconc (elmo-msgdb-get-overview msgdb)
+ (elmo-msgdb-get-overview msgdb-append)))
+ (elmo-msgdb-set-number-alist
+ msgdb
+ (nconc (elmo-msgdb-get-number-alist msgdb)
+ (elmo-msgdb-get-number-alist msgdb-append)))
+ (elmo-msgdb-set-mark-alist
+ msgdb
+ (nconc (elmo-msgdb-get-mark-alist msgdb)
+ (elmo-msgdb-get-mark-alist msgdb-append)))
+ (setq duplicates (elmo-msgdb-make-index
+ msgdb
+ (elmo-msgdb-get-overview msgdb-append)
+ (elmo-msgdb-get-mark-alist msgdb-append)))
+ (elmo-msgdb-set-path
+ msgdb
+ (or (elmo-msgdb-get-path msgdb)
+ (elmo-msgdb-get-path msgdb-append)))
+ duplicates))
(defun elmo-msgdb-merge (folder msgdb-merge)
"Return a list of messages which have duplicated message-id."
(defsubst elmo-msgdb-clear (&optional msgdb)
(if msgdb
- (list
- (setcar msgdb nil)
- (setcar (cdr msgdb) nil)
- (setcar (cddr msgdb) nil)
- (setcar (nthcdr 3 msgdb) nil)
- (setcar (nthcdr 4 msgdb) nil))
- (list nil nil nil nil nil)))
+ (progn
+ (elmo-msgdb-set-overview msgdb nil)
+ (elmo-msgdb-set-number-alist msgdb nil)
+ (elmo-msgdb-set-mark-alist msgdb nil)
+ (elmo-msgdb-set-index msgdb nil)
+ msgdb)
+ (elmo-make-msgdb)))
(defun elmo-msgdb-delete-msgs (msgdb msgs)
"Delete MSGS from MSGDB
;;
(when index (elmo-msgdb-clear-index msgdb ov-entity))
(setq msgs (cdr msgs)))
- (setcar msgdb overview)
- (setcar (cdr msgdb) number-alist)
- (setcar (cddr msgdb) mark-alist)
- (setcar (nthcdr 3 msgdb) index)
+ (elmo-msgdb-set-overview msgdb overview)
+ (elmo-msgdb-set-number-alist msgdb number-alist)
+ (elmo-msgdb-set-mark-alist msgdb mark-alist)
+ (elmo-msgdb-set-index msgdb index)
t)) ;return value
(defun elmo-msgdb-sort-by-date (msgdb)
(message "Sorting...")
(let ((overview (elmo-msgdb-get-overview msgdb)))
- (setq overview (elmo-msgdb-overview-sort-by-date overview))
+ (elmo-msgdb-set-overview
+ msgdb
+ (elmo-msgdb-overview-sort-by-date overview))
(message "Sorting...done")
- (list overview (nth 1 msgdb)(nth 2 msgdb))))
+ msgdb))
;;;
(defsubst elmo-msgdb-append-element (list element)
(references (aref (cdr entity) 1))
(size (aref (cdr entity) 7))
(t (cdr (assoc (symbol-name field) (aref (cdr entity) 8)))))))
- (if decode
+ (if (and decode (memq field '(from subject)))
(elmo-msgdb-get-decoded-cache field-value)
field-value))))