*** empty log message ***
[gnus] / lisp / gnus-agent.el
index cd3d647..c2b29e2 100644 (file)
@@ -95,11 +95,8 @@ If nil, only read articles will be expired."
 (defvar gnus-agent-file-coding-system 'binary)
 
 (defconst gnus-agent-scoreable-headers
-  (list
-   "subject" "from" "date" "message-id" 
-   "references" "chars" "lines" "xref")
-  "Headers that are considered when scoring articles
-for download via the Agent.")
+  '("subject" "from" "date" "message-id" "references" "chars" "lines" "xref")
+  "Headers that are considered when scoring articles for download via the Agent.")
 
 ;; Dynamic variables
 (defvar gnus-headers)
@@ -321,7 +318,7 @@ agent minor mode in all Gnus buffers."
   (interactive)
   (gnus-open-agent)
   (add-hook 'gnus-setup-news-hook 'gnus-agent-queue-setup)
-  (unless gnus-agent-send-mail-function 
+  (unless gnus-agent-send-mail-function
     (setq gnus-agent-send-mail-function message-send-mail-function
          message-send-mail-function 'gnus-agent-send-mail))
   (unless gnus-agent-covered-methods
@@ -514,12 +511,21 @@ the actual number of articles toggled is returned."
     (when (and (not gnus-plugged)
               (gnus-agent-method-p gnus-command-method))
       (gnus-agent-load-alist gnus-newsgroup-name)
+      ;; First mark all undownloaded articles as undownloaded.
       (let ((articles gnus-newsgroup-unreads)
            article)
        (while (setq article (pop articles))
          (unless (or (cdr (assq article gnus-agent-article-alist))
                  (memq article gnus-newsgroup-downloadable))
-           (push article gnus-newsgroup-undownloaded)))))))
+           (push article gnus-newsgroup-undownloaded))))
+      ;; Then mark downloaded downloadable as not-downloadable,
+      ;; if you get my drift.
+      (let ((articles gnus-newsgroup-downloadable)
+           article)
+       (while (setq article (pop articles))
+         (when (cdr (assq article gnus-agent-article-alist))
+           (setq gnus-newsgroup-downloadable
+                 (delq article gnus-newsgroup-downloadable))))))))
 
 (defun gnus-agent-catchup ()
   "Mark all undownloaded articles as read."
@@ -778,7 +784,7 @@ the actual number of articles toggled is returned."
       (pop gnus-agent-group-alist))))
 
 (defun gnus-agent-fetch-headers (group &optional force)
-  (let ((articles (if (gnus-agent-load-alist group)   
+  (let ((articles (if (gnus-agent-load-alist group)
                      (gnus-sorted-intersection
                       (gnus-list-of-unread-articles group)
                       (gnus-uncompress-range
@@ -786,7 +792,7 @@ the actual number of articles toggled is returned."
                              (cdr (gnus-active group)))))
                    (gnus-list-of-unread-articles group)))
        (gnus-decode-encoded-word-function 'identity)
-       (file (gnus-agent-article-name ".overview" group))) 
+       (file (gnus-agent-article-name ".overview" group)))
     ;; Fetch them.
     (gnus-make-directory (nnheader-translate-file-chars
                          (file-name-directory file)))
@@ -927,7 +933,7 @@ the actual number of articles toggled is returned."
       ;; Parse them and see which articles we want to fetch.
       (setq gnus-newsgroup-dependencies
            (make-vector (length articles) 0))
-      ;; No need to call `gnus-get-newsgroup-headers-xover' with 
+      ;; No need to call `gnus-get-newsgroup-headers-xover' with
       ;; the entire .overview for group as we still have the just
       ;; downloaded headers in `gnus-agent-overview-buffer'.
       (let ((nntp-server-buffer gnus-agent-overview-buffer))
@@ -935,21 +941,21 @@ the actual number of articles toggled is returned."
              (gnus-get-newsgroup-headers-xover articles nil nil group)))
       (setq category (gnus-group-category group))
       (setq predicate
-           (gnus-get-predicate 
+           (gnus-get-predicate
             (or (gnus-group-get-parameter group 'agent-predicate t)
                 (cadr category))))
       ;; Do we want to download everything, or nothing?
       (if (or (eq (caaddr predicate) 'gnus-agent-true)
              (eq (caaddr predicate) 'gnus-agent-false))
          ;; Yes.
-         (setq arts (symbol-value 
-                     (cadr (assoc (caaddr predicate) 
+         (setq arts (symbol-value
+                     (cadr (assoc (caaddr predicate)
                                   '((gnus-agent-true articles)
                                     (gnus-agent-false nil))))))
        ;; No, we need to decide what we want.
        (setq score-param
              (let ((score-method
-                    (or 
+                    (or
                      (gnus-group-get-parameter group 'agent-score t)
                      (caddr category))))
                (when score-method
@@ -967,7 +973,7 @@ the actual number of articles toggled is returned."
                                          gnus-agent-scoreable-headers)
                              (push (car list) score-file))
                            (setq list (cdr list)))
-                         (setq score-param 
+                         (setq score-param
                                (append score-param (list (nreverse score-file)))
                                score-file nil entries (cdr entries)))
                        (list score-param))
@@ -1153,7 +1159,7 @@ The following commands are available:
        (or (gnus-agent-read-file
             (nnheader-concat gnus-agent-directory "lib/categories"))
            (list (list 'default 'short nil nil)))))
-    
+
 (defun gnus-category-write ()
   "Write the category alist."
   (setq gnus-category-predicate-cache nil
@@ -1172,7 +1178,7 @@ The following commands are available:
        (setf (cadr (assq ',category gnus-category-alist)) predicate)
        (gnus-category-write)
        (gnus-category-list)))))
-  
+
 (defun gnus-category-edit-score (category)
   "Edit the score expression for CATEGORY."
   (interactive (list (gnus-category-name)))
@@ -1287,7 +1293,7 @@ The following commands are available:
 (defun gnus-agent-false ()
   "Return nil."
   nil)
-  
+
 (defun gnus-category-make-function-1 (cat)
   "Make a function from category CAT."
   (cond