* texi/gnus-ja.texi (Article Date): Update Japanese translation.
[elisp/gnus.git-] / lisp / gnus-cache.el
index 574821e..680b4cf 100644 (file)
@@ -3,6 +3,8 @@
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;;         Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+;;         MORIOKA Tomohiko <morioka@jaist.ac.jp>
 ;; Keywords: news
 
 ;; This file is part of GNU Emacs.
@@ -27,6 +29,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
 
 (require 'gnus)
 (require 'gnus-int)
@@ -89,6 +92,7 @@ it's not cached."
 (defvar gnus-cache-buffer nil)
 (defvar gnus-cache-active-hashtb nil)
 (defvar gnus-cache-active-altered nil)
+(defvar gnus-cache-write-file-coding-system 'raw-text)
 
 (eval-and-compile
   (autoload 'nnml-generate-nov-databases-1 "nnml")
@@ -128,9 +132,8 @@ it's not cached."
          (set-buffer buffer)
          (if (> (buffer-size) 0)
              ;; Non-empty overview, write it to a file.
-             (let ((coding-system-for-write
-                    gnus-cache-overview-coding-system))
-               (gnus-write-buffer overview-file))
+             (gnus-write-buffer-as-coding-system
+              gnus-cache-overview-coding-system overview-file)
            ;; Empty overview file, remove it
            (when (file-exists-p overview-file)
              (delete-file overview-file))
@@ -146,11 +149,12 @@ it's not cached."
       (setq gnus-cache-buffer nil))))
 
 (defun gnus-cache-possibly-enter-article
-  (group article ticked dormant unread &optional force)
+  (group article headers ticked dormant unread &optional force)
   (when (and (or force (not (eq gnus-use-cache 'passive)))
             (numberp article)
-            (> article 0))             ; This might be a dummy article.
-    (let ((number article) file headers)
+            (> article 0)              ; This might be a dummy article.
+            (vectorp headers))
+    (let ((number article) file)
       ;; If this is a virtual group, we find the real group.
       (when (gnus-virtual-group-p group)
        (let ((result (nnvirtual-find-group-art
@@ -177,8 +181,8 @@ it's not cached."
                  (gnus-article-decode-hook nil))
              (gnus-request-article-this-buffer number group))
            (when (> (buffer-size) 0)
-             (let ((coding-system-for-write gnus-cache-coding-system))
-               (gnus-write-buffer file))
+             (gnus-write-buffer-as-coding-system
+              gnus-cache-write-file-coding-system file)
              (setq headers (nnheader-parse-head t))
              (mail-header-set-number headers number)
              (gnus-cache-change-buffer group)
@@ -256,8 +260,8 @@ it's not cached."
     (when (file-exists-p file)
       (erase-buffer)
       (gnus-kill-all-overlays)
-      (let ((coding-system-for-read gnus-cache-coding-system))
-       (insert-file-contents file))
+      (let ((nnheader-file-coding-system gnus-cache-coding-system))
+       (nnheader-insert-file-contents file))
       t)))
 
 (defun gnus-cache-possibly-alter-active (group active)
@@ -303,9 +307,9 @@ it's not cached."
            ;; unsuccessful), so we use the cached headers exclusively.
            (set-buffer nntp-server-buffer)
            (erase-buffer)
-           (let ((coding-system-for-read
+           (let ((nnheader-file-coding-system
                   gnus-cache-overview-coding-system))
-             (insert-file-contents cache-file))
+             (nnheader-insert-file-contents cache-file))
            'nov)
           ((eq type 'nov)
            ;; We have both cached and uncached NOV headers, so we
@@ -330,6 +334,7 @@ Returns the list of articles entered."
       (if (natnump article)
          (when (gnus-cache-possibly-enter-article
                 gnus-newsgroup-name article
+                (gnus-summary-article-header article)
                 nil nil nil t)
            (push article out))
        (gnus-message 2 "Can't cache article %d" article))
@@ -376,10 +381,10 @@ Returns the list of articles removed."
   (let ((cached (sort (copy-sequence gnus-newsgroup-cached) '>))
        (gnus-verbose (max 6 gnus-verbose)))
     (if cached
-        (progn
-          (gnus-summary-limit cached)
-          (gnus-summary-position-point))
-        (gnus-message 3 "No cached articles for this group"))))
+       (progn
+         (gnus-summary-limit cached)
+         (gnus-summary-position-point))
+      (gnus-message 3 "No cached articles for this group"))))
 
 ;;; Internal functions.
 
@@ -426,8 +431,8 @@ Returns the list of articles removed."
                      ?. ?_)))
          ;; Translate the first colon into a slash.
          (when (string-match ":" group)
-                 (setq group (concat (substring group 0 (match-beginning 0))
-                                     "/" (substring group (match-end 0)))))
+           (setq group (concat (substring group 0 (match-beginning 0))
+                               "/" (substring group (match-end 0)))))
          (nnheader-replace-chars-in-string group ?. ?/)))
       t)
      gnus-cache-directory))))
@@ -438,7 +443,7 @@ Returns the list of articles removed."
   (when (gnus-cache-possibly-remove-article article nil nil nil t)
     (let ((gnus-use-cache nil))
       (gnus-cache-possibly-enter-article
-       gnus-newsgroup-name article
+       gnus-newsgroup-name article (gnus-summary-article-header article)
        nil nil nil t))))
 
 (defun gnus-cache-possibly-remove-article (article ticked dormant unread
@@ -494,9 +499,8 @@ Returns the list of articles removed."
     (save-excursion
       (set-buffer cache-buf)
       (erase-buffer)
-      (let ((coding-system-for-read
-            gnus-cache-overview-coding-system))
-       (insert-file-contents
+      (let ((nnheader-file-coding-system gnus-cache-overview-coding-system))
+       (nnheader-insert-file-contents
         (or file (gnus-cache-file-name group ".overview"))))
       (goto-char (point-min))
       (insert "\n")
@@ -539,9 +543,9 @@ Returns the list of articles removed."
       (save-excursion
        (set-buffer cache-buf)
        (erase-buffer)
-       (let ((coding-system-for-read
-              gnus-cache-coding-system))
-         (insert-file-contents (gnus-cache-file-name group (car cached))))
+       (let ((nnheader-file-coding-system gnus-cache-coding-system))
+         (nnheader-insert-file-contents
+          (gnus-cache-file-name group (car cached))))
        (goto-char (point-min))
        (insert "220 ")
        (princ (car cached) (current-buffer))
@@ -713,7 +717,6 @@ If GROUP is non-nil, also cater to `gnus-cacheable-groups' and
                  (string-match gnus-cacheable-groups group))
              (or (not gnus-uncacheable-groups)
                  (not (string-match gnus-uncacheable-groups group)))))))
-       
 
 (provide 'gnus-cache)