X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-filter.el;h=65aacfa57b7e58dead8747f2f08ba4b7465d09ca;hb=2706485848c7fabd109477e1d7fad89a6249f0b2;hp=632b0957fb70a996a97b2c1084b891b406b96bb6;hpb=3d982b21b06c48c4e48e4b78649412f914ab59d8;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-filter.el b/elmo/elmo-filter.el index 632b095..65aacfa 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)) @@ -66,8 +67,8 @@ (elmo-connect-signal target 'flag-changing folder (elmo-define-signal-handler (folder target number old-flags new-flags) - (elmo-filter-add-flag-count folder number old-flags -1) - (elmo-filter-add-flag-count folder number new-flags) + (elmo-filter-add-flag-count folder old-flags -1) + (elmo-filter-add-flag-count folder new-flags) (elmo-emit-signal 'flag-changing folder number old-flags new-flags)) (elmo-define-signal-filter (folder target number) (memq number (elmo-folder-list-messages folder nil t)))) @@ -80,9 +81,17 @@ (when filterd (elmo-emit-signal 'flag-changed folder filterd))))) (elmo-connect-signal - target 'cache-changed folder + 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) - (elmo-emit-signal 'cache-changed folder number)) + (elmo-emit-signal 'update-overview folder number)) (elmo-define-signal-filter (folder target number) (memq number (elmo-folder-list-messages folder nil t))))) @@ -95,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) @@ -113,7 +127,7 @@ (setq flag-count (cons (cons flag delta) flag-count))))) (elmo-filter-folder-set-flag-count-internal folder flag-count))) -(defun elmo-filter-add-flag-count (folder number flags &optional delta) +(defun elmo-filter-add-flag-count (folder flags &optional delta) (let ((flag-count (elmo-filter-folder-flag-count-internal folder)) (delta (or delta 1)) elem) @@ -142,6 +156,9 @@ (luna-define-method elmo-folder-open-internal ((folder elmo-filter-folder)) (elmo-folder-open-internal (elmo-filter-folder-target-internal folder))) +(luna-define-method elmo-folder-open-internal-p ((folder elmo-filter-folder)) + (elmo-folder-open-internal-p (elmo-filter-folder-target-internal folder))) + (luna-define-method elmo-folder-check ((folder elmo-filter-folder)) (when (elmo-filter-folder-require-msgdb-internal folder) (elmo-folder-synchronize (elmo-filter-folder-target-internal folder)))) @@ -149,11 +166,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)) @@ -164,9 +181,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)) @@ -208,6 +226,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) @@ -226,7 +262,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 @@ -425,9 +461,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) @@ -481,7 +517,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))