* wl-acap.el (wl-acap-original-msgdb-directory): Renamed from
[elisp/wanderlust.git] / elmo / elmo-nmz.el
index 0fc85ef..e690a8e 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>
 
 ;;
 
 ;;; Commentary:
-;; 
+;;
 
 ;;; Code:
-;; 
+;;
 (require 'elmo)
 (require 'elmo-map)
+(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)
 
   :type '(repeat string)
   :group 'elmo)
 
-(defvar elmo-nmz-content-type-alist '(("\.html?\\'" . "text/html"))
-  "*An alist of (REGEXP . Content-Type) related filename.")
+(defcustom elmo-nmz-index-alias-alist nil
+  "*Alist of ALIAS and INDEX-PATH."
+  :type '(repeat (cons (string :tag "Alias Name")
+                      (choice (directory :tag "Index Path")
+                              (repeat (directory :tag "Index Path")))))
+  :group 'elmo)
 
 ;;; "namazu search"
 (eval-and-compile
                                          (buffer-substring
                                           (+ 1 (point-min))
                                           (- (point) 1)))
-    (elmo-nmz-folder-set-index-path-internal folder
-                                            (buffer-substring (point)
-                                                              (point-max)))
-    (if (eq (length (elmo-nmz-folder-index-path-internal folder)) 0)
-       (elmo-nmz-folder-set-index-path-internal folder
-                                                elmo-nmz-default-index-path))
+    (let ((index (buffer-substring (point) (point-max))))
+      (elmo-nmz-folder-set-index-path-internal
+       folder
+       (cond ((cdr (assoc index elmo-nmz-index-alias-alist)))
+            ((eq (length index) 0)
+             elmo-nmz-default-index-path)
+            (t
+             index))))
     folder))
 
 (luna-define-method elmo-folder-expand-msgdb-path ((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."
-  (elmo-msgdb-create-overview-entity-from-file
-   number
-   (elmo-map-message-location folder number)))
+  (let ((location (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)
+               (> (length (elmo-msgdb-overview-entity-get-cc entity)) 0)
+               (not (string= (elmo-msgdb-overview-entity-get-subject entity)
+                             elmo-no-subject)))
+      (elmo-msgdb-overview-entity-set-subject entity location)
+      (setq uid (nth 2 (file-attributes location)))
+      (elmo-msgdb-overview-entity-set-from entity
+                                          (concat
+                                           (user-full-name uid)
+                                           " <"(user-login-name uid) "@"
+                                           (system-name) ">")))
+    entity))
 
 (luna-define-method elmo-folder-msgdb-create ((folder elmo-nmz-folder)
                                              numlist new-mark
                                                         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
   (when (file-exists-p location)
     (insert-file-contents-as-binary location)
     (unless (or (std11-field-body "To")
-               (std11-field-body "Resent-To")
                (std11-field-body "Cc")
-               (std11-field-body "Bcc")
-               (std11-field-body "Newsgroups"))
-      (erase-buffer)
-      (set-buffer-multibyte t)
-      (insert-file-contents location)
-      (goto-char (point-min))
-      (insert "Content-Type: "
-             (or (cdr (elmo-string-matched-assoc
-                       location
-                       elmo-nmz-content-type-alist))
-                 "text/plain")
-             "; charset=ISO-2022-JP\nMIME-Version: 1.0\n\n")
-      (encode-coding-region (point-min) (point-max)
-                           (mime-charset-to-coding-system "ISO-2022-JP"))
-      (set-buffer-multibyte nil))))
+               (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)))))
 
 (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)
           (elmo-map-message-location folder (car msgs))
           condition
           (car msgs)
-          orig)
-         (setq matches (cons (car msgs) matches)))
+          orig)
+         (setq matches (cons (car msgs) matches)))
        (setq i (1+ i))
        (setq percent (/ (* i 100) num))
        (elmo-display-progress
-        'elmo-nmz-search "Searching..."
-        percent)
+       'elmo-nmz-search "Searching..."
+       percent)
        (setq msgs (cdr msgs)))
     matches))
 
 
 (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