summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTassilo Horn <tassilo@member.fsf.org>2010-07-28 11:36:57 +0000
committerBastien Guerry <bzg@altern.org>2010-07-31 10:34:35 +0200
commitc708851b5e21843605858b4919ada9ac7b194d50 (patch)
tree4caf6c39ce2e3567cef6f9bd3812c83afbcdbd5e
parentf08a5eaa06b8b090101d53cd8c239086b7b074e2 (diff)
downloadorg-mode-c708851b5e21843605858b4919ada9ac7b194d50.tar.gz
Fixing slowness of following Gnus links to IMAP articles
David Maus <dmaus@ictsoc.de> writes: Hi David, >>I'm trying to add a workaround to org-gnus.el which should save the >>slowness of querying the IMAP server by looking up the article number >>in the group's .overview file. But since I don't have nnimap groups, >>we have to play some question & answer game. ;-) > >>Please apply this patch and set >>`org-gnus-nnimap-query-article-no-from-file' to t. > > The patch does not work: It calls `nnimap-retrieve-headers-from-file' > without the required arguments (group server) Argh, stupid me! Here's a corrected patch. --8<---------------cut here---------------start------------->8--- --8<---------------cut here---------------end--------------->8--- > and the headers are not fetched because > `nnimap-retrieve-headers-from-file' looks for a NOV cache file, not > .overview. Aren't overview file and NOV file synonyms? Hm, anyway. In the Gnus docs I've found this paragraph: ,----[ (info "(gnus)IMAP") ] | `nnimap-nov-is-evil' | Never generate or use a local NOV database. Defaults to the value | of `gnus-agent'. | | Using a NOV database usually makes header fetching much faster, | but it uses the `UID SEARCH UID' command, which is very slow on | some servers (notably some versions of Courier). Since the Gnus | Agent caches the information in the NOV database without using the | slow command, this variable defaults to true if the Agent is in | use, and false otherwise. `---- So maybe we're trying to replace one slow command with another slow command. Especially, the fact that Courier is explicitly mentioned is a bit frustrating. Well, let's try it out and see if it helps a bit. > Alas: I couldn't figure out how to enable NOV cache for my nnimap > group. Setting `nnimap-nov-is-evil' to nil didn't help. This variable defaults to the value of `gnus-agent', so I assume the agent has to be enabled (which is default), and most probably the IMAP server has to be agentized as well. That can be done in the server buffer (`^' in *Group*), and then: ,----[ (info "(gnus)Server Agent Commands") ] | `J a' | Add the current server to the list of servers covered by the Gnus | Agent (`gnus-agent-add-server'). `---- Bye, Tassilo
-rw-r--r--lisp/org-gnus.el22
1 files changed, 21 insertions, 1 deletions
diff --git a/lisp/org-gnus.el b/lisp/org-gnus.el
index 7ec305b..7a339cd 100644
--- a/lisp/org-gnus.el
+++ b/lisp/org-gnus.el
@@ -55,6 +55,16 @@ negates this setting for the duration of the command."
:group 'org-link-store
:type 'boolean)
+(defcustom org-gnus-nnimap-query-article-no-from-file nil
+ "If non-nil, `org-gnus-follow-link' will try to translate
+Message-Ids to article numbers by querying the .overview file.
+Normally, this translation is done by querying the IMAP server,
+which is usually very fast. Unfortunately, some (maybe badly
+configured) IMAP servers don't support this operation quickly.
+So if following a link to a Gnus article takes ages, try setting
+this variable to `t'."
+ :group 'org-link-store
+ :type 'boolean)
;; Install the link type
(org-add-link-type "gnus" 'org-gnus-open)
@@ -173,7 +183,11 @@ If `org-store-link' was called with a prefix arg the meaning of
(cond ((and group article)
(gnus-activate-group group t)
(condition-case nil
- (let ((backend (car (gnus-find-method-for-group group))))
+ (let* ((method (gnus-find-method-for-group group))
+ (backend (car method))
+ (server (cadr method)))
+ (message "method = %s\ngroup = %s\nbackend = %s\nserver = %s"
+ method group backend server)
(cond
((eq backend 'nndoc)
(if (gnus-group-read-group t nil group)
@@ -183,6 +197,12 @@ If `org-store-link' was called with a prefix arg the meaning of
(t
(let ((articles 1)
group-opened)
+ ;; work arround IMAP servers that perform badly in
+ ;; SEARCH commands.
+ (when (and (eq backend 'nnimap)
+ org-gnus-nnimap-query-article-no-from-file)
+ (let ((headers (nnimap-retrieve-headers-from-file group server)))
+ (message "headers = %s" headers)))
(while (and (not group-opened)
;; stop on integer overflows
(> articles 0))