Synch up with main trunk.
[elisp/wanderlust.git] / elmo / elmo-multi.el
index a4d0da5..3090237 100644 (file)
 
 (luna-define-method elmo-folder-check ((folder elmo-multi-folder))
   (dolist (fld (elmo-multi-folder-children-internal folder))
-    (elmo-folder-check fld)))
+    (elmo-folder-synchronize fld)))
 
 (luna-define-method elmo-folder-close-internal ((folder elmo-multi-folder))
   (dolist (fld (elmo-multi-folder-children-internal folder))
     (elmo-folder-close-internal fld)))
 
+(luna-define-method elmo-folder-close :around ((folder elmo-multi-folder))
+  (dolist (fld (elmo-multi-folder-children-internal folder))
+    (elmo-folder-close fld)))
+
 (luna-define-method elmo-folder-expand-msgdb-path ((folder
                                                    elmo-multi-folder))
   (expand-file-name (elmo-replace-string-as-filename
     numbers-list))
 
 (luna-define-method elmo-folder-msgdb-create ((folder elmo-multi-folder)
-                                             numbers new-mark already-mark
-                                             seen-mark important-mark
-                                             seen-list)
+                                             numbers seen-list)
   (let* ((folders (elmo-multi-folder-children-internal folder))
         overview number-alist mark-alist entity
         numbers-list
                 (elmo-multi-msgdb
                  (elmo-folder-msgdb-create (nth cur-number folders)
                                            (nth cur-number numbers-list)
-                                           new-mark already-mark
-                                           seen-mark important-mark
                                            seen-list)
                  (* (elmo-multi-folder-divide-number-internal folder)
                     (1+ cur-number))))))
       (setq result (nconc result (list one-alist))))
     result))
 
-(luna-define-method elmo-folder-list-unreads-internal
-  ((folder elmo-multi-folder) unread-marks &optional mark-alist)
-  (elmo-multi-folder-list-unreads-internal folder unread-marks))
-
-(defun elmo-multi-folder-list-unreads-internal (folder unread-marks)
-  (let ((folders (elmo-multi-folder-children-internal folder))
-       (mark-alists (elmo-multi-split-mark-alist
-                     folder
-                     (elmo-msgdb-get-mark-alist
-                      (elmo-folder-msgdb folder))))
-       (cur-number 0)
-       unreads
-       all-unreads)
-    (while folders
+(luna-define-method elmo-folder-list-unreads ((folder elmo-multi-folder))
+  (let ((cur-number 0)
+       unreads)
+    (dolist (child (elmo-multi-folder-children-internal folder))
       (setq cur-number (+ cur-number 1))
-      (unless (listp (setq unreads
-                          (elmo-folder-list-unreads-internal
-                           (car folders) unread-marks (car mark-alists))))
-       (setq unreads (delq  nil
-                            (mapcar
-                             (lambda (x)
-                               (if (member (cadr x) unread-marks)
-                                   (car x)))
-                             (car mark-alists)))))
-      (setq all-unreads
-           (nconc all-unreads
-                  (mapcar 
-                   (lambda (x)
-                     (+ x
-                        (* cur-number
-                           (elmo-multi-folder-divide-number-internal
-                            folder))))            
-                   unreads)))
-      (setq mark-alists (cdr mark-alists)
-           folders (cdr folders)))
-    all-unreads))
-
-(luna-define-method elmo-folder-list-importants-internal
-  ((folder elmo-multi-folder) important-mark)
-  (let ((folders (elmo-multi-folder-children-internal folder))
-       (mark-alists (elmo-multi-split-mark-alist
-                     folder
-                     (elmo-msgdb-get-mark-alist
-                      (elmo-folder-msgdb folder))))
-       (cur-number 0)
-       importants
-       all-importants)
-    (while folders
+      (setq unreads
+           (nconc
+            unreads
+            (mapcar (lambda (x)
+                      (+ x (* cur-number
+                              (elmo-multi-folder-divide-number-internal
+                               folder))))
+                    (elmo-folder-list-unreads child)))))
+    unreads))
+
+(luna-define-method elmo-folder-list-answereds ((folder elmo-multi-folder))
+  (let ((cur-number 0)
+       answereds)
+    (dolist (child (elmo-multi-folder-children-internal folder))
       (setq cur-number (+ cur-number 1))
-      (when (listp (setq importants
-                        (elmo-folder-list-importants-internal
-                         (car folders) important-mark)))
-       (setq all-importants
-             (nconc all-importants
-                    (mapcar 
-                     (lambda (x)
-                       (+ x
-                          (* cur-number
-                             (elmo-multi-folder-divide-number-internal
-                              folder))))                  
-                     importants))))
-      (setq mark-alists (cdr mark-alists)
-           folders (cdr folders)))
-    all-importants))
+      (setq answereds
+           (nconc
+            answereds
+            (mapcar (lambda (x)
+                      (+ x (* cur-number
+                              (elmo-multi-folder-divide-number-internal
+                               folder))))
+                    (elmo-folder-list-answereds child)))))
+    answereds))
+
+(luna-define-method elmo-folder-list-importants ((folder elmo-multi-folder))
+  (let ((cur-number 0)
+       importants)
+    (dolist (child (elmo-multi-folder-children-internal folder))
+      (setq cur-number (+ cur-number 1))
+      (setq importants
+           (nconc
+            importants
+            (mapcar (lambda (x)
+                      (+ x (* cur-number
+                              (elmo-multi-folder-divide-number-internal
+                               folder))))
+                    (elmo-folder-list-importants child)))))
+    (elmo-uniq-list
+     (nconc importants
+           (elmo-folder-list-messages-with-global-mark
+            folder elmo-msgdb-important-mark)))))
 
 (luna-define-method elmo-folder-list-messages-internal
   ((folder elmo-multi-folder) &optional nohide)
       (setq msg-list (cdr msg-list)))
     ret-val))
 
