* wl-mime.el (toplevel): Require wl-vars.
[elisp/wanderlust.git] / elmo / elmo-multi.el
index ac108fe..ccc899c 100644 (file)
@@ -28,6 +28,7 @@
 
 ;;; Code:
 ;;
+(eval-when-compile (require 'cl))
 
 (require 'elmo)
 (require 'luna)
   (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-find-fetch-strategy ((folder elmo-multi-folder)
+                                             number
+                                             &optional
+                                             ignore-cache
+                                             require-entireness)
+  (let ((pair (elmo-multi-real-folder-number folder number)))
+    (elmo-find-fetch-strategy (car pair)
+                             (cdr pair)
+                             ignore-cache
+                             require-entireness)))
+
+(luna-define-method elmo-message-number ((folder elmo-multi-folder)
+                                        message-id)
+  (let ((children (elmo-multi-folder-children-internal folder))
+       match)
+    (while children
+      (when (setq match (elmo-message-number (car children) message-id))
+       (setq children nil))
+      (setq children (cdr children)))
+    match))
 
 (luna-define-method elmo-message-entity ((folder elmo-multi-folder) key)
   (cond
   (let ((pair (elmo-multi-real-folder-number folder number)))
     (elmo-message-field (car pair) (cdr pair) field)))
 
-(luna-define-method elmo-message-flags ((folder elmo-multi-folder) number
-                                       &optional msgid)
+(luna-define-method elmo-message-flag-available-p ((folder
+                                                   elmo-multi-folder) number
+                                                   flag)
   (let ((pair (elmo-multi-real-folder-number folder number)))
-    (elmo-message-flags (car pair) (cdr pair) msgid)))
+    (elmo-message-flag-available-p (car pair) (cdr pair) flag)))
+
+(luna-define-method elmo-message-flags ((folder elmo-multi-folder) number)
+  (let ((pair (elmo-multi-real-folder-number folder number)))
+    (elmo-message-flags (car pair) (cdr pair))))
 
 (defun elmo-multi-split-numbers (folder numlist &optional as-is)
   (let ((numbers (sort numlist '<))
 
 (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)))
-    (elmo-message-fetch (car pair) (cdr pair) strategy section outbuf unseen)))
+    (when (elmo-message-fetch (car pair) (cdr pair)
+                             strategy unseen section)
+      (unless unseen
+       (elmo-folder-notify-event folder 'flag-changed (list number)))
+      t)))
 
 (luna-define-method elmo-folder-delete-messages ((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)))
+    (elmo-folder-set-flag (car pair) (cdr pair) flag is-local))
+  (elmo-folder-notify-event folder 'flag-changed numbers))
 
 (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)))
+    (ignore-errors
+     (elmo-folder-unset-flag (car pair) (cdr pair) flag is-local)))
+  (elmo-folder-notify-event folder 'flag-changed numbers))
 
 (luna-define-method elmo-folder-list-flagged ((folder elmo-multi-folder)
                                              flag