* elmo-archive.el (elmo-archive-field-condition-match)
[elisp/wanderlust.git] / elmo / elmo-multi.el
index d9c2cf1..122a6df 100644 (file)
 
 (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)
   (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)))
            (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))
       (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)))
            (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))
 
     (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))