* etc/icons/wl-draft-save-and-exit-up.xpm: Modified.
[elisp/wanderlust.git] / elmo / elmo-nmz.el
index d0c414d..269e2a8 100644 (file)
@@ -1,4 +1,4 @@
-;;; elmo-nmz.el -- Namazu interface for ELMO.
+;;; elmo-nmz.el --- Namazu interface for ELMO.
 
 ;; Copyright (C) 2000 Yuuichi Teranishi <teranisi@gohome.org>
 
@@ -33,7 +33,8 @@
 (require 'mime-edit)
 
 (defcustom elmo-nmz-default-index-path "~/Mail"
-  "*Default index path for namazu."
+  "*Default index path for namazu.
+If the value is a list, all elements are used as index paths for namazu."
   :type 'directory
   :group 'elmo)
 
@@ -47,7 +48,7 @@
   :type 'symbol
   :group 'elmo)
 
-(defcustom elmo-nmz-args '("--all" "--list" "--early")
+(defcustom elmo-nmz-args '("--all" "--list" "--late")
   "*Argument list for namazu to list matched files."
   :type '(repeat string)
   :group 'elmo)
 (defcustom elmo-nmz-index-alias-alist nil
   "*Alist of ALIAS and INDEX-PATH."
   :type '(repeat (cons (string :tag "Alias Name")
-                      (directory :tag "Index Path")))
+                      (choice (directory :tag "Index Path")
+                              (repeat (directory :tag "Index Path")))))
   :group 'elmo)
 
+(defvar elmo-nmz-use-drive-letter (if (memq system-type
+                                           '(OS/2 emx windows-nt)) t nil)
+  "*If non-nil, do a drive letter conversion (e.g. /a|/ => a:/).")
+
 ;;; "namazu search"
 (eval-and-compile
   (luna-define-class elmo-nmz-folder
   (expand-file-name
    (elmo-replace-string-as-filename
     (elmo-folder-name-internal folder))
-   (expand-file-name "nmz" elmo-msgdb-dir)))
+   (expand-file-name "nmz" elmo-msgdb-directory)))
 
 (defun elmo-nmz-msgdb-create-entity (folder number)
   "Create msgdb entity for the message in the FOLDER with NUMBER."
-  (let ((location (elmo-map-message-location folder number))
+  (let ((location (expand-file-name (elmo-map-message-location folder number)))
        entity uid)
     (setq entity (elmo-msgdb-create-overview-entity-from-file number location))
     (unless (or (> (length (elmo-msgdb-overview-entity-get-to entity)) 0)
                                                         numbers
                                                         &optional
                                                         start-number)
-  (let ((temp-dir (elmo-folder-make-temp-dir folder))
+  (let ((temp-dir (elmo-folder-make-temporary-directory folder))
        (cur-number (if start-number 0)))
     (dolist (number numbers)
-      (elmo-add-name-to-file
+      (elmo-copy-file
        (elmo-message-file-name folder number)
        (expand-file-name
        (int-to-string (if start-number (incf cur-number) number))
                                            location strategy
                                            &optional section unseen)
   (when (file-exists-p location)
-    (insert-file-contents-as-binary location)
-    (unless (or (std11-field-body "To")
-               (std11-field-body "Cc")
-               (std11-field-body "Subject"))
-      (let (charset guess uid)
-       (erase-buffer)
-       (set-buffer-multibyte t)
-       (insert-file-contents location)
-       (setq charset (detect-mime-charset-region (point-min)
-                                                 (point-max)))
-       (goto-char (point-min))
-       (setq guess (mime-find-file-type location))
-       (setq uid (nth 2 (file-attributes location)))
-       (insert "From: " (concat (user-full-name uid)
-                                " <"(user-login-name uid) "@"
-                                (system-name) ">") "\n")
-       (insert "Subject: " location "\n")
-       (insert "Content-Type: "
-               (concat (nth 0 guess) "/" (nth 1 guess))
-               "; charset=" (upcase (symbol-name charset))
-               "\nMIME-Version: 1.0\n\n")
-       (encode-mime-charset-region (point-min) (point-max) charset)
-       (set-buffer-multibyte nil)))))
+    (prog1
+       (insert-file-contents-as-binary (expand-file-name location))
+      (unless (or (std11-field-body "To")
+                 (std11-field-body "Cc")
+                 (std11-field-body "Subject"))
+       (let (charset guess uid)
+         (erase-buffer)
+         (set-buffer-multibyte t)
+         (insert-file-contents (expand-file-name location))
+         (setq charset (detect-mime-charset-region (point-min)
+                                                   (point-max)))
+         (goto-char (point-min))
+         (setq guess (mime-find-file-type location))
+         (setq uid (nth 2 (file-attributes location)))
+         (insert "From: " (concat (user-full-name uid)
+                                  " <"(user-login-name uid) "@"
+                                  (system-name) ">") "\n")
+         (insert "Subject: " location "\n")
+         (insert "Content-Type: "
+                 (concat (nth 0 guess) "/" (nth 1 guess))
+                 "; charset=" (upcase (symbol-name charset))
+                 "\nMIME-Version: 1.0\n\n")
+         (encode-mime-charset-region (point-min) (point-max) charset)
+         (set-buffer-multibyte nil))))))
 
 (luna-define-method elmo-map-folder-list-message-locations
   ((folder elmo-nmz-folder))
                     (list
                      (encode-mime-charset-string
                       (elmo-nmz-folder-pattern-internal folder)
-                      elmo-nmz-charset)
-                     (expand-file-name
-                      (elmo-nmz-folder-index-path-internal folder)))))
+                      elmo-nmz-charset))
+                    (if (listp (elmo-nmz-folder-index-path-internal folder))
+                        (mapcar
+                         'expand-file-name
+                         (elmo-nmz-folder-index-path-internal folder))
+                      (list
+                       (expand-file-name
+                        (elmo-nmz-folder-index-path-internal folder))))))
       (goto-char (point-min))
       (while (not (eobp))
        (beginning-of-line)
+       ;; convert url to file path.
+       (when (looking-at "^file://")
+         (replace-match ""))
+       (when (and elmo-nmz-use-drive-letter
+                  (looking-at "^/\\([A-Za-z]\\)|/"))
+         (replace-match "\\1:/")
+         (beginning-of-line))
        (setq bol (point))
        (end-of-line)
        (setq locations (cons (buffer-substring bol (point)) locations))
        (forward-line 1))
-      locations)))
+      (nreverse locations))))
 
 (luna-define-method elmo-folder-exists-p ((folder elmo-nmz-folder))
   t)
 
