: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
(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))