X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-filter.el;h=700be31a8b3f149d5d42c3132cb3074218687dfa;hb=3aa35fed0ec63c3701fc987a3b5c78196fcba496;hp=b73c5a3b1355394ee7ff568fdd808c43f507dc85;hpb=6444631eeac4bef1933e27202080f62ac536aada;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-filter.el b/elmo/elmo-filter.el index b73c5a3..700be31 100644 --- a/elmo/elmo-filter.el +++ b/elmo/elmo-filter.el @@ -50,13 +50,14 @@ (if (string-match "^ */\\(.*\\)$" (cdr pair)) (elmo-filter-folder-set-target-internal folder - (elmo-make-folder (elmo-match-string 1 (cdr pair)))) + (elmo-get-folder (elmo-match-string 1 (cdr pair)))) (error "Folder syntax error `%s'" (elmo-folder-name-internal folder))) (elmo-filter-folder-set-require-msgdb-internal folder (elmo-folder-search-requires-msgdb-p (elmo-filter-folder-target-internal folder) (elmo-filter-folder-condition-internal folder))) + (elmo-filter-folder-set-number-list-internal folder 'not-loaded) (elmo-filter-connect-signals folder (elmo-filter-folder-target-internal folder)) @@ -80,11 +81,13 @@ (when filterd (elmo-emit-signal 'flag-changed folder filterd))))) (elmo-connect-signal - target 'cache-changed folder - (elmo-define-signal-handler (folder target number) - (elmo-emit-signal 'cache-changed folder number)) - (elmo-define-signal-filter (folder target number) - (memq number (elmo-folder-list-messages folder nil t)))) + target 'status-changed folder + (elmo-define-signal-handler (folder target numbers) + (let ((filterd (elmo-list-filter + (elmo-folder-list-messages folder nil t) + numbers))) + (when filterd + (elmo-emit-signal 'status-changed folder filterd))))) (elmo-connect-signal target 'update-overview folder (elmo-define-signal-handler (folder target number) @@ -101,11 +104,16 @@ (expand-file-name elmo-filter-number-filename dir) number-list)) +(defun elmo-filter-folder-number-list-loaded-p (folder) + (listp (elmo-filter-folder-number-list-internal folder))) + (defun elmo-filter-folder-number-list (folder) - (or (elmo-filter-folder-number-list-internal folder) + (let ((numbers (elmo-filter-folder-number-list-internal folder))) + (if (listp numbers) + numbers (elmo-filter-folder-set-number-list-internal folder - (elmo-filter-number-list-load (elmo-folder-msgdb-path folder))))) + (elmo-filter-number-list-load (elmo-folder-msgdb-path folder)))))) (defsubst elmo-filter-folder-countup-message-flags (folder numbers &optional delta) @@ -155,11 +163,11 @@ (luna-define-method elmo-folder-close-internal ((folder elmo-filter-folder)) (elmo-folder-close-internal (elmo-filter-folder-target-internal folder))) -(luna-define-method elmo-folder-close :after ((folder elmo-filter-folder)) - (elmo-filter-folder-set-number-list-internal folder nil) +(luna-define-method elmo-folder-close ((folder elmo-filter-folder)) + (elmo-generic-folder-close folder) + (elmo-filter-folder-set-number-list-internal folder 'not-loaded) (elmo-filter-folder-set-flag-count-internal folder nil) - (elmo-folder-set-msgdb-internal - (elmo-filter-folder-target-internal folder) nil)) + (elmo-folder-close (elmo-filter-folder-target-internal folder))) (luna-define-method elmo-folder-commit ((folder elmo-filter-folder)) (elmo-folder-commit (elmo-filter-folder-target-internal folder)) @@ -170,9 +178,10 @@ (elmo-msgdb-killed-list-save (elmo-folder-msgdb-path folder) (elmo-folder-killed-list-internal folder)) - (elmo-filter-number-list-save - (elmo-folder-msgdb-path folder) - (elmo-filter-folder-number-list-internal folder)))) + (when (elmo-filter-folder-number-list-loaded-p folder) + (elmo-filter-number-list-save + (elmo-folder-msgdb-path folder) + (elmo-filter-folder-number-list folder))))) (luna-define-method elmo-folder-expand-msgdb-path ((folder elmo-filter-folder)) @@ -214,6 +223,24 @@ (elmo-filter-folder-target-internal folder) flag number)) +(defun elmo-folder-append-messages-filter-* (dst-folder + src-folder + numbers + same-number) + (elmo-folder-append-messages dst-folder + (elmo-filter-folder-target-internal src-folder) + numbers + same-number)) + +(defun elmo-folder-append-messages-*-filter (dst-folder + src-folder + numbers + same-number) + (elmo-folder-append-messages (elmo-filter-folder-target-internal dst-folder) + src-folder + numbers + same-number)) + (luna-define-method elmo-message-fetch-bodystructure ((folder elmo-filter-folder) number strategy) @@ -232,7 +259,7 @@ (let ((flag-count (elmo-filter-folder-copy-flag-count (elmo-filter-folder-flag-count-internal folder))) (messages (copy-sequence - (elmo-filter-folder-number-list-internal folder))) + (elmo-filter-folder-number-list folder))) success) (elmo-folder-detach-messages folder numbers) (unless (setq success @@ -431,9 +458,9 @@ (elmo-message-folder (elmo-filter-folder-target-internal folder) number)) (luna-define-method elmo-message-field ((folder elmo-filter-folder) - number field) + number field &optional type) (elmo-message-field - (elmo-filter-folder-target-internal folder) number field)) + (elmo-filter-folder-target-internal folder) number field type)) (luna-define-method elmo-message-set-field ((folder elmo-filter-folder) number field value) @@ -487,7 +514,8 @@ t) (luna-define-method elmo-folder-length ((folder elmo-filter-folder)) - (length (elmo-filter-folder-number-list-internal folder))) + (and (elmo-filter-folder-number-list-loaded-p folder) + (length (elmo-filter-folder-number-list-internal folder)))) (require 'product) (product-provide (provide 'elmo-filter) (require 'elmo-version))