Synch to Gnus 200312221407.
authoryamaoka <yamaoka>
Mon, 22 Dec 2003 15:17:22 +0000 (15:17 +0000)
committeryamaoka <yamaoka>
Mon, 22 Dec 2003 15:17:22 +0000 (15:17 +0000)
lisp/ChangeLog
lisp/gnus-int.el
lisp/gnus-score.el
lisp/gnus-start.el
lisp/gnus.el

index 38c9baa..af9ec5b 100644 (file)
@@ -1,3 +1,23 @@
+2003-12-22  Kevin Greiner <kgreiner@xpediantsolutions.com>
+       * gnus-int.el (gnus-open-server): Fixed the server status such
+       that an agentized server, when opened offline, has a status of
+       offline.  Also fixes bug whereby the agent's backend was called
+       twice to open each server.
+
+       * gnus-start.el (gnus-get-unread-articles-in-group): Autoload
+       gnus-agent-possibly-alter-active rather than inline to resolve
+       compiler warnings.
+
+       * gnus.el (gnus-server-to-method): Added fallback of iterating
+       over gnus-newsrc-alist to resolve names of foreign servers.
+       Should fix recent agent bug.
+
+2003-12-22  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-score.el (gnus-summary-lower-score)
+       (gnus-summary-increase-score): Mention symbolic prefix in the
+       doc-string.  Suggested by Karl Pfl\e,Ad\e(Bsterer <sigurd@12move.de>.
+
 2003-12-21  Jesper Harder  <harder@ifa.au.dk>
 
        * gnus-agent.el (gnus-agent-read-agentview): Use
index 08944e4..49c9ed6 100644 (file)
@@ -214,52 +214,66 @@ If it is down, start it up (again)."
          (gnus-message 1 "Denied server")
          nil)
       ;; Open the server.
