X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Fmodb-standard.el;h=9bfcd090d9b08e2d6566e8e23c970d4794e4b154;hb=e43c5298bb288099406b09f3be0a918eabdefa3c;hp=23d2580d0e787f7d0b79fb29ca319e048a517581;hpb=3ad21e31002618fdd0cdfd1346e78d3302f597e7;p=elisp%2Fwanderlust.git diff --git a/elmo/modb-standard.el b/elmo/modb-standard.el index 23d2580..9bfcd09 100644 --- a/elmo/modb-standard.el +++ b/elmo/modb-standard.el @@ -32,7 +32,6 @@ (eval-when-compile (require 'cl)) (require 'elmo-util) -(require 'mime) (require 'modb) (defcustom modb-standard-divide-number 500 @@ -343,26 +342,22 @@ (modb-standard-number-list-internal msgdb))) (luna-define-method elmo-msgdb-list-flagged ((msgdb modb-standard) flag) - (let (entry matched) + (let ((flags (case flag + (digest + (nconc '(unread)(elmo-get-global-flags t t))) + (any + (nconc '(unread answered)(elmo-get-global-flags t t))))) + entry matched) (case flag (read (dolist (number (modb-standard-number-list-internal msgdb)) (unless (memq 'unread (modb-standard-message-flags msgdb number)) (setq matched (cons number matched))))) - (digest + ((digest any) (mapatoms (lambda (atom) (setq entry (symbol-value atom)) - (when (modb-standard-match-flags '(unread important) - (cdr entry)) - (setq matched (cons (car entry) matched)))) - (modb-standard-flag-map msgdb))) - (any - (mapatoms - (lambda (atom) - (setq entry (symbol-value atom)) - (when (modb-standard-match-flags '(unread important answered) - (cdr entry)) + (when (modb-standard-match-flags flags (cdr entry)) (setq matched (cons (car entry) matched)))) (modb-standard-flag-map msgdb))) (t @@ -411,32 +406,34 @@ (luna-define-method elmo-msgdb-append-entity ((msgdb modb-standard) entity &optional flags) - (let ((number (elmo-msgdb-message-entity-number - (elmo-message-entity-handler entity) entity)) - (msg-id (elmo-msgdb-message-entity-field - (elmo-message-entity-handler entity) entity 'message-id)) - duplicate) - ;; number-list - (modb-standard-set-number-list-internal - msgdb - (nconc (modb-standard-number-list-internal msgdb) - (list number))) - ;; entity-map - (let ((table (modb-standard-entity-map msgdb))) - (setq duplicate (elmo-get-hash-val msg-id table)) - (elmo-set-hash-val (modb-standard-key number) entity table) - (elmo-set-hash-val msg-id entity table)) - ;; modification flags - (modb-standard-set-message-modified msgdb number) - ;; flag-map - (when flags - (elmo-set-hash-val - (modb-standard-key number) - (cons number flags) - (modb-standard-flag-map msgdb)) - (modb-standard-countup-flags msgdb flags) - (modb-standard-set-flag-modified msgdb number)) - duplicate)) + (when entity + (let ((number (elmo-msgdb-message-entity-number + (elmo-message-entity-handler entity) entity)) + (msg-id (elmo-msgdb-message-entity-field + (elmo-message-entity-handler entity) entity 'message-id)) + duplicate) + (when msg-id + ;; number-list + (modb-standard-set-number-list-internal + msgdb + (nconc (modb-standard-number-list-internal msgdb) + (list number))) + ;; entity-map + (let ((table (modb-standard-entity-map msgdb))) + (setq duplicate (elmo-get-hash-val msg-id table)) + (elmo-set-hash-val (modb-standard-key number) entity table) + (elmo-set-hash-val msg-id entity table)) + ;; modification flags + (modb-standard-set-message-modified msgdb number) + ;; flag-map + (when flags + (elmo-set-hash-val + (modb-standard-key number) + (cons number flags) + (modb-standard-flag-map msgdb)) + (modb-standard-countup-flags msgdb flags) + (modb-standard-set-flag-modified msgdb number)) + duplicate)))) (luna-define-method elmo-msgdb-delete-messages ((msgdb modb-standard) numbers) @@ -447,23 +444,25 @@ (dolist (number numbers) (setq key (modb-standard-key number) entity (elmo-get-hash-val key entity-map)) - ;; number-list - (setq number-list (delq number number-list)) - ;; entity-map - (elmo-clear-hash-val key entity-map) - (elmo-clear-hash-val (modb-standard-entity-id entity) entity-map) - ;; flag-count (must be BEFORE flag-map) - (modb-standard-countup-flags - msgdb - (modb-standard-message-flags msgdb number) - -1) - ;; flag-map - (elmo-clear-hash-val key flag-map) - (modb-standard-set-message-modified msgdb number) - (modb-standard-set-flag-modified msgdb number)) + (when entity + ;; number-list + (setq number-list (delq number number-list)) + ;; entity-map + (elmo-clear-hash-val key entity-map) + (elmo-clear-hash-val (modb-standard-entity-id entity) entity-map) + ;; flag-count (must be BEFORE flag-map) + (modb-standard-countup-flags + msgdb + (modb-standard-message-flags msgdb number) + -1) + ;; flag-map + (elmo-clear-hash-val key flag-map) + (modb-standard-set-message-modified msgdb number) + (modb-standard-set-flag-modified msgdb number))) (modb-standard-set-number-list-internal msgdb number-list) (modb-standard-set-entity-map-internal msgdb entity-map) - (modb-standard-set-flag-map-internal msgdb flag-map))) + (modb-standard-set-flag-map-internal msgdb flag-map) + t)) (luna-define-method elmo-msgdb-sort-entities ((msgdb modb-standard) predicate &optional app-data) @@ -479,24 +478,27 @@ (message "Sorting...done") msgdb)) -(luna-define-method elmo-msgdb-message-entity ((msgdb modb-standard) key) - (let ((ret (and key - (elmo-get-hash-val - (cond ((stringp key) key) - ((numberp key) (modb-standard-key key))) - (modb-standard-entity-map-internal msgdb))))) - (if (eq 'autoload (car-safe ret)) +(defun modb-standard-message-entity (msgdb key load) + (let ((ret (elmo-get-hash-val + key + (modb-standard-entity-map-internal msgdb)))) + (if (and (eq 'autoload (car-safe ret)) load) (when modb-standard-divide-number (modb-standard-load-entity msgdb (elmo-msgdb-location msgdb) (/ (nth 1 ret) modb-standard-divide-number)) - (elmo-get-hash-val - (cond ((stringp key) key) - ((numberp key) (modb-standard-key key))) - (modb-standard-entity-map-internal msgdb))) + (modb-standard-message-entity msgdb key nil)) ret))) +(luna-define-method elmo-msgdb-message-entity ((msgdb modb-standard) key) + (when key + (modb-standard-message-entity + msgdb + (cond ((stringp key) key) + ((numberp key) (modb-standard-key key))) + 'autoload))) + (require 'product) (product-provide (provide 'modb-standard) (require 'elmo-version))