* WL-ELS (ELMO-MODULES): Added elmo-signal.
[elisp/wanderlust.git] / elmo / elmo-pipe.el
index bf37ce4..1a499e3 100644 (file)
@@ -30,6 +30,7 @@
 ;;
 
 (require 'elmo)
+(require 'elmo-signal)
 
 (defvar elmo-pipe-folder-copied-filename "copied"
   "Copied messages number set.")
     (elmo-pipe-folder-set-copy-internal folder
                                        (string= ":"
                                                 (elmo-match-string 2 name))))
+  (elmo-pipe-connect-signals folder (elmo-pipe-folder-dst-internal folder))
   folder)
 
+(defun elmo-pipe-connect-signals (folder destination)
+  (elmo-connect-signal
+   destination 'flag-changing folder
+   (elmo-define-signal-handler (folder dst number old-flags new-flags)
+     (elmo-emit-signal 'flag-changing folder number old-flags new-flags)))
+  (elmo-connect-signal
+   destination 'flag-changed folder
+   (elmo-define-signal-handler (folder dst numbers)
+     (elmo-emit-signal 'flag-changed folder numbers)))
+  (elmo-connect-signal
+   destination 'cache-changed folder
+   (elmo-define-signal-handler (folder dst number)
+     (elmo-emit-signal 'cache-changed folder number))))
+
 (luna-define-method elmo-folder-get-primitive-list ((folder elmo-pipe-folder))
   (nconc
    (elmo-folder-get-primitive-list (elmo-pipe-folder-src-internal folder))
 
 (luna-define-method elmo-message-fetch ((folder elmo-pipe-folder)
                                        number strategy
-                                       &optional section outbuf unseen)
-  (when (elmo-message-fetch (elmo-pipe-folder-dst-internal folder)
-                           number strategy section outbuf unseen)
-    (unless unseen
-      (elmo-folder-notify-event folder 'flag-changed (list number)))
-    t))
+                                       &optional unseen section)
+  (elmo-message-fetch (elmo-pipe-folder-dst-internal folder)
+                     number strategy unseen section))
 
 (luna-define-method elmo-folder-clear :after ((folder elmo-pipe-folder)
                                              &optional keep-killed)
   (elmo-folder-delete-messages (elmo-pipe-folder-dst-internal folder)
                               numbers))
 
+(luna-define-method elmo-folder-detach-messages ((folder elmo-pipe-folder)
+                                                numbers)
+  (elmo-folder-detach-messages (elmo-pipe-folder-dst-internal folder)
+                              numbers))
+
 (defvar elmo-pipe-drained-hook nil "A hook called when the pipe is flushed.")
 
 (defsubst elmo-pipe-folder-list-target-messages (src &optional ignore-list)
                                          flag
                                          &optional is-local)
   (elmo-folder-set-flag (elmo-pipe-folder-dst-internal folder)
-                       numbers flag is-local)
-  (elmo-folder-notify-event folder 'flag-changed numbers))
+                       numbers flag is-local))
 
 (luna-define-method elmo-folder-unset-flag ((folder elmo-pipe-folder)
                                            numbers
                                            flag
                                            &optional is-local)
   (elmo-folder-unset-flag (elmo-pipe-folder-dst-internal folder)
-                         numbers flag is-local)
-  (elmo-folder-notify-event folder 'flag-changed numbers))
+                         numbers flag is-local))
 
 (luna-define-method elmo-folder-pack-numbers ((folder elmo-pipe-folder))
   (elmo-folder-pack-numbers (elmo-pipe-folder-dst-internal folder)))