Synch to No Gnus 200409302212.
[elisp/gnus.git-] / lisp / gnus-agent.el
index 686a17e..35424d3 100644 (file)
@@ -125,7 +125,7 @@ fetched will be limited to it. If not a positive integer, never consider it."
   :type '(choice (const nil)
                 (integer :tag "Number")))
 
-(defcustom gnus-agent-synchronize-flags 'ask
+(defcustom gnus-agent-synchronize-flags nil
   "Indicate if flags are synchronized when you plug in.
 If this is `ask' the hook will query the user."
   :version "21.1"
@@ -859,7 +859,8 @@ be a select method."
                (delete-file (gnus-agent-lib-file "flags")))
               (error
                (let ((file (gnus-agent-lib-file "flags")))
-                 (write-file file)
+                 (write-region (point-min) (point-max)
+                               (gnus-agent-lib-file "flags") nil 'silent)
                  (error "Couldn't set flags from file %s due to %s"
                         file (error-message-string err)))))))
       (kill-buffer nil))))
@@ -1217,14 +1218,30 @@ This can be added to `gnus-select-article-hook' or
 ;;; Internal functions
 ;;;
 
-(defun gnus-agent-synchronize-group-flags (group action server)
-"Update a plugged group by performing the indicated action."
+(defun gnus-agent-synchronize-group-flags (group actions server)
+"Update a plugged group by performing the indicated actions."
   (let* ((gnus-command-method (gnus-server-to-method server))
-        (info (gnus-get-info group)))
-    (gnus-request-set-mark group action)
+        (info (or (gnus-get-info group)
+                  (gnus-get-info (gnus-group-full-name 
+                                  group gnus-command-method)))))
+    (gnus-request-set-mark group actions)
 
     (when info
-      (gnus-request-update-info info gnus-command-method))
+      (dolist (action actions)
+       (let ((range (nth 0 action))
+             (what  (nth 1 action))
+             (marks (nth 2 action)))
+         (when (memq 'read marks)
+           (gnus-info-set-read 
+            info
+            (funcall (if (eq what 'add)
+                         'gnus-range-add
+                       'gnus-remove-from-range)
+                     (gnus-info-read info)
+                     range))
+           (gnus-get-unread-articles-in-group 
+            info
+            (gnus-active (gnus-info-group info)))))))
     nil))
 
 (defun gnus-agent-save-active (method)