emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r103042: nntp.el (nntp-retrieve-group


From: Katsumi Yamaoka
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r103042: nntp.el (nntp-retrieve-group-data-early, nntp-finish-retrieve-group-infos): Implement the asynchronous data fetching functions.
Date: Mon, 31 Jan 2011 03:35:09 +0000
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 103042
author: Lars Ingebrigtsen <address@hidden>
committer: Katsumi Yamaoka <address@hidden>
branch nick: trunk
timestamp: Mon 2011-01-31 03:35:09 +0000
message:
  nntp.el (nntp-retrieve-group-data-early, nntp-finish-retrieve-group-infos): 
Implement the asynchronous data fetching functions.
modified:
  lisp/gnus/ChangeLog
  lisp/gnus/nntp.el
=== modified file 'lisp/gnus/ChangeLog'
--- a/lisp/gnus/ChangeLog       2011-01-31 02:49:29 +0000
+++ b/lisp/gnus/ChangeLog       2011-01-31 03:35:09 +0000
@@ -4,6 +4,10 @@
 
 2011-01-31  Lars Ingebrigtsen  <address@hidden>
 
+       * nntp.el (nntp-retrieve-group-data-early)
+       (nntp-finish-retrieve-group-infos): Implement the asynchronous data
+       fetching functions.
+
        * gnus-start.el (gnus-read-active-for-groups): Read the active files
        thoroughly for all backends that have no known groups.  This should
        allow new nnml methods to retrieve mail.

=== modified file 'lisp/gnus/nntp.el'
--- a/lisp/gnus/nntp.el 2011-01-26 08:36:39 +0000
+++ b/lisp/gnus/nntp.el 2011-01-31 03:35:09 +0000
@@ -774,6 +774,62 @@
         (nntp-copy-to-buffer nntp-server-buffer (point-min) (point-max))
          'headers)))))
 
+(deffoo nntp-retrieve-group-data-early (server infos)
+  "Retrieve group info on INFOS."
+  (nntp-with-open-group nil server
+    (when (nntp-find-connection-buffer nntp-server-buffer)
+      ;; The first time this is run, this variable is `try'.  So we
+      ;; try.
+      (when (eq nntp-server-list-active-group 'try)
+       (nntp-try-list-active (gnus-group-real-name (gnus-info-group (car 
infos)))))
+      (with-current-buffer (nntp-find-connection-buffer nntp-server-buffer)
+       (erase-buffer)
+       (let ((nntp-inhibit-erase t)
+             (command (if nntp-server-list-active-group
+                          "LIST ACTIVE" "GROUP")))
+         (dolist (info infos)
+           (nntp-send-command
+            nil command (gnus-group-real-name (gnus-info-group info)))))
+       (length infos)))))
+
+(deffoo nntp-finish-retrieve-group-infos (server infos count)
+  (nntp-with-open-group nil server
+    (let ((buf (nntp-find-connection-buffer nntp-server-buffer))
+         (method (gnus-find-method-for-group
+                  (gnus-info-group (car infos))
+                  (car infos)))
+         (received 0)
+         (last-point 1))
+      (when buf
+       (with-current-buffer buf
+         (while (and (gnus-buffer-live-p buf)
+                     (progn
+                       (goto-char last-point)
+                       ;; Count replies.
+                       (while (re-search-forward "^[0-9]" nil t)
+                         (incf received))
+                       (setq last-point (point))
+                       (< received count)))
+           (nntp-accept-response))
+         ;; We now have all the entries.  Remove CRs.
+         (goto-char (point-min))
+         (while (search-forward "\r" nil t)
+           (replace-match "" t t))
+
+         (if (not nntp-server-list-active-group)
+             (progn
+               (nntp-copy-to-buffer nntp-server-buffer
+                                    (point-min) (point-max))
+               (gnus-groups-to-gnus-format method gnus-active-hashtb t))
+           ;; We have read active entries, so we just delete the
+           ;; superfluous gunk.
+           (goto-char (point-min))
+           (while (re-search-forward "^[.2-5]" nil t)
+             (delete-region (match-beginning 0)
+                            (progn (forward-line 1) (point))))
+           (nntp-copy-to-buffer nntp-server-buffer (point-min) (point-max))
+           (gnus-active-to-gnus-format method gnus-active-hashtb nil t)))))))
+
 (deffoo nntp-retrieve-groups (groups &optional server)
   "Retrieve group info on GROUPS."
   (nntp-with-open-group


reply via email to

[Prev in Thread] Current Thread [Next in Thread]