- (unless gnus-namazu-indexed-servers
- (setq gnus-namazu-indexed-servers
- (delq nil
- (mapcar (lambda (method)
- (when (memq (car method) '(nnml nnmh))
- method))
- (cons gnus-select-method
- gnus-secondary-select-methods)))))
- (unless gnus-namazu-indexed-servers
- (error "%s" "Can't find either nnml backend or nnmh backend"))
- (unless (and (stringp gnus-namazu-index-directory)
- (file-directory-p gnus-namazu-index-directory)
- (file-readable-p
- (expand-file-name "NMZ.i" gnus-namazu-index-directory)))
- (error "%s" "Can't find index. Check `gnus-namazu-index-directory'")))
-
-
-;; To suppress byte-compile warning.
-(eval-when-compile
- (defvar nnml-directory)
- (defvar nnmh-directory))
+ (and (boundp 'gnus-group-name-charset-group-alist)
+ (not (member (cons gnus-namazu/group-name-regexp
+ gnus-namazu-coding-system)
+ gnus-group-name-charset-group-alist))
+ (let ((pair (assoc gnus-namazu/group-name-regexp
+ gnus-group-name-charset-group-alist)))
+ (if pair
+ (setcdr pair gnus-namazu-coding-system)
+ (push (cons gnus-namazu/group-name-regexp
+ gnus-namazu-coding-system)
+ gnus-group-name-charset-group-alist))))
+ (unless gnus-namazu-case-sensitive-filesystem
+ ;; FIXME: The alist to map group names in lower case to real names
+ ;; is reconstructed every when gnus-namazu/setup() is called.
+ ;; This reconstruction make gnus-namazu-search() slow.
+ (setq gnus-namazu/group-alist nil)
+ (dolist (server (gnus-namazu/indexed-servers))
+ (dolist (group (gnus-namazu/request-list server))
+ (let ((name (gnus-group-prefixed-name group server)))
+ (unless (assoc name gnus-namazu/group-alist)
+ (push (cons (downcase name) name) gnus-namazu/group-alist)))))))
+
+(defun gnus-namazu/shutdown ()
+ (setq gnus-namazu/group-alist nil))
+(add-hook 'gnus-exit-gnus-hook 'gnus-namazu/shutdown)
+
+(defun gnus-namazu/request-list (server)
+ "Return groups of the server SERVER."
+ (and (memq (car server) '(nnml nnmh))
+ (nnoo-change-server (car server) (nth 1 server) (nthcdr 2 server))
+ (gnus-request-list server)
+ (mapcar (function car)
+ (if (eq 'nnml (car server))
+ nnml-group-alist
+ nnmh-group-alist))))