Added autoload md5.
[elisp/wanderlust.git] / elmo / elmo-multi.el
index a4c2313..7ef950f 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
                                      elmo-msgdb-directory)))
 
 (luna-define-method elmo-folder-newsgroups ((folder elmo-multi-folder))
-  (delq nil
-       (elmo-flatten
-        (mapcar
-         'elmo-folder-newsgroups
-         (elmo-flatten
-          (mapcar
-           'elmo-folder-get-primitive-list
-           (elmo-multi-folder-children-internal folder)))))))
+  (apply  #'nconc
+         (mapcar
+          'elmo-folder-newsgroups
+          (elmo-multi-folder-children-internal folder))))
 
 (luna-define-method elmo-folder-get-primitive-list ((folder elmo-multi-folder))
   (elmo-flatten
   (nth (- (/ number (elmo-multi-folder-divide-number-internal folder)) 1)
        (elmo-multi-folder-children-internal folder)))
 
+(luna-define-method elmo-message-cached-p ((folder elmo-multi-folder) number)
+  (let ((pair (elmo-multi-real-folder-number folder number)))
+    (elmo-message-cached-p (car pair) (cdr pair))))
+
 (luna-define-method elmo-message-set-cached ((folder elmo-multi-folder)
                                             number cached)
   (let ((pair (elmo-multi-real-folder-number folder number)))
        (setq children (cdr children)))
       match))))
 
+(luna-define-method elmo-message-entity-parent ((folder
+                                                elmo-multi-folder) entity)
+  (elmo-message-entity
+   folder
+   (elmo-message-entity-field entity 'references)))
+
 (luna-define-method elmo-message-field ((folder elmo-multi-folder)
                                        number field)
   (let ((pair (elmo-multi-real-folder-number folder number)))
     (elmo-message-field (car pair) (cdr pair) field)))
 
-(luna-define-method elmo-message-mark ((folder elmo-multi-folder) number)
+(luna-define-method elmo-message-flags ((folder elmo-multi-folder) number)
   (let ((pair (elmo-multi-real-folder-number folder number)))
-    (elmo-message-mark (car pair) (cdr pair))))
+    (elmo-message-flags (car pair) (cdr pair))))
 
 (defun elmo-multi-split-numbers (folder numlist &optional as-is)
   (let ((numbers (sort numlist '<))
        (cons news alls)
       (list news unreads alls))))
 
-(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))
-      (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))
-      (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
   ((folder elmo-multi-folder) &optional visible-only in-msgdb)
   (let* ((flds (elmo-multi-folder-children-internal folder))
       t)))
 
 (luna-define-method elmo-folder-search ((folder elmo-multi-folder)
-                                       condition &optional numlist)
+                                       condition &optional numbers)
   (let* ((flds (elmo-multi-folder-children-internal folder))
         (cur-number 0)
-        numlist-list cur-numlist ; for filtered search.
-        ret-val)
-    (if numlist
-       (setq numlist-list
-             (elmo-multi-split-numbers folder numlist t)))
+        numlist
+        matches)
+    (setq numbers (or numbers
+                     (elmo-folder-list-messages folder)))
     (while flds
       (setq cur-number (+ cur-number 1))
-      (when numlist
-       (setq cur-numlist (car numlist-list)))
-      (setq ret-val (append
-                    ret-val
-                    (elmo-list-filter
-                     cur-numlist
-                     (mapcar
-                      (function
-                       (lambda (x)
-                         (+
-                          (* (elmo-multi-folder-divide-number-internal
-                              folder) cur-number) x)))
-                      (elmo-folder-search
-                       (car flds) condition)))))
-      (when numlist
-       (setq numlist-list (cdr numlist-list)))
+      (setq matches (append matches
+                           (mapcar
+                            (function
+                             (lambda (x)
+                               (+
+                                (* (elmo-multi-folder-divide-number-internal
+                                    folder)
+                                   cur-number)
+                                x)))
+                            (elmo-folder-search
+                             (car flds) condition))))
       (setq flds (cdr flds)))
-    ret-val))
+    (elmo-list-filter numbers matches)))
 
 (luna-define-method elmo-message-use-cache-p ((folder elmo-multi-folder)
                                              number)
       (setq msg-list (cdr msg-list)))
     ret-val))
 
-(luna-define-method elmo-folder-mark-as-important ((folder
-                                                   elmo-multi-folder)
-                                                  numbers
-                                                  &optional
-                                                  ignore-flags)
-  (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
-    (elmo-folder-mark-as-important (car folder-numbers)
-                                  (cdr folder-numbers)
-                                  ignore-flags)))
-
-(luna-define-method elmo-folder-unmark-important ((folder
-                                                  elmo-multi-folder)
-                                                 numbers
-                                                 &optional
-                                                 ignore-flags)
-  (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
-    (elmo-folder-unmark-important (car folder-numbers)
-                                 (cdr folder-numbers)
-                                 ignore-flags)))
-
-(luna-define-method elmo-folder-mark-as-read ((folder
-                                              elmo-multi-folder)
-                                             numbers
-                                             &optional ignore-flag)
-  (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
-    (elmo-folder-mark-as-read (car folder-numbers)
-                             (cdr folder-numbers)
-                             ignore-flag)))
-
-(luna-define-method elmo-folder-unmark-read ((folder
-                                             elmo-multi-folder)
-                                            numbers
-                                            &optional ignore-flag)
-  (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
-    (elmo-folder-unmark-read (car folder-numbers)
-                            (cdr folder-numbers)
-                            ignore-flag)))
-
-(luna-define-method elmo-folder-mark-as-answered ((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-define-method elmo-folder-unmark-answered ((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-define-method elmo-folder-set-flag ((folder elmo-multi-folder)
+                                         numbers
+                                         flag
+                                         &optional is-local)
+  (dolist (pair (elmo-multi-make-folder-numbers-list folder numbers))
+    (elmo-folder-set-flag (car pair) (cdr pair) flag is-local)))
+
+(luna-define-method elmo-folder-unset-flag ((folder elmo-multi-folder)
+                                           numbers
+                                           flag
+                                           &optional is-local)
+  (dolist (pair (elmo-multi-make-folder-numbers-list folder numbers))
+    (elmo-folder-unset-flag (car pair) (cdr pair) flag is-local)))
 
 (luna-define-method elmo-folder-list-flagged ((folder elmo-multi-folder)
                                              flag