X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Fmodb-legacy.el;h=4022ad2c3c895182c5fff30e6dc06356a7c7226e;hb=e2aea74a5cc8c8cd177a7597808e7697d8db591f;hp=bbd7a21af70635efa5f06c4c69a22ffdd936a529;hpb=e8d1478c4ac76dc9acd295a6c752165e033f8d1c;p=elisp%2Fwanderlust.git diff --git a/elmo/modb-legacy.el b/elmo/modb-legacy.el index bbd7a21..4022ad2 100644 --- a/elmo/modb-legacy.el +++ b/elmo/modb-legacy.el @@ -104,90 +104,12 @@ ;;; ;; Internal use only (obsolete interface) ;; -(defsubst elmo-msgdb-overview-entity-get-id (entity) +(defsubst elmo-msgdb-overview-entity-get-id-internal (entity) (and entity (car entity))) -(defsubst elmo-msgdb-overview-entity-get-number (entity) +(defsubst elmo-msgdb-overview-entity-get-number-internal (entity) (and entity (aref (cdr entity) 0))) -(defsubst elmo-msgdb-overview-entity-set-number (entity number) - (and entity (aset (cdr entity) 0 number)) - entity) - -(defsubst elmo-msgdb-overview-entity-get-references (entity) - (and entity (aref (cdr entity) 1))) - -(defsubst elmo-msgdb-overview-entity-set-references (entity references) - (and entity (aset (cdr entity) 1 references)) - entity) - -(defsubst elmo-msgdb-overview-entity-get-from-no-decode (entity) - (and entity (aref (cdr entity) 2))) - -(defsubst elmo-msgdb-overview-entity-get-from (entity) - (and entity - (aref (cdr entity) 2) - (elmo-msgdb-get-decoded-cache (aref (cdr entity) 2)))) - -(defsubst elmo-msgdb-overview-entity-set-from (entity from) - (and entity (aset (cdr entity) 2 from)) - entity) - -(defsubst elmo-msgdb-overview-entity-get-subject (entity) - (and entity - (aref (cdr entity) 3) - (elmo-msgdb-get-decoded-cache (aref (cdr entity) 3)))) - -(defsubst elmo-msgdb-overview-entity-get-subject-no-decode (entity) - (and entity (aref (cdr entity) 3))) - -(defsubst elmo-msgdb-overview-entity-set-subject (entity subject) - (and entity (aset (cdr entity) 3 subject)) - entity) - -(defsubst elmo-msgdb-overview-entity-get-date (entity) - (and entity (aref (cdr entity) 4))) - -(defsubst elmo-msgdb-overview-entity-set-date (entity date) - (and entity (aset (cdr entity) 4 date)) - entity) - -(defsubst elmo-msgdb-overview-entity-get-to (entity) - (and entity (aref (cdr entity) 5))) - -(defsubst elmo-msgdb-overview-entity-get-cc (entity) - (and entity (aref (cdr entity) 6))) - -(defsubst elmo-msgdb-overview-entity-get-size (entity) - (and entity (aref (cdr entity) 7))) - -(defsubst elmo-msgdb-overview-entity-set-size (entity size) - (and entity (aset (cdr entity) 7 size)) - entity) - -(defsubst elmo-msgdb-overview-entity-get-extra (entity) - (and entity (aref (cdr entity) 8))) - -(defsubst elmo-msgdb-overview-entity-set-extra (entity extra) - (and entity (aset (cdr entity) 8 extra)) - entity) - -(defsubst elmo-msgdb-overview-entity-get-extra-field (entity field-name) - (let ((field-name (downcase field-name)) - (extra (and entity (aref (cdr entity) 8)))) - (and extra - (cdr (assoc field-name extra))))) - -(defsubst elmo-msgdb-overview-entity-set-extra-field (entity field-name value) - (let ((field-name (downcase field-name)) - (extras (and entity (aref (cdr entity) 8))) - extra) - (if (setq extra (assoc field-name extras)) - (setcdr extra value) - (elmo-msgdb-overview-entity-set-extra - entity - (cons (cons field-name value) extras))))) - ;;; load & save (defun elmo-msgdb-number-load (dir) (elmo-object-load @@ -326,7 +248,7 @@ Return a list of message numbers which have duplicated message-ids." ;; key is message-id (if (elmo-get-hash-val (caar overview) ehash) ; duplicated. (setq duplicates (cons - (elmo-msgdb-overview-entity-get-number + (elmo-msgdb-overview-entity-get-number-internal (car overview)) duplicates))) (if (caar overview) @@ -334,7 +256,8 @@ Return a list of message numbers which have duplicated message-ids." ;; key is number (elmo-set-hash-val (format "#%d" - (elmo-msgdb-overview-entity-get-number (car overview))) + (elmo-msgdb-overview-entity-get-number-internal + (car overview))) (car overview) ehash) (setq overview (cdr overview))) (while mark-alist @@ -352,12 +275,14 @@ Return a list of message numbers which have duplicated message-ids." (mhash (elmo-msgdb-get-mark-hashtb msgdb)) number) (when (and entity ehash) - (and (setq number (elmo-msgdb-overview-entity-get-number entity)) + (and (setq number (elmo-msgdb-overview-entity-get-number-internal + entity)) (elmo-clear-hash-val (format "#%d" number) ehash)) (and (car entity) ;; message-id (elmo-clear-hash-val (car entity) ehash))) (when (and entity mhash) - (and (setq number (elmo-msgdb-overview-entity-get-number entity)) + (and (setq number (elmo-msgdb-overview-entity-get-number-internal + entity)) (elmo-clear-hash-val (format "#%d" number) mhash))))) ;;; Implement @@ -465,6 +390,8 @@ Return a list of message numbers which have duplicated message-ids." (elmo-msgdb-set-flag msgdb number 'unread)) (uncached (elmo-msgdb-set-flag msgdb number 'cached)) + (all + (elmo-msgdb-set-mark msgdb number nil)) (t (let* ((cur-mark (elmo-msgdb-get-mark msgdb number)) (flags (modb-legacy-mark-to-flags cur-mark)) @@ -480,8 +407,25 @@ Return a list of message numbers which have duplicated message-ids." (unless (string= new-mark cur-mark) (elmo-msgdb-set-mark msgdb number new-mark)))))) +(luna-define-method elmo-msgdb-flag-count ((msgdb modb-legacy)) + (let ((new 0) + (unread 0) + (answered 0)) + (dolist (elem (elmo-msgdb-get-mark-alist msgdb)) + (cond + ((string= (cadr elem) modb-legacy-new-mark) + (incf new) + (incf unread)) + ((member (cadr elem) (modb-legacy-unread-marks)) + (incf unread)) + ((member (cadr elem) (modb-legacy-answered-marks)) + (incf answered)))) + (list (cons 'new new) + (cons 'unread unread) + (cons 'answered answered)))) + (luna-define-method elmo-msgdb-list-messages ((msgdb modb-legacy)) - (mapcar 'elmo-msgdb-overview-entity-get-number + (mapcar 'elmo-msgdb-overview-entity-get-number-internal (elmo-msgdb-get-overview msgdb))) (luna-define-method elmo-msgdb-list-flagged ((msgdb modb-legacy) flag) @@ -519,12 +463,46 @@ Return a list of message numbers which have duplicated message-ids." (setq matched (cons (car elem) matched)))))) matched)) +(luna-define-method elmo-msgdb-search ((msgdb modb-legacy) + condition &optional numbers) + (if (vectorp condition) + (let ((key (elmo-filter-key condition)) + results) + (cond + ((and (string= key "flag") + (eq (elmo-filter-type condition) 'match)) + (setq results (elmo-msgdb-list-flagged + msgdb + (intern (elmo-filter-value condition)))) + (if numbers + (elmo-list-filter numbers results) + results)) + ((member key '("first" "last")) + (let* ((numbers (or numbers (elmo-msgdb-list-messages msgdb))) + (len (length numbers)) + (lastp (string= key "last")) + (value (string-to-number (elmo-filter-value condition)))) + (when (eq (elmo-filter-type condition) 'unmatch) + (setq lastp (not lastp) + value (- len value))) + (if lastp + (nthcdr (max (- len value) 0) numbers) + (when (> value 0) + (let* ((numbers (copy-sequence numbers)) + (last (nthcdr (1- value) numbers))) + (when last + (setcdr last nil)) + numbers))))) + (t + t))) + t)) + (luna-define-method elmo-msgdb-append-entity ((msgdb modb-legacy) entity &optional flags) (when entity - (let ((number (elmo-msgdb-overview-entity-get-number entity)) - (message-id (elmo-msgdb-overview-entity-get-id entity)) - mark) + (let ((number (elmo-msgdb-overview-entity-get-number-internal entity)) + (message-id (elmo-msgdb-overview-entity-get-id-internal entity)) + mark cell) (elmo-msgdb-set-overview msgdb (nconc (elmo-msgdb-get-overview msgdb) @@ -535,15 +513,15 @@ Return a list of message numbers which have duplicated message-ids." (list (cons number message-id)))) (modb-generic-set-message-modified-internal msgdb t) (when (setq mark (modb-legacy-flags-to-mark flags)) + (setq cell (list number mark)) (elmo-msgdb-set-mark-alist msgdb - (nconc (elmo-msgdb-get-mark-alist msgdb) - (list (list number mark)))) + (nconc (elmo-msgdb-get-mark-alist msgdb) (list cell))) (modb-generic-set-flag-modified-internal msgdb t)) (elmo-msgdb-make-index msgdb (list entity) - (list (list number mark)))))) + (and cell (list cell)))))) (luna-define-method elmo-msgdb-delete-messages ((msgdb modb-legacy) numbers) @@ -582,10 +560,11 @@ Return a list of message numbers which have duplicated message-ids." msgdb)) (luna-define-method elmo-msgdb-message-entity ((msgdb modb-legacy) key) - (elmo-get-hash-val - (cond ((stringp key) key) - ((numberp key) (format "#%d" key))) - (elmo-msgdb-get-entity-hashtb msgdb))) + (when key + (elmo-get-hash-val + (cond ((stringp key) key) + ((numberp key) (format "#%d" key))) + (elmo-msgdb-get-entity-hashtb msgdb)))) (require 'product) (product-provide (provide 'modb-legacy) (require 'elmo-version))