1 ;;; elmo-nmz.el -- Namazu interface for ELMO.
3 ;; Copyright (C) 2000 Yuuichi Teranishi <teranisi@gohome.org>
5 ;; Author: Yuuichi Teranishi <teranisi@gohome.org>
6 ;; Keywords: mail, net news
8 ;; This file is part of ELMO (Elisp Library for Message Orchestration).
10 ;; This program is free software; you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation; either version 2, or (at your option)
15 ;; This program is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ;; GNU General Public License for more details.
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;; Boston, MA 02111-1307, USA.
34 (defcustom elmo-nmz-default-index-path "~/Mail"
35 "*Default index path for namazu."
39 (defcustom elmo-nmz-prog "namazu"
40 "*Program name of namazu."
44 (defcustom elmo-nmz-charset 'iso-2022-jp
45 "*Charset for namazu argument."
49 (defcustom elmo-nmz-args '("--all" "--list" "--early")
50 "*Argument list for namazu to list matched files."
51 :type '(repeat string)
54 (defvar elmo-nmz-content-type-alist '(("\.html?\\'" . "text/html"))
55 "*An alist of (REGEXP . Content-Type) related filename.")
59 (luna-define-class elmo-nmz-folder
60 (elmo-map-folder) (pattern index-path))
61 (luna-define-internal-accessors 'elmo-nmz-folder))
63 (luna-define-method elmo-folder-initialize ((folder
68 (goto-char (point-min))
70 (elmo-nmz-folder-set-pattern-internal folder
74 (elmo-nmz-folder-set-index-path-internal folder
75 (buffer-substring (point)
77 (if (eq (length (elmo-nmz-folder-index-path-internal folder)) 0)
78 (elmo-nmz-folder-set-index-path-internal folder
79 elmo-nmz-default-index-path))
82 (luna-define-method elmo-folder-expand-msgdb-path ((folder
85 (elmo-replace-string-as-filename
86 (elmo-folder-name-internal folder))
87 (expand-file-name "nmz" elmo-msgdb-dir)))
89 (defun elmo-nmz-msgdb-create-entity (folder number)
90 "Create msgdb entity for the message in the FOLDER with NUMBER."
91 (elmo-msgdb-create-overview-entity-from-file
93 (elmo-map-message-location folder number)))
95 (luna-define-method elmo-folder-msgdb-create ((folder elmo-nmz-folder)
97 already-mark seen-mark
100 (let* (overview number-alist mark-alist entity
102 (setq num (length numlist))
104 (message "Creating msgdb...")
107 (elmo-nmz-msgdb-create-entity
108 folder (car numlist)))
111 (elmo-msgdb-append-element
114 (elmo-msgdb-number-add number-alist
115 (elmo-msgdb-overview-entity-get-number
117 (elmo-msgdb-overview-entity-get-id
120 (elmo-msgdb-mark-append
122 (elmo-msgdb-overview-entity-get-number
124 (or (elmo-msgdb-global-mark-get
125 (elmo-msgdb-overview-entity-get-id
128 (when (> num elmo-display-progress-threshold)
130 (setq percent (/ (* i 100) num))
131 (elmo-display-progress
132 'elmo-folder-msgdb-create "Creating msgdb..."
134 (setq numlist (cdr numlist)))
135 (message "Creating msgdb...done.")
136 (list overview number-alist mark-alist)))
138 (luna-define-method elmo-folder-message-file-p ((folder elmo-nmz-folder))
141 (luna-define-method elmo-message-file-name ((folder elmo-nmz-folder)
143 (elmo-map-message-location folder number))
145 (luna-define-method elmo-folder-message-make-temp-file-p
146 ((folder elmo-nmz-folder))
149 (luna-define-method elmo-folder-diff ((folder elmo-nmz-folder)
153 (luna-define-method elmo-folder-message-make-temp-files ((folder
158 (let ((temp-dir (elmo-folder-make-temp-dir folder))
159 (cur-number (if start-number 0)))
160 (dolist (number numbers)
161 (elmo-add-name-to-file
162 (elmo-message-file-name folder number)
164 (int-to-string (if start-number (incf cur-number) number))
168 (luna-define-method elmo-map-message-fetch ((folder elmo-nmz-folder)
170 &optional section unseen)
171 (when (file-exists-p location)
172 (insert-file-contents-as-binary location)
173 (unless (or (std11-field-body "To")
174 (std11-field-body "Resent-To")
175 (std11-field-body "Cc")
176 (std11-field-body "Bcc")
177 (std11-field-body "Newsgroups"))
179 (set-buffer-multibyte t)
180 (insert-file-contents location)
181 (goto-char (point-min))
182 (insert "Content-Type: "
183 (or (cdr (elmo-string-matched-assoc
185 elmo-nmz-content-type-alist))
187 "; charset=ISO-2022-JP\nMIME-Version: 1.0\n\n")
188 (encode-coding-region (point-min) (point-max)
189 (mime-charset-to-coding-system "ISO-2022-JP"))
190 (set-buffer-multibyte nil))))
192 (luna-define-method elmo-map-folder-list-message-locations
193 ((folder elmo-nmz-folder))
196 (apply 'call-process elmo-nmz-prog nil t t
197 (append elmo-nmz-args
199 (encode-mime-charset-string
200 (elmo-nmz-folder-pattern-internal folder)
203 (elmo-nmz-folder-index-path-internal folder)))))
204 (goto-char (point-min))
209 (setq locations (cons (buffer-substring bol (point)) locations))
213 (luna-define-method elmo-folder-exists-p ((folder elmo-nmz-folder))
216 (luna-define-method elmo-folder-search ((folder elmo-nmz-folder)
217 condition &optional from-msgs)
218 (let* ((msgs (or from-msgs (elmo-folder-list-messages folder)))
221 case-fold-search matches
225 (if (elmo-file-field-condition-match
226 (elmo-map-message-location folder (car msgs))
230 (setq matches (cons (car msgs) matches)))
232 (setq percent (/ (* i 100) num))
233 (elmo-display-progress
234 'elmo-nmz-search "Searching..."
236 (setq msgs (cdr msgs)))
239 ;;; To override elmo-map-folder methods.
240 (luna-define-method elmo-folder-list-unreads-internal
241 ((folder elmo-nmz-folder) unread-marks &optional mark-alist)
244 (luna-define-method elmo-folder-unmark-important ((folder elmo-nmz-folder)
248 (luna-define-method elmo-folder-mark-as-important ((folder elmo-nmz-folder)
252 (luna-define-method elmo-folder-unmark-read ((folder elmo-nmz-folder) numbers)
255 (luna-define-method elmo-folder-mark-as-read ((folder elmo-nmz-folder) numbers)
259 (product-provide (provide 'elmo-nmz) (require 'elmo-version))
261 ;;; elmo-nmz.el ends here