X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-filter.el;h=2e0e7ecf59e40a819c62c6100b83fe7375743dac;hb=0e5efb8f0af32ab5f97c97256c464c80b59a7269;hp=2ce03c0938ddc65a233b30f29612bd8e39662ece;hpb=6cc3a997b26f20f4a17ac4e6111aa859e47bb7c4;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-filter.el b/elmo/elmo-filter.el index 2ce03c0..2e0e7ec 100644 --- a/elmo/elmo-filter.el +++ b/elmo/elmo-filter.el @@ -77,14 +77,6 @@ (elmo-folder-set-msgdb-internal (elmo-filter-folder-target-internal folder) nil))) -(luna-define-method elmo-folder-set-message-modified ((folder - elmo-filter-folder) - modified) - (if (elmo-filter-folder-require-msgdb-internal folder) - (elmo-folder-set-message-modified-internal - (elmo-filter-folder-target-internal folder) modified) - (elmo-folder-set-message-modified-internal folder modified))) - (luna-define-method elmo-folder-commit :around ((folder elmo-filter-folder)) ;; Save target msgdb if it is used. (if (elmo-filter-folder-require-msgdb-internal folder) @@ -97,6 +89,12 @@ (elmo-replace-string-as-filename (elmo-folder-name-internal folder)) (expand-file-name "filter" elmo-msgdb-directory))) +(luna-define-method elmo-folder-search-requires-msgdb-p ((folder + elmo-filter-folder) + condition) + (elmo-folder-search-requires-msgdb-p + (elmo-filter-folder-target-internal folder) condition)) + (luna-define-method elmo-folder-newsgroups ((folder elmo-filter-folder)) (elmo-folder-newsgroups (elmo-filter-folder-target-internal folder))) @@ -108,7 +106,7 @@ (luna-define-method elmo-folder-get-primitive-list ((folder elmo-filter-folder)) - (list (elmo-filter-folder-target-internal folder))) + (elmo-folder-get-primitive-list (elmo-filter-folder-target-internal folder))) (luna-define-method elmo-folder-contains-type ((folder elmo-filter-folder) type) @@ -121,28 +119,23 @@ (if (elmo-filter-folder-require-msgdb-internal folder) (let* ((target-folder (elmo-filter-folder-target-internal folder)) (len (length numlist)) - (msgdb (elmo-folder-msgdb target-folder)) - overview number-alist mark-alist message-id entity mark) + (msgdb (progn + (elmo-folder-check target-folder) + (elmo-folder-msgdb target-folder))) + (new-msgdb (elmo-make-msgdb)) + message-id entity) (when (> len elmo-display-progress-threshold) (elmo-progress-set 'elmo-folder-msgdb-create len "Creating msgdb...")) (unwind-protect (dolist (number numlist) - (setq entity (elmo-msgdb-overview-get-entity number msgdb)) + (setq entity (elmo-msgdb-message-entity msgdb number)) (when entity - (setq overview (elmo-msgdb-append-element overview entity) - message-id (elmo-msgdb-overview-entity-get-id entity) - number-alist (elmo-msgdb-number-add number-alist - number - message-id)) - (when (setq mark (elmo-msgdb-get-mark msgdb number)) - (setq mark-alist (elmo-msgdb-mark-append - mark-alist - number - mark)))) + (elmo-msgdb-append-entity new-msgdb entity + (elmo-msgdb-flags msgdb number))) (elmo-progress-notify 'elmo-folder-msgdb-create)) (elmo-progress-clear 'elmo-folder-msgdb-create)) - (list overview number-alist mark-alist)) + new-msgdb) ;; Does not require msgdb. (elmo-folder-msgdb-create (elmo-filter-folder-target-internal folder) @@ -258,11 +251,13 @@ (luna-define-method elmo-folder-search ((folder elmo-filter-folder) condition &optional numbers) ;; search from messages in this folder - (elmo-list-filter - numbers - (elmo-folder-search (elmo-filter-folder-target-internal folder) - condition - (elmo-folder-list-messages folder)))) + (let ((result (elmo-folder-search + (elmo-filter-folder-target-internal folder) + condition + (elmo-folder-list-messages folder)))) + (if numbers + (elmo-list-filter numbers result) + result))) (luna-define-method elmo-message-use-cache-p ((folder elmo-filter-folder) number) @@ -285,53 +280,57 @@ (elmo-message-file-name (elmo-filter-folder-target-internal folder) number)) -(luna-define-method elmo-folder-mark-as-read :around ((folder +(luna-define-method elmo-folder-flag-as-read :around ((folder elmo-filter-folder) numbers - &optional ignore-flag) - (elmo-folder-mark-as-read (elmo-filter-folder-target-internal folder) - numbers ignore-flag) + &optional is-local) + (elmo-folder-flag-as-read (elmo-filter-folder-target-internal folder) + numbers is-local) (luna-call-next-method)) -(luna-define-method elmo-folder-unmark-read :around ((folder +(luna-define-method elmo-folder-unflag-read :around ((folder elmo-filter-folder) numbers - &optional ignore-flag) - (elmo-folder-unmark-read (elmo-filter-folder-target-internal folder) - numbers ignore-flag) + &optional is-local) + (elmo-folder-unflag-read (elmo-filter-folder-target-internal folder) + numbers is-local) (luna-call-next-method)) -(luna-define-method elmo-folder-mark-as-important :around ((folder +(luna-define-method elmo-folder-flag-as-important :around ((folder elmo-filter-folder) numbers &optional - ignore-flag) - (elmo-folder-mark-as-important (elmo-filter-folder-target-internal folder) - numbers ignore-flag) + is-local) + (elmo-folder-flag-as-important (elmo-filter-folder-target-internal folder) + numbers is-local) (luna-call-next-method)) -(luna-define-method elmo-folder-unmark-important :around ((folder +(luna-define-method elmo-folder-unflag-important :around ((folder elmo-filter-folder) numbers &optional - ignore-flag) - (elmo-folder-unmark-important (elmo-filter-folder-target-internal folder) - numbers ignore-flag) + is-local) + (elmo-folder-unflag-important (elmo-filter-folder-target-internal folder) + numbers is-local) (luna-call-next-method)) -(luna-define-method elmo-folder-mark-as-answered :around ((folder +(luna-define-method elmo-folder-flag-as-answered :around ((folder elmo-filter-folder) - numbers) - (elmo-folder-mark-as-answered (elmo-filter-folder-target-internal folder) - numbers) + numbers + &optional + is-local) + (elmo-folder-flag-as-answered (elmo-filter-folder-target-internal folder) + numbers is-local) (luna-call-next-method)) -(luna-define-method elmo-folder-unmark-answered :around ((folder +(luna-define-method elmo-folder-unflag-answered :around ((folder elmo-filter-folder) - numbers) - (elmo-folder-unmark-answered (elmo-filter-folder-target-internal folder) - numbers) + numbers + &optional + is-local) + (elmo-folder-unflag-answered (elmo-filter-folder-target-internal folder) + numbers is-local) (luna-call-next-method)) (require 'product)