Fix typo in message
[elisp/wanderlust.git] / elmo / elsp-sa.el
index e4bd6f2..47a1c82 100644 (file)
   :type '(file :tag "Program name of SpamAssassin Learner.")
   :group 'elmo-spam-spamassassin)
 
+(defcustom elmo-spam-spamassassin-max-messages-per-process 30
+  "Number of messages processed at once."
+  :type 'integer
+  :group 'elmo-spam-spamassassin)
+
 (defcustom elmo-spamassassin-debug nil
   "Non-nil to debug elmo spamassassin spam backend."
   :type 'boolean
@@ -71,7 +76,7 @@
                (cons
                 elmo-spam-spamassassin-learn-program
                 elmo-spam-spamassassin-learn-program-arguments))
-              (t (error "Internal error.")))))
+              (t (error "Internal error")))))
     (apply #'call-process-region
           (point-min) (point-max)
           (car pair)
                                                    buffer &optional restore)
   (with-current-buffer buffer
     (eq 0 (apply 'elmo-spamassassin-call 'learn
-                (list (when restore "--forget") "--spam")))))
+                (list "--spam")))))
 
 (luna-define-method elmo-spam-register-good-buffer ((processor elsp-sa)
                                                    buffer &optional restore)
   (with-current-buffer buffer
     (eq 0 (apply 'elmo-spamassassin-call 'learn
-                (list (when restore "--forget") "--ham")))))
+                (list "--ham")))))
+
+(defsubst elmo-spam-spamassassin-register-messages (folder
+                                                   numbers
+                                                   spam
+                                                   restore)
+  (if (not (< 0 elmo-spam-spamassassin-max-messages-per-process))
+      (error "\
+non-positive value for `elmo-spam-spamassassin-max-messages-per-process'"))
+  (elmo-spam-process-messages-as-mbox
+   folder numbers elmo-spam-spamassassin-max-messages-per-process
+   (lambda (count spam restore)
+     (apply 'elmo-spamassassin-call 'learn
+           (delq nil
+                 (list "--mbox"
+                       (if spam "--spam" "--ham"))))
+     (elmo-progress-notify 'elmo-spam-register count))
+   spam restore))
+
+(luna-define-method elmo-spam-register-spam-messages :around
+  ((processor elsp-sa) folder &optional numbers restore)
+  (let ((numbers (or numbers (elmo-folder-list-messages folder t t))))
+    (if (> (length numbers) 1)
+       (elmo-spam-spamassassin-register-messages folder numbers t restore)
+      (luna-call-next-method))))
+
+(luna-define-method elmo-spam-register-good-messages :around
+  ((processor elsp-sa) folder &optional numbers restore)
+  (let ((numbers (or numbers (elmo-folder-list-messages folder t t))))
+    (if (> (length numbers) 1)
+       (elmo-spam-spamassassin-register-messages folder numbers nil restore)
+      (luna-call-next-method))))
 
 (require 'product)
 (product-provide (provide 'elsp-sa) (require 'elmo-version))