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)
56 (luna-define-class elmo-nmz-folder
57 (elmo-map-folder) (pattern index-path))
58 (luna-define-internal-accessors 'elmo-nmz-folder))
60 (luna-define-method elmo-folder-initialize ((folder
65 (goto-char (point-min))
67 (elmo-nmz-folder-set-pattern-internal folder
71 (elmo-nmz-folder-set-index-path-internal folder
72 (buffer-substring (point)
74 (if (eq (length (elmo-nmz-folder-index-path-internal folder)) 0)
75 (elmo-nmz-folder-set-index-path-internal folder
76 elmo-nmz-default-index-path))
79 (luna-define-method elmo-folder-expand-msgdb-path ((folder
82 (elmo-replace-string-as-filename
83 (elmo-folder-name-internal folder))
84 (expand-file-name "nmz" elmo-msgdb-dir)))
86 (defun elmo-nmz-msgdb-create-entity (folder number)
87 "Create msgdb entity for the message in the FOLDER with NUMBER."
88 (elmo-msgdb-create-overview-entity-from-file
90 (elmo-map-message-location folder number)))
92 (luna-define-method elmo-folder-msgdb-create ((folder elmo-nmz-folder)
94 already-mark seen-mark
97 (let* (overview number-alist mark-alist entity
99 (setq num (length numlist))
101 (message "Creating msgdb...")
104 (elmo-nmz-msgdb-create-entity
105 folder (car numlist)))
108 (elmo-msgdb-append-element
111 (elmo-msgdb-number-add number-alist
112 (elmo-msgdb-overview-entity-get-number
114 (elmo-msgdb-overview-entity-get-id
117 (elmo-msgdb-mark-append
119 (elmo-msgdb-overview-entity-get-number
121 (or (elmo-msgdb-global-mark-get
122 (elmo-msgdb-overview-entity-get-id
125 (when (> num elmo-display-progress-threshold)
127 (setq percent (/ (* i 100) num))
128 (elmo-display-progress
129 'elmo-folder-msgdb-create "Creating msgdb..."
131 (setq numlist (cdr numlist)))
132 (message "Creating msgdb...done.")
133 (list overview number-alist mark-alist)))
135 (luna-define-method elmo-folder-message-file-p ((folder elmo-nmz-folder))
138 (luna-define-method elmo-message-file-name ((folder elmo-nmz-folder)
140 (elmo-map-message-location folder number))
142 (luna-define-method elmo-folder-message-make-temp-file-p
143 ((folder elmo-nmz-folder))
146 (luna-define-method elmo-folder-diff ((folder elmo-nmz-folder)
150 (luna-define-method elmo-folder-message-make-temp-files ((folder
155 (let ((temp-dir (elmo-folder-make-temp-dir folder))
156 (cur-number (if start-number 0)))
157 (dolist (number numbers)
158 (elmo-add-name-to-file
159 (elmo-message-file-name folder number)
161 (int-to-string (if start-number (incf cur-number) number))
165 (luna-define-method elmo-map-message-fetch ((folder elmo-nmz-folder)
166 location strategy &optional
167 section outbuf unseen)
169 (with-current-buffer outbuf
171 (when (file-exists-p location)
172 (insert-file-contents-as-binary location)
173 (elmo-delete-cr-buffer)
176 (insert-file-contents-as-binary location)
177 (elmo-delete-cr-buffer)
180 (luna-define-method elmo-map-folder-list-message-locations
181 ((folder elmo-nmz-folder))
184 (apply 'call-process elmo-nmz-prog nil t t
185 (append elmo-nmz-args
187 (encode-mime-charset-string
188 (elmo-nmz-folder-pattern-internal folder)
191 (elmo-nmz-folder-index-path-internal folder)))))
192 (goto-char (point-min))
197 (setq locations (cons (buffer-substring bol (point)) locations))
201 (luna-define-method elmo-folder-exists-p ((folder elmo-nmz-folder))
204 (luna-define-method elmo-folder-search ((folder elmo-nmz-folder)
205 condition &optional from-msgs)
206 (let* ((msgs (or from-msgs (elmo-folder-list-messages folder)))
209 case-fold-search matches
213 (if (elmo-file-field-condition-match
214 (elmo-map-message-location folder (car msgs))
218 (setq matches (cons (car msgs) matches)))
220 (setq percent (/ (* i 100) num))
221 (elmo-display-progress
222 'elmo-nmz-search "Searching..."
224 (setq msgs (cdr msgs)))
227 ;;; To override elmo-map-folder methods.
228 (luna-define-method elmo-folder-list-unreads-internal
229 ((folder elmo-nmz-folder) unread-marks)
232 (luna-define-method elmo-folder-list-importants-internal
233 ((folder elmo-nmz-folder) important-mark)
236 (luna-define-method elmo-folder-unmark-important ((folder elmo-nmz-folder)
240 (luna-define-method elmo-folder-mark-as-important ((folder elmo-nmz-folder)
244 (luna-define-method elmo-folder-unmark-read ((folder elmo-nmz-folder) numbers)
247 (luna-define-method elmo-folder-mark-as-read ((folder elmo-nmz-folder) numbers)
251 (product-provide (provide 'elmo-nmz) (require 'elmo-version))
253 ;;; elmo-nmz.el ends here