-      (let ((result
-            (condition-case err
-                (funcall (gnus-get-function gnus-command-method 'open-server)
-                         (nth 1 gnus-command-method)
-                         (nthcdr 2 gnus-command-method))
+      (let* ((open-server-function (gnus-get-function gnus-command-method 'open-server))
+             (result
+             (condition-case err
+                 (funcall open-server-function
+                          (nth 1 gnus-command-method)
+                          (nthcdr 2 gnus-command-method))
                (error
                 (gnus-message 1 (format
                                  "Unable to open server due to: %s"
                                  (error-message-string err)))
                 nil)
-              (quit
-               (gnus-message 1 "Quit trying to open server")
-               nil))))
+               (quit
+                (gnus-message 1 "Quit trying to open server")
+                nil)))
+            open-offline)
        ;; If this hasn't been opened before, we add it to the list.
        (unless elem
          (setq elem (list gnus-command-method nil)
                gnus-opened-servers (cons elem gnus-opened-servers)))
        ;; Set the status of this server.
-       (setcar (cdr elem)
-               (if result
-                   (if (eq (cadr elem) 'offline)
-                       'offline
-                     'ok)
-                 (if (and gnus-agent
-                          (not (eq (cadr elem) 'offline))
-                          (gnus-agent-method-p gnus-command-method))
-                     (or gnus-server-unopen-status
-                         (if (gnus-y-or-n-p
-                              (format "Unable to open %s:%s, go offline? "
-                                      (car gnus-command-method)
-                                      (cadr gnus-command-method)))
-                              'offline
-                           'denied))
-                   'denied)))
-       ;; Return the result from the "open" call.
-        (cond ((eq (cadr elem) 'offline)
-               ;; I'm avoiding infinite recursion by binding unopen
-               ;; status to denied (The logic of this routine
-               ;; guarantees that I can't get to this point with
-               ;; unopen status already bound to denied).
-               (unless (eq gnus-server-unopen-status 'denied)
-                 (let ((gnus-server-unopen-status 'denied))
-                   (gnus-open-server gnus-command-method)))
-               t)
-              (t
-               result))))))
+        (setcar (cdr elem)
+                (cond (result
+                       (if (eq open-server-function #'nnagent-open-server)
+                           ;; The agent's backend has a "special" status
+                           'offline
+                         'ok))
+                      ((and gnus-agent
+                            (gnus-agent-method-p gnus-command-method))
+                       (cond (gnus-server-unopen-status
+                              ;; Set the server's status to the unopen
+                              ;; status.  If that status is offline,
+                              ;; recurse to open the agent's backend.
+                              (setq open-offline (eq gnus-server-unopen-status 'offline))
+                              gnus-server-unopen-status)
+                             ((gnus-y-or-n-p
+                               (format "Unable to open %s:%s, go offline? "
+                                       (car gnus-command-method)
+                                       (cadr gnus-command-method)))
+                              (setq open-offline t)
+                              'offline)
+                             (t
+                              ;; This agentized server was still denied
+                              'denied)))
+                      (t
+                       ;; This unagentized server must be denied
+                       'denied)))
+
+        ;; NOTE: I MUST set the server's status to offline before this
+        ;; recursive call as this status will drive the
+        ;; gnus-get-function (called above) to return the agent's
+        ;; backend.
+        (if open-offline
+            ;; Recursively open this offline server to perform the
+            ;; open-server function of the agent's backend.
+            (let ((gnus-server-unopen-status 'denied))
+              ;; Bind gnus-server-unopen-status to avoid recursively
+              ;; prompting with "go offline?".  This is only a concern
+              ;; when the agent's backend fails to open the server.
+              (gnus-open-server gnus-command-method))
+          result)))))
 
 (defun gnus-close-server (gnus-command-method)
   "Close the connection to GNUS-COMMAND-METHOD."
index 1e59514..7e580d6 100644 (file)
@@ -527,7 +527,8 @@ of the last successful match.")
   "Make a score entry based on the current article.
 The user will be prompted for header to score on, match type,
 permanence, and the string to be used.  The numerical prefix will be
-used as score."
+used as score.  A symbolic prefix of `a' says to use the `all.SCORE'
+file for the command instead of the current score file."
   (interactive (gnus-interactive "P\ny"))
   (gnus-summary-increase-score (- (gnus-score-delta-default score)) symp))
 
@@ -541,7 +542,8 @@ used as score."
   "Make a score entry based on the current article.
 The user will be prompted for header to score on, match type,
 permanence, and the string to be used.  The numerical prefix will be
-used as score."
+used as score.  A symbolic prefix of `a' says to use the `all.SCORE'
+file for the command instead of the current score file."
   (interactive (gnus-interactive "P\ny"))
   (let* ((nscore (gnus-score-delta-default score))
         (prefix (if (< nscore 0) ?L ?I))
index 9688b4b..ec9adab 100644 (file)
@@ -37,6 +37,7 @@
 (require 'gnus-util)
 (autoload 'message-make-date "message")
 (autoload 'gnus-agent-read-servers-validate "gnus-agent")
+(autoload 'gnus-agent-possibly-alter-active "gnus-agent")
 
 (defcustom gnus-startup-file (nnheader-concat gnus-home-directory ".newsrc")
   "Your `.newsrc' file.
@@ -683,6 +684,7 @@ the first newsgroup."
   (setq gnus-list-of-killed-groups nil
        gnus-have-read-active-file nil
         gnus-agent-covered-methods nil
+        gnus-server-method-cache nil
        gnus-newsrc-alist nil
        gnus-newsrc-hashtb nil
        gnus-killed-list nil
@@ -1554,8 +1556,8 @@ newsgroup."
 
       ;; If the agent is enabled, we may have to alter the active info.
       (when (and gnus-agent info)
-       (inline (gnus-agent-possibly-alter-active
-                (gnus-info-group info) active)))
+       (gnus-agent-possibly-alter-active
+                (gnus-info-group info) active))
 
       ;; Modify the list of read articles according to what articles
       ;; are available; then tally the unread articles and add the
index 8aaddbd..fc0069d 100644 (file)
@@ -3350,7 +3350,25 @@ that that variable is buffer-local to the summary buffers."
                            (not (equal server (format "%s:%s" (caar servers)
                                                       (cadar servers)))))
                  (pop servers))
-               (car servers)))))
+               (car servers))
+              ;; This could be some sort of foreign server that I
+              ;; simply haven't opened (yet).  Do a brute-force scan
+              ;; of the entire gnus-newsrc-alist for the server name
+              ;; of every method.  As a side-effect, loads the
+              ;; gnus-server-method-cache so this only happens once,
+              ;; if at all.
+              (let (match)
+                (mapcar 
+                 (lambda (info)
+                   (let* ((info-method (gnus-info-method info))
+                          (info-server 
+                           (if (stringp info-method)
+                               info-method
+                             (gnus-method-to-server info-method))))
+                     (setq match (or (equal server info-server)
+                                     match))))
+                        (cdr gnus-newsrc-alist))
+                match))))
         (when result
           (push (cons server result) gnus-server-method-cache))
        result)))