diff lisp/gnus/nnkiboze.el @ 56927:55fd4f77387a after-merge-gnus-5_10

Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-523 Merge from emacs--gnus--5.10, gnus--rel--5.10 Patches applied: * miles@gnu.org--gnu-2004/emacs--gnus--5.10--base-0 tag of miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-464 * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-1 Import from CVS branch gnus-5_10-branch * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-2 Merge from lorentey@elte.hu--2004/emacs--multi-tty--0, emacs--cvs-trunk--0 * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-3 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-4 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-18 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-19 Remove autoconf-generated files from archive * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-20 Update from CVS
author Miles Bader <miles@gnu.org>
date Sat, 04 Sep 2004 13:13:48 +0000
parents 695cf19ef79e
children 88db2adda4b7 cce1c0ee76ee
line wrap: on
line diff
--- a/lisp/gnus/nnkiboze.el	Sat Sep 04 13:06:38 2004 +0000
+++ b/lisp/gnus/nnkiboze.el	Sat Sep 04 13:13:48 2004 +0000
@@ -1,6 +1,6 @@
 ;;; nnkiboze.el --- select virtual news access for Gnus
 
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003
 ;;	Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -109,10 +109,12 @@
       (setq num (string-to-int (match-string 2 xref))
 	    group (match-string 1 xref))
       (or (with-current-buffer buffer
-	    (gnus-cache-request-article num group))
+	    (or (and gnus-use-cache (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)
@@ -227,11 +229,11 @@
 (defun nnkiboze-generate-group (group &optional inhibit-list-groups)
   (let* ((info (nth 2 (gnus-gethash group gnus-newsrc-hashtb)))
 	 (newsrc-file (concat nnkiboze-directory
-                              (nnheader-translate-file-chars
-                               (concat group ".newsrc"))))
+			      (nnheader-translate-file-chars
+			       (concat group ".newsrc"))))
 	 (nov-file (concat nnkiboze-directory
-                           (nnheader-translate-file-chars
-                            (concat group ".nov"))))
+			   (nnheader-translate-file-chars
+			    (concat group ".nov"))))
 	 method nnkiboze-newsrc gname newsrc active
 	 ginfo lowest glevel orig-info nov-buffer
 	 ;; Bind various things to nil to make group entry faster.
@@ -242,112 +244,116 @@
 	 (gnus-score-use-all-scores nil)
 	 (gnus-use-scoring t)
 	 (gnus-verbose (min gnus-verbose 3))
- 	 gnus-select-group-hook gnus-summary-prepare-hook
+	 gnus-select-group-hook gnus-summary-prepare-hook
 	 gnus-thread-sort-functions gnus-show-threads
 	 gnus-visual gnus-suppress-duplicates num-unread)
     (unless info
       (error "No such group: %s" group))
     ;; Load the kiboze newsrc file for this group.
-    (when (file-exists-p newsrc-file)
-      (load newsrc-file))
-    (let ((coding-system-for-write nnkiboze-file-coding-system))
-      (with-temp-file nov-file
-	(when (file-exists-p nov-file)
-	  (insert-file-contents nov-file))
-	(setq nov-buffer (current-buffer))
-	;; Go through the active hashtb and add new all groups that match the
-	;; kiboze regexp.
-	(mapatoms
-	 (lambda (group)
-	   (and (string-match nnkiboze-regexp
-			      (setq gname (symbol-name group))) ; Match
-		(not (assoc gname nnkiboze-newsrc)) ; It isn't registered
-		(numberp (car (symbol-value group))) ; It is active
-		(or (> nnkiboze-level 7)
-		    (and (setq glevel (nth 1 (nth 2 (gnus-gethash
-						     gname gnus-newsrc-hashtb))))
-			 (>= nnkiboze-level glevel)))
-		(not (string-match "^nnkiboze:" gname)) ; Exclude kibozes
-		(push (cons gname (1- (car (symbol-value group))))
-		      nnkiboze-newsrc)))
-	 gnus-active-hashtb)
-	;; `newsrc' is set to the list of groups that possibly are
-	;; component groups to this kiboze group.  This list has elements
-	;; on the form `(GROUP . NUMBER)', where NUMBER is the highest
-	;; number that has been kibozed in GROUP in this kiboze group.
-	(setq newsrc nnkiboze-newsrc)
-	(while newsrc
-	  (if (not (setq active (gnus-gethash
-				 (caar newsrc) gnus-active-hashtb)))
-	      ;; This group isn't active after all, so we remove it from
-	      ;; the list of component groups.
-	      (setq nnkiboze-newsrc (delq (car newsrc) nnkiboze-newsrc))
-	    (setq lowest (cdar newsrc))
-	    ;; Ok, we have a valid component group, so we jump to it.
-	    (switch-to-buffer gnus-group-buffer)
-	    (gnus-group-jump-to-group (caar newsrc))
-	    (gnus-message 3 "nnkiboze: Checking %s..." (caar newsrc))
-	    (setq ginfo (gnus-get-info (gnus-group-group-name))
-		  orig-info (gnus-copy-sequence ginfo)
-		  num-unread (car (gnus-gethash (caar newsrc)
-						gnus-newsrc-hashtb)))
-	    (unwind-protect
-		(progn
-		  ;; We set all list of article marks to nil.  Since we operate
-		  ;; on copies of the real lists, we can destroy anything we
-		  ;; want here.
-		  (when (nth 3 ginfo)
-		    (setcar (nthcdr 3 ginfo) nil))
-		  ;; We set the list of read articles to be what we expect for
-		  ;; this kiboze group -- either nil or `(1 . LOWEST)'.
-		  (when ginfo
-		    (setcar (nthcdr 2 ginfo)
-			    (and (not (= lowest 1)) (cons 1 lowest))))
-		  (when (and (or (not ginfo)
-				 (> (length (gnus-list-of-unread-articles
-					     (car ginfo)))
-				    0))
-			     (progn
-			       (ignore-errors
-				 (gnus-group-select-group nil))
-			       (eq major-mode 'gnus-summary-mode)))
-		    ;; We are now in the group where we want to be.
-		    (setq method (gnus-find-method-for-group
-				  gnus-newsgroup-name))
-		    (when (eq method gnus-select-method)
-		      (setq method nil))
-		    ;; We go through the list of scored articles.
-		    (while gnus-newsgroup-scored
-		      (when (> (caar gnus-newsgroup-scored) lowest)
-			;; If it has a good score, then we enter this article
-			;; into the kiboze group.
-			(nnkiboze-enter-nov
-			 nov-buffer
-			 (gnus-summary-article-header
-			  (caar gnus-newsgroup-scored))
-			 gnus-newsgroup-name))
-		      (setq gnus-newsgroup-scored (cdr gnus-newsgroup-scored)))
-		    ;; That's it.  We exit this group.
-		    (when (eq major-mode 'gnus-summary-mode)
-		      (kill-buffer (current-buffer)))))
-	      ;; Restore the proper info.
-	      (when ginfo
-		(setcdr ginfo (cdr orig-info)))
-	      (setcar (gnus-gethash (caar newsrc) gnus-newsrc-hashtb)
-		      num-unread)))
-	  (setcdr (car newsrc) (car active))
-	  (gnus-message 3 "nnkiboze: Checking %s...done" (caar newsrc))
-	  (setq newsrc (cdr newsrc)))))
-    ;; We save the kiboze newsrc for this group.
-    (with-temp-file newsrc-file
-      (insert "(setq nnkiboze-newsrc '")
-      (gnus-prin1 nnkiboze-newsrc)
-      (insert ")\n")))
+    (mm-with-unibyte
+      (when (file-exists-p newsrc-file)
+	(load newsrc-file))
+      (let ((coding-system-for-write nnkiboze-file-coding-system))
+	(gnus-make-directory (file-name-directory nov-file))
+	(with-temp-file nov-file
+	  (when (file-exists-p nov-file)
+	    (insert-file-contents nov-file))
+	  (setq nov-buffer (current-buffer))
+	  ;; Go through the active hashtb and add new all groups that match the
+	  ;; kiboze regexp.
+	  (mapatoms
+	   (lambda (group)
+	     (and (string-match nnkiboze-regexp
+				(setq gname (symbol-name group))) ; Match
+		  (not (assoc gname nnkiboze-newsrc)) ; It isn't registered
+		  (numberp (car (symbol-value group))) ; It is active
+		  (or (> nnkiboze-level 7)
+		      (and (setq glevel
+				 (nth 1 (nth 2 (gnus-gethash
+						gname gnus-newsrc-hashtb))))
+			   (>= nnkiboze-level glevel)))
+		  (not (string-match "^nnkiboze:" gname)) ; Exclude kibozes
+		  (push (cons gname (1- (car (symbol-value group))))
+			nnkiboze-newsrc)))
+	   gnus-active-hashtb)
+	  ;; `newsrc' is set to the list of groups that possibly are
+	  ;; component groups to this kiboze group.  This list has elements
+	  ;; on the form `(GROUP . NUMBER)', where NUMBER is the highest
+	  ;; number that has been kibozed in GROUP in this kiboze group.
+	  (setq newsrc nnkiboze-newsrc)
+	  (while newsrc
+	    (if (not (setq active (gnus-gethash
+				   (caar newsrc) gnus-active-hashtb)))
+		;; This group isn't active after all, so we remove it from
+		;; the list of component groups.
+		(setq nnkiboze-newsrc (delq (car newsrc) nnkiboze-newsrc))
+	      (setq lowest (cdar newsrc))
+	      ;; Ok, we have a valid component group, so we jump to it.
+	      (switch-to-buffer gnus-group-buffer)
+	      (gnus-group-jump-to-group (caar newsrc))
+	      (gnus-message 3 "nnkiboze: Checking %s..." (caar newsrc))
+	      (setq ginfo (gnus-get-info (gnus-group-group-name))
+		    orig-info (gnus-copy-sequence ginfo)
+		    num-unread (car (gnus-gethash (caar newsrc)
+						  gnus-newsrc-hashtb)))
+	      (unwind-protect
+		  (progn
+		    ;; We set all list of article marks to nil.  Since we operate
+		    ;; on copies of the real lists, we can destroy anything we
+		    ;; want here.
+		    (when (nth 3 ginfo)
+		      (setcar (nthcdr 3 ginfo) nil))
+		    ;; We set the list of read articles to be what we expect for
+		    ;; this kiboze group -- either nil or `(1 . LOWEST)'.
+		    (when ginfo
+		      (setcar (nthcdr 2 ginfo)
+			      (and (not (= lowest 1)) (cons 1 lowest))))
+		    (when (and (or (not ginfo)
+				   (> (length (gnus-list-of-unread-articles
+					       (car ginfo)))
+				      0))
+			       (progn
+				 (ignore-errors
+				   (gnus-group-select-group nil))
+				 (eq major-mode 'gnus-summary-mode)))
+		      ;; We are now in the group where we want to be.
+		      (setq method (gnus-find-method-for-group
+				    gnus-newsgroup-name))
+		      (when (eq method gnus-select-method)
+			(setq method nil))
+		      ;; We go through the list of scored articles.
+		      (while gnus-newsgroup-scored
+			(when (> (caar gnus-newsgroup-scored) lowest)
+			  ;; If it has a good score, then we enter this article
+			  ;; into the kiboze group.
+			  (nnkiboze-enter-nov
+			   nov-buffer
+			   (gnus-summary-article-header
+			    (caar gnus-newsgroup-scored))
+			   gnus-newsgroup-name))
+			(setq gnus-newsgroup-scored (cdr gnus-newsgroup-scored)))
+		      ;; That's it.  We exit this group.
+		      (when (eq major-mode 'gnus-summary-mode)
+			(kill-buffer (current-buffer)))))
+		;; Restore the proper info.
+		(when ginfo
+		  (setcdr ginfo (cdr orig-info)))
+		(setcar (gnus-gethash (caar newsrc) gnus-newsrc-hashtb)
+			num-unread)))
+	    (setcdr (car newsrc) (cdr active))
+	    (gnus-message 3 "nnkiboze: Checking %s...done" (caar newsrc))
+	    (setq newsrc (cdr newsrc)))))
+      ;; We save the kiboze newsrc for this group.
+      (gnus-make-directory (file-name-directory newsrc-file))
+      (with-temp-file newsrc-file
+	(insert "(setq nnkiboze-newsrc '")
+	(gnus-prin1 nnkiboze-newsrc)
+	(insert ")\n")))
   (unless inhibit-list-groups
     (save-excursion
       (set-buffer gnus-group-buffer)
       (gnus-group-list-groups)))
-  t)
+  t))
 
 (defun nnkiboze-enter-nov (buffer header group)
   (save-excursion