[Top][All Lists]

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

[Orgmode] Re: Fixing slowness of following Gnus links to IMAP articles

From: Tassilo Horn
Subject: [Orgmode] Re: Fixing slowness of following Gnus links to IMAP articles
Date: Wed, 28 Jul 2010 08:36:57 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

David Maus <address@hidden> 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---
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)
                ((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
                 (let ((articles 1)
+                  ;; 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 
+                      (message "headers = %s" headers)))
                   (while (and (not group-opened)
                               ;; stop on integer overflows
                               (> articles 0))
--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').


reply via email to

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