* wl-summary.el (wl-summary-forward): Don't call set-buffer since
[elisp/wanderlust.git] / wl / wl-refile.el
index feb8282..b128365 100644 (file)
@@ -40,6 +40,8 @@
 (defvar wl-refile-subject-alist nil)
 (defvar wl-refile-subject-alist-file-name "refile-subject-alist")
 
+(defvar wl-refile-default-from-folder-path-separator "/")
+
 (defvar wl-refile-alist-max-length 1000)
 
 (defun wl-refile-alist-setup ()
   '(wl-refile-guess-by-rule
     wl-refile-guess-by-msgid
     wl-refile-guess-by-subject
-    wl-refile-guess-by-history)
+    wl-refile-guess-by-history
+    wl-refile-guess-by-from)
   "*Functions in this list are used for guessing refile destination folder.")
 
 ;; 2000-11-05: *-func-list -> *-functions
 (elmo-define-obsolete-variable 'wl-refile-guess-func-list
                               'wl-refile-guess-functions)
 
-(defun wl-refile-guess (entity)
-  (let ((flist wl-refile-guess-functions) guess)
+(defun wl-refile-guess (entity &optional functions)
+  (let ((flist (or functions wl-refile-guess-functions))
+       guess)
     (while flist
       (if (setq guess (funcall (car flist) entity))
          (setq flist nil)
@@ -216,19 +220,15 @@ If RULE does not match ENTITY, returns nil."
                    (downcase (wl-address-header-extract-address entity))))
                 (wl-parse-addresses
                  (concat
-                  (elmo-msgdb-overview-entity-get-to entity) ","
-                  (elmo-msgdb-overview-entity-get-cc entity)))))
+                  (elmo-message-entity-field entity 'to) ","
+                  (elmo-message-entity-field entity 'cc)))))
        ret-val)
-    (setq tocc-list (elmo-list-delete
-                    (or wl-user-mail-address-list
-                        (list (wl-address-header-extract-address wl-from)))
-                    tocc-list))
+    (setq tocc-list (wl-address-delete-user-mail-addresses tocc-list))
     (while tocc-list
       (if (setq ret-val (cdr (assoc (car tocc-list) wl-refile-alist)))
          (setq tocc-list nil)
        (setq tocc-list (cdr tocc-list))))
-    (or ret-val
-       (wl-refile-guess-by-from entity))))
+    ret-val))
 
 (defun wl-refile-get-account-part-from-address (address)
   (if (string-match "\\([^@]+\\)@[^@]+" address)
@@ -236,16 +236,21 @@ If RULE does not match ENTITY, returns nil."
     address))
 
 (defun wl-refile-guess-by-from (entity)
-  (let ((from
-        (downcase (wl-address-header-extract-address
-                   (elmo-msgdb-overview-entity-get-from entity)))))
+  (let ((from (downcase (wl-address-header-extract-address
+                        (elmo-message-entity-field entity 'from))))
+       (folder (elmo-make-folder wl-refile-default-from-folder))
+       (elmo-path-sep wl-refile-default-from-folder-path-separator))
     ;; search from alist
     (or (cdr (assoc from wl-refile-alist))
-       (format "%s/%s" wl-refile-default-from-folder
-               (wl-refile-get-account-part-from-address from)))))
+       (concat
+        (elmo-folder-prefix-internal folder)
+        (elmo-concat-path
+         (substring wl-refile-default-from-folder
+                    (length (elmo-folder-prefix-internal folder)))
+         (wl-refile-get-account-part-from-address from))))))
 
 (defun wl-refile-guess-by-msgid (entity)
-  (cdr (assoc (elmo-msgdb-overview-entity-get-references entity)
+  (cdr (assoc (elmo-message-entity-field entity 'references)
              wl-refile-msgid-alist)))
 
 (defun wl-refile-guess-by-subject (entity)