Update.
[elisp/wanderlust.git] / elmo / elmo-multi.el
index bfa4259..880310c 100644 (file)
@@ -60,7 +60,7 @@
      folder
      (nconc (elmo-multi-folder-children-internal
             folder)
-           (list (elmo-make-folder (car name)))))
+           (list (elmo-get-folder (car name)))))
     (setq name (cdr name))
     (when (and (> (length name) 0)
               (eq (aref name 0) ?,))
    (elmo-define-signal-filter (folder sender)
      (memq sender (elmo-multi-folder-children-internal folder))))
   (elmo-connect-signal
-   nil 'cache-changed folder
+   nil 'status-changed folder
+   (elmo-define-signal-handler (folder child numbers)
+     (elmo-emit-signal 'status-changed folder
+                      (elmo-multi-map-numbers folder child numbers)))
+   (elmo-define-signal-filter (folder sender)
+     (memq sender (elmo-multi-folder-children-internal folder))))
+  (elmo-connect-signal
+   nil 'update-overview folder
    (elmo-define-signal-handler (folder child number)
      (elmo-emit-signal
-      'flag-changed folder
+      'update-overview folder
       (car (elmo-multi-map-numbers folder child (list number)))))
    (elmo-define-signal-filter (folder sender)
      (memq sender (elmo-multi-folder-children-internal folder)))))
   (dolist (fld (elmo-multi-folder-children-internal folder))
     (elmo-folder-close-internal fld)))
 
-(luna-define-method elmo-folder-close :after ((folder elmo-multi-folder))
+(luna-define-method elmo-folder-close ((folder elmo-multi-folder))
+  (elmo-generic-folder-close folder)
   (dolist (fld (elmo-multi-folder-children-internal folder))
-    (elmo-folder-set-msgdb-internal fld nil)))
+    (elmo-folder-close fld)))
+
+(luna-define-method elmo-message-killed-p ((folder elmo-multi-folder) number)
+  (let ((pair (elmo-multi-real-folder-number folder number)))
+    (elmo-message-killed-p (car pair) (cdr pair))))
 
 (luna-define-method elmo-folder-synchronize ((folder elmo-multi-folder)
                                             &optional
     (let* ((pair (elmo-multi-real-folder-number folder key))
           (entity (elmo-message-entity (car pair) (cdr pair))))
       (when entity
-       (elmo-message-entity-set-number (elmo-message-copy-entity entity)
-                                       key))))
+       (setq entity (elmo-message-copy-entity entity))
+       (elmo-message-entity-set-number entity key)
+       entity)))
    ((stringp key)
     (let ((children (elmo-multi-folder-children-internal folder))
          (cur-number 0)
    (elmo-message-entity-field entity 'references)))
 
 (luna-define-method elmo-message-field ((folder elmo-multi-folder)
-                                       number field)
+                                       number field &optional type)
   (let ((pair (elmo-multi-real-folder-number folder number)))
-    (elmo-message-field (car pair) (cdr pair) field)))
+    (elmo-message-field (car pair) (cdr pair) field type)))
 
 (luna-define-method elmo-message-flag-available-p ((folder
                                                    elmo-multi-folder) number
          (setq flag-alist (cons pair flag-alist)))))
     flag-alist))
 
+(luna-define-method elmo-folder-recover-messages ((folder elmo-multi-folder)
+                                                 numbers)
+  (dolist (element (elmo-multi-split-numbers folder 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))