* elmo-filter.el (elmo-message-set-cached): Call
[elisp/wanderlust.git] / elmo / elmo-multi.el
index 254a0a0..2a13b79 100644 (file)
@@ -28,6 +28,7 @@
 
 ;;; Code:
 ;;
+(eval-when-compile (require 'cl))
 
 (require 'elmo)
 (require 'luna)
 (luna-define-method elmo-message-set-cached ((folder elmo-multi-folder)
                                             number cached)
   (let ((pair (elmo-multi-real-folder-number folder number)))
-    (elmo-message-set-cached (car pair) (cdr pair) cached)))
+    (elmo-message-set-cached (car pair) (cdr pair) cached))
+  (elmo-folder-notify-event folder 'cache-changed number))
 
 (luna-define-method elmo-find-fetch-strategy ((folder elmo-multi-folder)
                                              number
 
 (luna-define-method elmo-message-fetch ((folder elmo-multi-folder)
                                        number strategy
-                                       &optional section outbuf unseen)
+                                       &optional unseen section)
   (let ((pair (elmo-multi-real-folder-number folder number)))
     (when (elmo-message-fetch (car pair) (cdr pair)
-                             strategy section outbuf unseen)
+                             strategy unseen section)
       (unless unseen
        (elmo-folder-notify-event folder 'flag-changed (list number)))
       t)))
   (elmo-multi-folder-diff folder))
 
 (defun elmo-multi-folder-diff (folder)
-  (let ((flds (elmo-multi-folder-children-internal folder))
-       (news 0)
+  (let ((news 0)
        (unreads 0)
        (alls 0)
-       no-unreads diff)
-    (while flds
-      (setq diff (elmo-folder-diff (car flds)))
-      (cond
-       ((consp (cdr diff)) ; (new unread all)
-       (setq news    (+ news (nth 0 diff))
-             unreads (+ unreads (nth 1 diff))
-             alls    (+ alls (nth 2 diff))))
-       (t
-       (setq no-unreads t)
-       (setq news    (+ news (car diff))
-             alls    (+ alls (cdr diff)))))
-      (setq flds (cdr flds)))
-    (if no-unreads
-       (cons news alls)
-      (list news unreads alls))))
+       diff value)
+    (dolist (child (elmo-multi-folder-children-internal folder))
+      (setq diff (elmo-folder-diff child))
+      (setq news    (and news
+                        (setq value (elmo-diff-new diff))
+                        (+ news value))
+           unreads (and unreads
+                        (setq value (elmo-diff-unread diff))
+                        (+ unreads value))
+           alls    (and alls
+                        (setq value (elmo-diff-all diff))
+                        (+ alls value))))
+    (if unreads
+       (list news unreads alls)
+      (cons news alls))))
 
 (luna-define-method elmo-folder-list-messages
   ((folder elmo-multi-folder) &optional visible-only in-msgdb)