* wl-vars.el (wl-summary-print-argument-within-window): New variable.
[elisp/wanderlust.git] / elmo / elmo-multi.el
index 55a6caf..d03b1f6 100644 (file)
@@ -43,7 +43,7 @@
 
 (defmacro elmo-multi-real-folder-number (folder number)
   "Returns a cons cell of real FOLDER and NUMBER."
-  (` (cons (nth (- 
+  (` (cons (nth (-
                 (/ (, number)
                    (elmo-multi-folder-divide-number-internal (, folder)))
                 1) (elmo-multi-folder-children-internal (, folder)))
     (elmo-folder-set-msgdb-internal fld nil)))
 
 (luna-define-method elmo-folder-synchronize ((folder elmo-multi-folder)
-                                            &optional ignore-msgdb
+                                            &optional
+                                            disable-killed
+                                            ignore-msgdb
                                             no-check)
   (dolist (fld (elmo-multi-folder-children-internal folder))
-    (elmo-folder-synchronize fld ignore-msgdb no-check))
+    (elmo-folder-synchronize fld disable-killed ignore-msgdb no-check))
   0)
 
 (luna-define-method elmo-folder-expand-msgdb-path ((folder
   (nth (- (/ number (elmo-multi-folder-divide-number-internal folder)) 1)
        (elmo-multi-folder-children-internal folder)))
 
+(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)))
+
+(luna-define-method elmo-find-fetch-strategy
+  ((folder elmo-multi-folder) entity &optional ignore-cache)
+  (let ((pair (elmo-multi-real-folder-number
+              folder
+              (elmo-message-entity-number entity))))
+    (elmo-find-fetch-strategy
+     (car pair)
+     (elmo-message-entity (car pair) (cdr pair)) ignore-cache)))
+
 (luna-define-method elmo-message-entity ((folder elmo-multi-folder) key)
   (cond
    ((numberp key)
   (dolist (child (elmo-multi-folder-children-internal folder))
     (elmo-folder-process-crosspost child)))
 
-(defsubst elmo-multi-find-fetch-strategy (folder entity ignore-cache)
-  (if entity
-      (let ((pair (elmo-multi-real-folder-number
-                  folder
-                  (elmo-msgdb-overview-entity-get-number entity)))
-           (new-entity (elmo-msgdb-copy-overview-entity entity)))
-       (setq new-entity
-             (elmo-msgdb-overview-entity-set-number new-entity (cdr pair)))
-       (elmo-find-fetch-strategy (car pair) new-entity ignore-cache))
-    (elmo-make-fetch-strategy 'entire)))
-
-(luna-define-method elmo-find-fetch-strategy
-  ((folder elmo-multi-folder)
-   entity &optional ignore-cache)
-  (elmo-multi-find-fetch-strategy folder entity ignore-cache))
-
 (luna-define-method elmo-message-fetch ((folder elmo-multi-folder)
                                        number strategy
                                        &optional section outbuf unseen)
       (setq cur-number (+ 1 cur-number)))
     t))
 
-(luna-define-method elmo-folder-diff ((folder elmo-multi-folder)
-                                     &optional numbers)
-  (elmo-multi-folder-diff folder numbers))
+(luna-define-method elmo-folder-diff ((folder elmo-multi-folder))
+  (elmo-multi-folder-diff folder))
 
-(defun elmo-multi-folder-diff (folder numbers)
+(defun elmo-multi-folder-diff (folder)
   (let ((flds (elmo-multi-folder-children-internal folder))
-       (num-list (and numbers (elmo-multi-split-numbers folder numbers)))
-       (unsync 0)
-       (messages 0)
-       diffs)
+       (news 0)
+       (unreads 0)
+       (alls 0)
+       no-unreads diff)
     (while flds
-      (setq diffs (nconc diffs (list (elmo-folder-diff (car flds)
-                                                      (car num-list)))))
+      (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)))
-    (while diffs
-      (and (car (car diffs))
-          (setq unsync (+ unsync (car (car diffs)))))
-      (setq messages  (+ messages (cdr (car diffs))))
-      (setq diffs (cdr diffs)))
-    (elmo-folder-set-info-hashtb folder nil messages)
-    (cons unsync messages)))
+    (if no-unreads
+       (cons news alls)
+      (list news unreads alls))))
 
 (luna-define-method elmo-folder-list-unreads ((folder elmo-multi-folder))
   (let ((cur-number 0)
     (while flds
       (setq cur-number (+ cur-number 1))
       (when numlist
-       (setq cur-numlist (car numlist-list))
-       (if (null cur-numlist)
-           ;; t means filter all.
-           (setq cur-numlist t)))
+       (setq cur-numlist (car numlist-list)))
       (setq ret-val (append
                     ret-val
                     (elmo-list-filter
              (elmo-folder-list-flagged child flag in-msgdb)))))
     numbers))
 
+(luna-define-method elmo-folder-set-message-modified ((folder
+                                                      elmo-multi-folder)
+                                                     modified)
+  (dolist (child (elmo-multi-folder-children-internal folder))
+    (elmo-folder-set-message-modified child modified)))
+
 (luna-define-method elmo-folder-commit ((folder elmo-multi-folder))
   (dolist (child (elmo-multi-folder-children-internal folder))
     (elmo-folder-commit child)))