X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-multi.el;h=d9c2cf1ca4a28cdfae0be2079e9989601e87bc81;hb=5ee330d2b31a983dbcca7879f7e1b3e93ac3b586;hp=bfa4259de2436ca80753c2fd9c74eec9ac955aec;hpb=3d982b21b06c48c4e48e4b78649412f914ab59d8;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-multi.el b/elmo/elmo-multi.el index bfa4259..d9c2cf1 100644 --- a/elmo/elmo-multi.el +++ b/elmo/elmo-multi.el @@ -60,7 +60,7 @@ folder (nconc (elmo-multi-folder-children-internal folder) - (list (elmo-make-folder (car name))))) + (list (elmo-get-folder (car name))))) (setq name (cdr name)) (when (and (> (length name) 0) (eq (aref name 0) ?,)) @@ -88,10 +88,17 @@ (elmo-define-signal-filter (folder sender) (memq sender (elmo-multi-folder-children-internal folder)))) (elmo-connect-signal - nil 'cache-changed folder + nil 'status-changed folder + (elmo-define-signal-handler (folder child numbers) + (elmo-emit-signal 'status-changed folder + (elmo-multi-map-numbers folder child numbers))) + (elmo-define-signal-filter (folder sender) + (memq sender (elmo-multi-folder-children-internal folder)))) + (elmo-connect-signal + nil 'update-overview folder (elmo-define-signal-handler (folder child number) (elmo-emit-signal - 'flag-changed folder + 'update-overview folder (car (elmo-multi-map-numbers folder child (list number))))) (elmo-define-signal-filter (folder sender) (memq sender (elmo-multi-folder-children-internal folder))))) @@ -124,9 +131,14 @@ (dolist (fld (elmo-multi-folder-children-internal folder)) (elmo-folder-close-internal fld))) -(luna-define-method elmo-folder-close :after ((folder elmo-multi-folder)) +(luna-define-method elmo-folder-close ((folder elmo-multi-folder)) + (elmo-generic-folder-close folder) (dolist (fld (elmo-multi-folder-children-internal folder)) - (elmo-folder-set-msgdb-internal fld nil))) + (elmo-folder-close fld))) + +(luna-define-method elmo-message-killed-p ((folder elmo-multi-folder) number) + (let ((pair (elmo-multi-real-folder-number folder number))) + (elmo-message-killed-p (car pair) (cdr pair)))) (luna-define-method elmo-folder-synchronize ((folder elmo-multi-folder) &optional @@ -216,8 +228,9 @@ (let* ((pair (elmo-multi-real-folder-number folder key)) (entity (elmo-message-entity (car pair) (cdr pair)))) (when entity - (elmo-message-entity-set-number (elmo-message-copy-entity entity) - key)))) + (setq entity (elmo-message-copy-entity entity)) + (elmo-message-entity-set-number entity key) + entity))) ((stringp key) (let ((children (elmo-multi-folder-children-internal folder)) (cur-number 0) @@ -242,9 +255,9 @@ (elmo-message-entity-field entity 'references))) (luna-define-method elmo-message-field ((folder elmo-multi-folder) - number field) + number field &optional type) (let ((pair (elmo-multi-real-folder-number folder number))) - (elmo-message-field (car pair) (cdr pair) field))) + (elmo-message-field (car pair) (cdr pair) field type))) (luna-define-method elmo-message-flag-available-p ((folder elmo-multi-folder) number @@ -511,6 +524,12 @@ (setq flag-alist (cons pair flag-alist))))) flag-alist)) +(luna-define-method elmo-folder-recover-messages ((folder elmo-multi-folder) + numbers) + (dolist (element (elmo-multi-split-numbers folder numbers)) + (when (cdr element) + (elmo-folder-recover-messages (car element) (cdr element))))) + (require 'product) (product-provide (provide 'elmo-multi) (require 'elmo-version))