X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-nmz.el;h=e690a8eb401e1112cbebbca31a7273aad57d385c;hb=9e39553b80115a949a7f04ddced4459a7797f8bd;hp=0fc85ef76f25e6f88716db2e800d4a35d9dfeb20;hpb=dd8fe676f062c7873bd6682ab6e35bf157a270d8;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-nmz.el b/elmo/elmo-nmz.el index 0fc85ef..e690a8e 100644 --- a/elmo/elmo-nmz.el +++ b/elmo/elmo-nmz.el @@ -1,4 +1,4 @@ -;;; elmo-nmz.el -- Namazu interface for ELMO. +;;; elmo-nmz.el --- Namazu interface for ELMO. ;; Copyright (C) 2000 Yuuichi Teranishi @@ -24,15 +24,17 @@ ;; ;;; 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) @@ -51,8 +53,12 @@ :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 @@ -71,12 +77,14 @@ (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 @@ -84,13 +92,25 @@ (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 @@ -155,7 +175,7 @@ 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 @@ -171,23 +191,27 @@ (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)) @@ -198,9 +222,14 @@ (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) @@ -226,13 +255,13 @@ (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)) @@ -254,8 +283,8 @@ (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