* elmo-archive.el (elmo-archive-field-condition-match)
[elisp/wanderlust.git] / elmo / elmo-spam.el
index 936f47b..e197fe5 100644 (file)
@@ -122,11 +122,36 @@ If optional argument RESTORE is non-nil, unregister from spam list.")
 ;; for internal use
 (defun elmo-spam-message-fetch (folder number)
   (let (elmo-message-fetch-threshold)
+    (when enable-multibyte-characters
+      (set-buffer-multibyte nil))
     (elmo-message-fetch
      folder number
-     (elmo-find-fetch-strategy folder
-                              (elmo-message-entity folder number))
-     nil (current-buffer) 'unread)))
+     (elmo-find-fetch-strategy folder number nil 'entire)
+     'unread)))
+
+(defun elmo-spam-process-messages-as-mbox (folder numbers number-per-process
+                                                 function &rest args)
+  (with-temp-buffer
+    (while numbers
+      (let ((count 0))
+       (while (and numbers (< count number-per-process))
+         (insert "From MAILER-DAEMON@example.com\n")
+         (let ((begin (point)))
+           (insert
+            (with-temp-buffer
+              (elmo-spam-message-fetch folder (car numbers))
+              (buffer-string)))
+           (goto-char begin)
+           (while (re-search-forward "^>*From " nil t)
+             (goto-char (match-beginning 0))
+             (insert ?>)
+             (forward-line))
+           (goto-char (point-max))
+           (insert "\n\n"))
+         (setq count (1+ count)
+               numbers (cdr numbers)))
+       (apply function count args)
+       (erase-buffer)))))
 
 ;; generic implement
 (luna-define-method elmo-spam-message-spam-p ((processor elsp-generic)
@@ -151,7 +176,6 @@ If optional argument RESTORE is non-nil, unregister from spam list.")
                                                      numbers restore)
   (let ((numbers (or numbers (elmo-folder-list-messages folder t t))))
     (with-temp-buffer
-      (buffer-disable-undo (current-buffer))
       (dolist (number numbers)
        (erase-buffer)
        (elmo-spam-message-fetch folder number)
@@ -164,7 +188,6 @@ If optional argument RESTORE is non-nil, unregister from spam list.")
                                                      numbers restore)
   (let ((numbers (or numbers (elmo-folder-list-messages folder t t))))
     (with-temp-buffer
-      (buffer-disable-undo (current-buffer))
       (dolist (number numbers)
        (erase-buffer)
        (elmo-spam-message-fetch folder number)
@@ -232,7 +255,7 @@ If optional argument RESTORE is non-nil, unregister from spam list.")
           (lambda (field-name)
             (or (elmo-message-entity-field entity
                                            (intern (downcase field-name))
-                                           'decode)
+                                           'string)
                 (progn
                   (unless buffer
                     (setq buffer (get-buffer-create