;;; nnkiboze.el --- select virtual news access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002
+;; Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Keywords: news
(require 'gnus)
(require 'gnus-score)
(require 'nnoo)
+(require 'mm-util)
(eval-when-compile (require 'cl))
(nnoo-declare nnkiboze)
(defvoo nnkiboze-regexp nil
"Regexp for matching component groups.")
+(defvoo nnkiboze-file-coding-system mm-text-coding-system
+ "Coding system for nnkiboze files.")
+
\f
(defconst nnkiboze-version "nnkiboze 1.0")
(save-excursion
(set-buffer nntp-server-buffer)
(erase-buffer)
- (nnheader-insert-file-contents nov)
+ (let ((nnheader-file-coding-system nnkiboze-file-coding-system))
+ (nnheader-insert-file-contents nov))
(nnheader-nov-delete-outside-range
(car articles) (car (last articles)))
'nov))))))
;; article fetching by message-id at all.
(nntp-request-article article newsgroup gnus-nntp-server buffer)
(let* ((header (gnus-summary-article-header article))
- (xref (mail-header-xref header)))
+ (xref (mail-header-xref header))
+ num group)
(unless xref
(error "nnkiboze: No xref"))
(unless (string-match " \\([^ ]+\\):\\([0-9]+\\)" xref)
(error "nnkiboze: Malformed xref"))
- (gnus-request-article (string-to-int (match-string 2 xref))
- (match-string 1 xref)
- buffer))))
+ (setq num (string-to-int (match-string 2 xref))
+ group (match-string 1 xref))
+ (or (with-current-buffer buffer
+ (or (gnus-cache-request-article num group)
+ (gnus-agent-request-article num group)))
+ (gnus-request-article num group buffer)))))
(deffoo nnkiboze-request-scan (&optional group server)
+ (nnkiboze-possibly-change-group group)
(nnkiboze-generate-group (concat "nnkiboze:" group)))
(deffoo nnkiboze-request-group (group &optional server dont-check)
(nnkiboze-request-scan group))
(if (not (file-exists-p nov-file))
(nnheader-report 'nnkiboze "Can't select group %s" group)
- (nnheader-insert-file-contents nov-file)
+ (let ((nnheader-file-coding-system nnkiboze-file-coding-system))
+ (nnheader-insert-file-contents nov-file))
(if (zerop (buffer-size))
(nnheader-insert "211 0 0 0 %s\n" group)
(goto-char (point-min))
;; Remove NOV lines of articles that are marked as read.
(when (and (file-exists-p (nnkiboze-nov-file-name))
nnkiboze-remove-read-articles)
- (with-temp-file (nnkiboze-nov-file-name)
- (let ((cur (current-buffer)))
- (nnheader-insert-file-contents (nnkiboze-nov-file-name))
- (goto-char (point-min))
- (while (not (eobp))
- (if (not (gnus-article-read-p (read cur)))
- (forward-line 1)
- (gnus-delete-line))))))
- (setq nnkiboze-current-group nil))
+ (let ((coding-system-for-write nnkiboze-file-coding-system))
+ (with-temp-file (nnkiboze-nov-file-name)
+ (let ((cur (current-buffer))
+ (nnheader-file-coding-system nnkiboze-file-coding-system))
+ (nnheader-insert-file-contents (nnkiboze-nov-file-name))
+ (goto-char (point-min))
+ (while (not (eobp))
+ (if (not (gnus-article-read-p (read cur)))
+ (forward-line 1)
+ (gnus-delete-line))))))
+ (setq nnkiboze-current-group nil)))
(deffoo nnkiboze-open-server (server &optional defs)
(unless&nbs