-(luna-define-method elmo-folder-mark-as-important ((folder elmo-multi-folder)
-                                                  numbers)
+(luna-define-method elmo-folder-mark-as-important :around ((folder
+                                                           elmo-multi-folder)
+                                                          numbers)
   (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
     (elmo-folder-mark-as-important (car folder-numbers)
                                   (cdr folder-numbers)))
-  t)
+  (luna-call-next-method))
 
-(luna-define-method elmo-folder-unmark-important ((folder elmo-multi-folder)
-                                                 numbers)
+(luna-define-method elmo-folder-unmark-important :around ((folder
+                                                          elmo-multi-folder)
+                                                         numbers)
   (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
     (elmo-folder-unmark-important (car folder-numbers)
                                  (cdr folder-numbers)))
-  t)
+  (luna-call-next-method))
 
-(luna-define-method elmo-folder-mark-as-read ((folder elmo-multi-folder)
-                                             numbers)
+(luna-define-method elmo-folder-mark-as-read :around ((folder
+                                                      elmo-multi-folder)
+                                                     numbers)
   (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
     (elmo-folder-mark-as-read (car folder-numbers)
                              (cdr folder-numbers)))
-  t)
+  (luna-call-next-method))
 
-(luna-define-method elmo-folder-unmark-read ((folder elmo-multi-folder)
-                                            numbers)
+(luna-define-method elmo-folder-unmark-read :around ((folder
+                                                     elmo-multi-folder)
+                                                    numbers)
   (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
     (elmo-folder-unmark-read (car folder-numbers)
                             (cdr folder-numbers)))
-  t)
+  (luna-call-next-method))
+
+(luna-define-method elmo-folder-mark-as-answered :around ((folder
+                                                          elmo-multi-folder)
+                                                         numbers)
+  (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
+    (elmo-folder-mark-as-answered (car folder-numbers)
+                                 (cdr folder-numbers)))
+  (luna-call-next-method))
+
+(luna-define-method elmo-folder-unmark-answered :around ((folder
+                                                         elmo-multi-folder)
+                                                        numbers)
+  (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
+    (elmo-folder-unmark-answered (car folder-numbers)
+                                (cdr folder-numbers)))
+  (luna-call-next-method))
 
 (require 'product)
 (product-provide (provide 'elmo-multi) (require 'elmo-version))