X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-multi.el;h=122a6df144ed4c4568cdc484e00809eb6f704adb;hb=424e7a3cb5aa23eed0819affa8acf6eaf83b0e88;hp=ba0eaaad26f60cda72c2de16975d4f90a2ce3bdc;hpb=87f2dea980847b95329f4b3d5c6408a6e9387a90;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-multi.el b/elmo/elmo-multi.el index ba0eaaa..122a6df 100644 --- a/elmo/elmo-multi.el +++ b/elmo/elmo-multi.el @@ -45,12 +45,12 @@ (defmacro elmo-multi-real-folder-number (folder number) "Returns a cons cell of real FOLDER and NUMBER." - (` (cons (nth (- - (/ (, number) - (elmo-multi-folder-divide-number-internal (, folder))) - 1) (elmo-multi-folder-children-internal (, folder))) - (% (, number) (elmo-multi-folder-divide-number-internal - (, folder)))))) + `(cons (nth (- + (/ ,number + (elmo-multi-folder-divide-number-internal ,folder)) + 1) (elmo-multi-folder-children-internal ,folder)) + (% ,number (elmo-multi-folder-divide-number-internal + ,folder)))) (luna-define-method elmo-folder-initialize ((folder elmo-multi-folder) @@ -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,11 +88,10 @@ (elmo-define-signal-filter (folder sender) (memq sender (elmo-multi-folder-children-internal folder)))) (elmo-connect-signal - nil 'cache-changed folder - (elmo-define-signal-handler (folder child number) - (elmo-emit-signal - 'flag-changed folder - (car (elmo-multi-map-numbers folder child (list number))))) + 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 @@ -124,6 +123,11 @@ (dolist (fld (elmo-multi-folder-children-internal folder)) (elmo-folder-open-internal fld))) +(luna-define-method elmo-folder-open-internal-p ((folder elmo-multi-folder)) + (let (open) + (dolist (fld (elmo-multi-folder-children-internal folder)) + (setq open (and open (elmo-folder-open-internal-p fld)))))) + (luna-define-method elmo-folder-check ((folder elmo-multi-folder)) (dolist (fld (elmo-multi-folder-children-internal folder)) (elmo-folder-check fld))) @@ -137,6 +141,10 @@ (dolist (fld (elmo-multi-folder-children-internal folder)) (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 disable-killed @@ -350,11 +358,10 @@ (nconc numbers (mapcar - (function - (lambda (x) - (+ - (* (elmo-multi-folder-divide-number-internal - folder) cur-number) x))) + (lambda (x) + (+ + (* (elmo-multi-folder-divide-number-internal + folder) cur-number) x)) list))) (setq flds (cdr flds))) numbers)) @@ -402,13 +409,12 @@ (setq cur-number (+ cur-number 1)) (setq matches (append matches (mapcar - (function - (lambda (x) - (+ - (* (elmo-multi-folder-divide-number-internal - folder) - cur-number) - x))) + (lambda (x) + (+ + (* (elmo-multi-folder-divide-number-internal + folder) + cur-number) + x)) (elmo-folder-search (car flds) condition)))) (setq flds (cdr flds))) @@ -494,11 +500,10 @@ (nconc numbers (mapcar - (function - (lambda (x) - (+ - (* (elmo-multi-folder-divide-number-internal folder) - cur-number) x))) + (lambda (x) + (+ + (* (elmo-multi-folder-divide-number-internal folder) + cur-number) x)) (elmo-folder-list-flagged child flag in-msgdb))))) numbers)) @@ -521,6 +526,35 @@ (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))))) + +(defun elmo-folder-append-messages-multi-* (dst-folder + src-folder + numbers + same-number) + (if same-number + (elmo-folder-append-messages dst-folder src-folder numbers same-number + 'elmo-folder-append-messages-multi-*) + (let ((divider (elmo-multi-folder-divide-number-internal src-folder)) + (cur-number 0) + succeeds) + (dolist (element (elmo-multi-split-numbers src-folder numbers)) + (setq cur-number (+ cur-number 1)) + (when (cdr element) + (setq succeeds + (nconc + succeeds + (mapcar + (lambda (x) + (+ (* divider cur-number) x)) + (elmo-folder-append-messages + dst-folder (car element) (cdr element))))))) + succeeds))) + (require 'product) (product-provide (provide 'elmo-multi) (require 'elmo-version))