[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [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.,
Katsumi Yamaoka <=