-;;; 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