-(luna-define-method elmo-folder-search ((folder elmo-nmz-folder)
-                                       condition &optional from-msgs)
-  (let* ((msgs (or from-msgs (elmo-folder-list-messages folder)))
-        (orig msgs)
-        (i 0)
-        case-fold-search matches
-        percent num
-        (num (length msgs)))
-    (while msgs
-      (if (elmo-file-field-condition-match
-          (elmo-map-message-location folder (car msgs))
-          condition
-          (car msgs)
-          orig)
-         (setq matches (cons (car msgs) matches)))
-       (setq i (1+ i))
-       (setq percent (/ (* i 100) num))
-       (elmo-display-progress
-        'elmo-nmz-search "Searching..."
-        percent)
-       (setq msgs (cdr msgs)))
-    matches))
-
 ;;; To override elmo-map-folder methods.
 (luna-define-method elmo-folder-list-unreads-internal
   ((folder elmo-nmz-folder) unread-marks &optional mark-alist)
 
 (luna-define-method elmo-folder-mark-as-read ((folder elmo-nmz-folder) numbers)
   t)
-  
+
 (require 'product)
 (product-provide (provide 'elmo-nmz) (require 'elmo-version))
 
-;;; elmo-nmz.el ends here
\ No newline at end of file
+;;; elmo-nmz.el ends here