auth-source.el (auth-source-search): Clarify :create's meaning
[gnus] / lisp / gnus-cache.el
index 8aed047..2e8b2db 100644 (file)
@@ -1,17 +1,16 @@
 ;;; gnus-cache.el --- cache interface for Gnus
 
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
 ;;; Code:
 
-;; For Emacs < 22.2.
-(eval-and-compile
-  (unless (fboundp 'declare-function) (defmacro declare-function (&rest r))))
-
 (eval-when-compile (require 'cl))
 
 (require 'gnus)
@@ -98,9 +91,8 @@ it's not cached."
 
 (declare-function nnvirtual-find-group-art "nnvirtual" (group article))
 
-(eval-and-compile
-  (autoload 'nnml-generate-nov-databases-directory "nnml")
-  (autoload 'nnvirtual-find-group-art "nnvirtual"))
+(autoload 'nnml-generate-nov-databases-directory "nnml")
+(autoload 'nnvirtual-find-group-art "nnvirtual")
 
 \f
 
@@ -183,8 +175,7 @@ it's not cached."
        ;; Save the article in the cache.
        (if (file-exists-p file)
            t                           ; The article already is saved.
-         (save-excursion
-           (set-buffer nntp-server-buffer)
+         (with-current-buffer nntp-server-buffer
            (require 'gnus-art)
            (let ((gnus-use-cache nil)
                  (gnus-article-decode-hook nil))
@@ -387,9 +378,14 @@ Returns the list of articles removed."
   "Insert all the articles cached for this group into the current buffer."
   (interactive)
   (let ((gnus-verbose (max 6 gnus-verbose)))
-    (if (not gnus-newsgroup-cached)
-       (gnus-message 3 "No cached articles for this group")
-      (gnus-summary-goto-subjects gnus-newsgroup-cached))))
+    (cond
+     ((not gnus-newsgroup-cached)
+      (gnus-message 3 "No cached articles for this group"))
+     ;; This is faster if there are few articles to insert.
+     ((< (length gnus-newsgroup-cached) 20)
+      (gnus-summary-goto-subjects gnus-newsgroup-cached))
+     (t
+      (gnus-summary-include-articles gnus-newsgroup-cached)))))
 
 (defun gnus-summary-limit-include-cached ()
   "Limit the summary buffer to articles that are cached."
@@ -557,8 +553,7 @@ system for example was used.")
   (let ((cache-buf (gnus-get-buffer-create " *gnus-cache*"))
        beg end)
     (gnus-cache-save-buffers)
-    (save-excursion
-      (set-buffer cache-buf)
+    (with-current-buffer cache-buf
       (erase-buffer)
       (let ((coding-system-for-read gnus-cache-overview-coding-system)
            (file-name-coding-system nnmail-pathname-coding-system))
@@ -608,7 +603,7 @@ system for example was used.")
        (insert-file-contents (gnus-cache-file-name group entry)))
       (goto-char (point-min))
       (insert "220 ")
-      (princ (car cached) (current-buffer))
+      (princ (pop cached) (current-buffer))
       (insert " Article retrieved.\n")
       (search-forward "\n\n" nil 'move)
       (delete-region (point) (point-max))
@@ -847,8 +842,7 @@ supported."
            ,@body)
      (when (and gnus-cache-need-update-total-fetched-for
                (not gnus-cache-inhibit-update-total-fetched-for))
-       (save-excursion
-         (set-buffer gnus-group-buffer)
+       (with-current-buffer gnus-group-buffer
          (setq gnus-cache-need-update-total-fetched-for nil)
          (gnus-group-update-group ,group t)))))
 
@@ -871,7 +865,7 @@ supported."
           (while (setq file (pop files))
             (setq attrs (file-attributes file))
             (unless (nth 0 attrs)
-              (incf size (float (nth 7 attrs)))))))         
+              (incf size (float (nth 7 attrs)))))))
 
        (setq gnus-cache-need-update-total-fetched-for t)
 
@@ -882,10 +876,10 @@ supported."
     (gnus-cache-with-refreshed-group
      group
      (let* ((entry (or (gnus-gethash group gnus-cache-total-fetched-hashtb)
-                      (gnus-sethash group (make-list 2 0) 
+                      (gnus-sethash group (make-list 2 0)
                                     gnus-cache-total-fetched-hashtb)))
            (file-name-coding-system nnmail-pathname-coding-system)
-           (size (or (nth 7 (file-attributes 
+           (size (or (nth 7 (file-attributes
                              (or file
                                  (gnus-cache-file-name group ".overview"))))
                      0)))
@@ -914,11 +908,10 @@ supported."
       (if entry
          (apply '+ entry)
        (let ((gnus-cache-inhibit-update-total-fetched-for (not no-inhibit)))
-         (+ 
+         (+
           (gnus-cache-update-overview-total-fetched-for group nil)
           (gnus-cache-update-file-total-fetched-for     group nil)))))))
 
 (provide 'gnus-cache)
 
-;; arch-tag: 05a79442-8c58-4e65-bd0a-3cbb1b89a33a
 ;;; gnus-cache.el ends here