* wl-util.el (wl-read-shell-commande): New function or alias.
[elisp/wanderlust.git] / wl / wl-refile.el
index feb8282..4b134c6 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 ()
   (let (tocc-list from key hit ml)
     (setq dst (elmo-string dst))
     (setq tocc-list
-         (mapcar (function
-                  (lambda (entity)
-                    (downcase (wl-address-header-extract-address entity))))
-                 (wl-parse-addresses
-                  (concat
-                   (elmo-message-entity-field entity 'to) ","
-                   (elmo-message-entity-field entity 'cc)))))
+         (mapcar (lambda (entity)
+                   (downcase (wl-address-header-extract-address entity)))
+                 (append
+                  (elmo-message-entity-field entity 'to)
+                  (elmo-message-entity-field entity 'cc))))
     (while tocc-list
       (if (wl-string-member
           (car tocc-list)
 
 (defun wl-refile-subject-learn (entity dst)
   (let ((subject (funcall wl-summary-subject-filter-function
-                         (elmo-message-entity-field entity 'subject 'decode)))
+                         (elmo-message-entity-field entity 'subject)))
        hit)
     (setq dst (elmo-string dst))
     (if (and subject (not (string= subject "")))
   '(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)
@@ -198,7 +200,7 @@ If RULE does not match ENTITY, returns nil."
 
 (defun wl-refile-get-field-value (entity field)
   "Get FIELD value from ENTITY."
-  (elmo-message-entity-field entity (intern (downcase field)) 'decode))
+  (elmo-message-entity-field entity (intern (downcase field)) 'string))
 
 (defun wl-refile-guess-by-rule (entity)
   (let ((rules wl-refile-rule-alist)
@@ -211,24 +213,18 @@ If RULE does not match ENTITY, returns nil."
 
 (defun wl-refile-guess-by-history (entity)
   (let ((tocc-list
-        (mapcar (function
-                 (lambda (entity)
-                   (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)))))
+        (mapcar (lambda (entity)
+                  (downcase (wl-address-header-extract-address entity)))
+                (append
+                 (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,21 +232,26 @@ 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)
   (cdr (assoc (funcall wl-summary-subject-filter-function
-                      (elmo-message-entity-field entity 'subject 'decode))
+                      (elmo-message-entity-field entity 'subject))
              wl-refile-subject-alist)))
 
 (require 'product)