diff options
author | Tassilo Horn <tassilo@member.fsf.org> | 2010-07-28 11:36:57 +0000 |
---|---|---|
committer | Bastien Guerry <bzg@altern.org> | 2010-07-31 10:34:35 +0200 |
commit | c708851b5e21843605858b4919ada9ac7b194d50 (patch) | |
tree | 4caf6c39ce2e3567cef6f9bd3812c83afbcdbd5e | |
parent | f08a5eaa06b8b090101d53cd8c239086b7b074e2 (diff) | |
download | org-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.el | 22 |
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)) |