X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-msgdb.el;h=4ea7e1039513b8b2f345676bfcb088d389aa7858;hb=5a293ad4874a8e65fd5f5ce876eb0813df473219;hp=6e7efb500c23fe91743dcf64b93cf41db68c571b;hpb=9c8f2ed92f4569d80ddb6de59a82cc89b49329b4;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-msgdb.el b/elmo/elmo-msgdb.el index 6e7efb5..4ea7e10 100644 --- a/elmo/elmo-msgdb.el +++ b/elmo/elmo-msgdb.el @@ -58,7 +58,6 @@ :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") @@ -69,7 +68,7 @@ :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) @@ -100,8 +99,7 @@ ;; 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 @@ -190,6 +188,37 @@ If argument is a string, use it as a path to load message entities." (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) @@ -367,6 +396,28 @@ FLAG is a symbol which is one of the following: 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 @@ -394,16 +445,30 @@ FLAG is a symbol which is one of the following: (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." @@ -436,13 +501,13 @@ FLAG is a symbol which is one of the following: (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 @@ -466,18 +531,20 @@ content of MSGDB is changed." ;; (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) @@ -1017,7 +1084,7 @@ Return CONDITION itself if no entity exists in msgdb." (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))))