*** empty log message ***
[gnus] / lisp / nnkiboze.el
index fdb7c2f..2726bf4 100644 (file)
@@ -70,7 +70,6 @@
 
 (nnoo-define-basics nnkiboze)
 
-
 (deffoo nnkiboze-retrieve-headers (articles &optional group server fetch-old)
   (nnkiboze-possibly-change-group group)
   (unless gnus-nov-is-evil
@@ -81,7 +80,7 @@
          (save-excursion
            (set-buffer nntp-server-buffer)
            (erase-buffer)
-           (insert-file-contents nov)
+           (nnheader-insert-file-contents nov)
            (nnheader-nov-delete-outside-range
             (car articles) (car (last articles)))
            'nov))))))
          beg end total)
       (save-excursion
        (set-buffer nntp-server-buffer)
+       (erase-buffer)
        (if (not (file-exists-p nov-file))
            (nnheader-report 'nnkiboze "Can't select group %s" group)
-         (insert-file-contents nov-file)
+         (nnheader-insert-file-contents nov-file)
          (if (zerop (buffer-size))
              (nnheader-insert "211 0 0 0 %s\n" group)
            (goto-char (point-min))
             nnkiboze-remove-read-articles)
     (nnheader-temp-write (nnkiboze-nov-file-name)
       (let ((cur (current-buffer)))
-       (insert-file-contents (nnkiboze-nov-file-name))
+       (nnheader-insert-file-contents (nnkiboze-nov-file-name))
        (goto-char (point-min))
        (while (not (eobp))
          (if (not (gnus-article-read-p (read cur)))
@@ -203,7 +203,7 @@ Finds out what articles are to be part of the nnkiboze groups."
                  (concat (nnkiboze-prefixed-name nnkiboze-current-group)
                          "." gnus-score-file-suffix))))))
 
-(defun nnkiboze-generate-group (group) 
+(defun nnkiboze-generate-group (group)
   (let* ((info (nth 2 (gnus-gethash group gnus-newsrc-hashtb)))
         (newsrc-file (concat nnkiboze-directory group ".newsrc"))
         (nov-file (concat nnkiboze-directory group ".nov"))
@@ -215,10 +215,12 @@ Finds out what articles are to be part of the nnkiboze groups."
         gnus-thread-sort-functions gnus-show-threads 
         gnus-visual
         method nnkiboze-newsrc nov-buffer gname newsrc active
-        ginfo lowest glevel)
-    (or info (error "No such group: %s" group))
+        ginfo lowest glevel orig-info)
+    (unless info
+      (error "No such group: %s" group))
     ;; Load the kiboze newsrc file for this group.
-    (and (file-exists-p newsrc-file) (load newsrc-file))
+    (when (file-exists-p newsrc-file)
+      (load newsrc-file))
     ;; We also load the nov file for this group.
     (save-excursion
       (set-buffer (setq nov-buffer (find-file-noselect nov-file)))
@@ -254,40 +256,47 @@ Finds out what articles are to be part of the nnkiboze groups."
        ;; 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))
-       ;; 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.
-       (and (setq ginfo (nth 2 (gnus-gethash (gnus-group-group-name)
-                                             gnus-newsrc-hashtb)))
-            (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)'. 
-       (and ginfo (setcar (nthcdr 2 ginfo)
-                          (and (not (= lowest 1)) (cons 1 lowest))))
-       (if (not (and (or (not ginfo)
-                         (> (length (gnus-list-of-unread-articles 
-                                     (car ginfo))) 0))
-                     (progn
-                       (gnus-group-select-group nil)
-                       (eq major-mode 'gnus-summary-mode))))
-           ()                          ; No unread articles, or we couldn't enter this group.
-         ;; We are now in the group where we want to be.
-         (setq method (gnus-find-method-for-group gnus-newsgroup-name))
-         (and (eq method gnus-select-method) (setq method nil))
-         ;; We go through the list of scored articles.
-         (while gnus-newsgroup-scored
-           (if (> (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.
-         (gnus-summary-exit-no-update)))
+       (setq ginfo (gnus-get-info (gnus-group-group-name))
+             orig-info (gnus-copy-sequence ginfo))
+       (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
+                          (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.
+               (gnus-summary-exit-no-update)))
+         ;; Restore the proper info.
+         (when ginfo
+           (setcdr ginfo (cdr orig-info)))))
       (setcdr (car newsrc) (car active))
       (setq newsrc (cdr newsrc)))
     ;; We save the nov file.
@@ -299,8 +308,7 @@ Finds out what articles are to be part of the nnkiboze groups."
       (insert "(setq nnkiboze-newsrc '")
       (gnus-prin1 nnkiboze-newsrc)
       (insert ")\n"))
-    (switch-to-buffer gnus-group-buffer)
-    (gnus-group-list-groups 5 nil)))
+    t))
     
 (defun nnkiboze-enter-nov (buffer header group)
   (save-excursion
@@ -324,7 +332,7 @@ Finds out what articles are to be part of the nnkiboze groups."
       ;; really came for - this is the article nnkiboze
       ;; will request when it is asked for the article.
       (insert group ":" 
-             (int-to-string (mail-header-number header)) " ")      
+             (int-to-string (mail-header-number header)) " ")
       (while (re-search-forward " [^ ]+:[0-9]+" nil t)
        (goto-char (1+ (match-beginning 0)))
        (insert prefix)))))