Gnus development mailing list
 help / color / mirror / Atom feed
From: Andrew Cohen <cohen@andy.bu.edu>
To: ding@gnus.org
Subject: Re: A T does not work in nnimap
Date: Tue, 12 Oct 2010 19:43:11 -0400	[thread overview]
Message-ID: <87mxqjvuy8.fsf@andy.bu.edu> (raw)
In-Reply-To: <874ocrwjxu.fsf@andy.bu.edu>

[-- Attachment #1: Type: text/plain, Size: 212 bytes --]

OK here is a first pass at modifying gnus-summary-refer-thread to work
with imap. It seemed like a good idea to factor out a thread-searching
function for nnimap, so I did. 

Only lightly tested.

Regards,
Andy


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: imap threading changes --]
[-- Type: text/x-diff, Size: 5102 bytes --]

diff --git a/lisp/nnir.el b/lisp/nnir.el
index 2a264d1..2dcebe6 100644
--- a/lisp/nnir.el
+++ b/lisp/nnir.el
@@ -343,7 +343,8 @@
 (eval-when-compile
   (autoload 'nnimap-buffer "nnimap")
   (autoload 'nnimap-command "nnimap")
-  (autoload 'nnimap-possibly-change-group "nnimap"))
+  (autoload 'nnimap-possibly-change-group "nnimap")
+  (autoload 'nnimap-find-thread "nnimap"))
 
 (nnoo-declare nnir)
 (nnoo-define-basics nnir)
@@ -717,21 +718,8 @@ and show thread that contains this article."
 	 (refs (split-string
 		(mail-header-references (gnus-summary-article-header)))))
     (if (string= (car (gnus-group-method group)) "nnimap")
-	(with-current-buffer (nnimap-buffer)
-	  (let* ((cmd (let ((value
-			     (format
-			      "(OR HEADER REFERENCES %s HEADER Message-Id %s)"
-			      id id)))
-			(dolist (refid refs value)
-			  (setq value (format
-				       "(OR (OR HEADER Message-Id %s HEADER REFERENCES %s) %s)"
-				       refid refid value)))))
-		 (result (nnimap-command
-			  "UID SEARCH %s" cmd)))
-	    (gnus-summary-read-group-1 group t t gnus-summary-buffer nil
-				       (and (car result)
-					    (delete 0 (mapcar #'string-to-number
-							      (cdr (assoc "SEARCH" (cdr result)))))))))
+	(gnus-summary-read-group-1 group t t gnus-summary-buffer nil
+				   (nnimap-find-thread id refs))
       (gnus-summary-read-group-1 group t t gnus-summary-buffer
 				 nil (list backend-number))
       (gnus-summary-limit (list backend-number))


diff --git a/lisp/nnimap.el b/lisp/nnimap.el
index c6c8787..5de8518 100644
--- a/lisp/nnimap.el
+++ b/lisp/nnimap.el
@@ -1659,6 +1659,22 @@ textual parts.")
 		  group-art))
 	  nnimap-incoming-split-list)))
 
+(defun nnimap-find-thread (id refs)
+  (let* ((cmd (let ((value
+		     (format
+		      "(OR HEADER REFERENCES %s HEADER Message-Id %s)"
+		      id id)))
+		(dolist (refid refs value)
+		  (setq value (format
+			       "(OR (OR HEADER Message-Id %s HEADER REFERENCES %s) %s)"
+			       refid refid value)))))
+	 (result (with-current-buffer (nnimap-buffer)
+		   (nnimap-command
+		    "UID SEARCH %s" cmd))))
+    (and (car result)
+	 (delete 0 (mapcar #'string-to-number
+			   (cdr (assoc "SEARCH" (cdr result))))))))
+
 (provide 'nnimap)
 
 ;;; nnimap.el ends here


diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el
index 1086e28..a2f7a90 100644
--- a/lisp/gnus-sum.el
+++ b/lisp/gnus-sum.el
@@ -60,6 +60,7 @@
 (autoload 'gnus-article-outlook-unwrap-lines "deuglify" nil t)
 (autoload 'gnus-article-outlook-repair-attribution "deuglify" nil t)
 (autoload 'gnus-article-outlook-rearrange-citation "deuglify" nil t)
+(autoload 'nnimap-find-thread "nnimap")
 
 (defcustom gnus-kill-summary-on-exit t
   "*If non-nil, kill the summary buffer when you exit from it.
@@ -8828,28 +8829,35 @@ If LIMIT (the numerical prefix), fetch that many old headers instead
 of what's specified by the `gnus-refer-thread-limit' variable."
   (interactive "P")
   (let ((id (mail-header-id (gnus-summary-article-header)))
+	(refs (split-string   (or
+	       (mail-header-references (gnus-summary-article-header)) "")))
 	(limit (if limit (prefix-numeric-value limit)
 		 gnus-refer-thread-limit)))
-    (unless (eq gnus-fetch-old-headers 'invisible)
-      (gnus-message 5 "Fetching headers for %s..." gnus-newsgroup-name)
-      ;; Retrieve the headers and read them in.
-      (if (eq (if (numberp limit)
-		  (gnus-retrieve-headers
-		   (list (min
-			  (+ (mail-header-number
-			      (gnus-summary-article-header))
-			     limit)
-			  gnus-newsgroup-end))
-		   gnus-newsgroup-name (* limit 2))
-		;; gnus-refer-thread-limit is t, i.e. fetch _all_
-		;; headers.
-		(gnus-retrieve-headers (list gnus-newsgroup-end)
-				       gnus-newsgroup-name limit))
-	      'nov)
-	  (gnus-build-all-threads)
-	(error "Can't fetch thread from back ends that don't support NOV"))
-      (gnus-message 5 "Fetching headers for %s...done" gnus-newsgroup-name))
-    (gnus-summary-limit-include-thread id)))
+    (if (string= (car (gnus-group-method gnus-newsgroup-name)) "nnimap")
+	(progn	(gnus-select-newsgroup gnus-newsgroup-name nil
+				       (nnimap-find-thread id refs))
+		(when gnus-build-sparse-threads
+		  (gnus-build-sparse-threads)))
+      (unless (eq gnus-fetch-old-headers 'invisible)
+	(gnus-message 5 "Fetching headers for %s..." gnus-newsgroup-name)
+	;; Retrieve the headers and read them in.
+	(if (eq (if (numberp limit)
+		    (gnus-retrieve-headers
+		     (list (min
+			    (+ (mail-header-number
+				(gnus-summary-article-header))
+			       limit)
+			    gnus-newsgroup-end))
+		     gnus-newsgroup-name (* limit 2))
+		  ;; gnus-refer-thread-limit is t, i.e. fetch _all_
+		  ;; headers.
+		  (gnus-retrieve-headers (list gnus-newsgroup-end)
+					 gnus-newsgroup-name limit))
+		'nov)
+	    (gnus-build-all-threads)
+	  (error "Can't fetch thread from back ends that don't support NOV"))
+	(gnus-message 5 "Fetching headers for %s...done" gnus-newsgroup-name)))
+      (gnus-summary-limit-include-thread id)))
 
 (defun gnus-summary-refer-article (message-id)
   "Fetch an article specified by MESSAGE-ID."

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: ChangeLog --]
[-- Type: text/x-diff, Size: 476 bytes --]

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index ab64bcc..c809021 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,12 @@
+2010-10-12  Andrew Cohen  <cohen@andy.bu.edu>
+
+	* nnimap.el (nnimap-find-thread): New function.
+
+	* nnir.el (gnus-summary-nnir-goto-thread): Use it.
+
+	* gnus-sum.el (gnus-summary-refer-thread): Modify to work with
+	imap.
+
 2010-10-12  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* gnus-gravatar.el (gnus-gravatar-too-ugly): Don't test if

  reply	other threads:[~2010-10-12 23:43 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-07 11:00 Julien Danjou
2010-10-07 18:13 ` Lars Magne Ingebrigtsen
2010-10-12 13:28   ` Julien Danjou
2010-10-12 13:50     ` Lars Magne Ingebrigtsen
2010-10-12 14:18       ` Julien Danjou
2010-10-12 14:43         ` Andrew Cohen
2010-10-12 23:43           ` Andrew Cohen [this message]
2010-10-13 13:55             ` Julien Danjou
2010-10-13 15:30               ` Andrew Cohen
2010-10-13 15:42                 ` Julien Danjou
2010-10-13 17:21             ` Lars Magne Ingebrigtsen
2010-10-13 17:56               ` Andrew Cohen
2010-10-13 18:29                 ` Lars Magne Ingebrigtsen
2010-10-13 20:59                   ` Andrew Cohen
2010-10-13 21:11                     ` Lars Magne Ingebrigtsen
2010-10-13 21:30                       ` Andrew Cohen
2010-10-13 21:37                         ` Lars Magne Ingebrigtsen
2010-10-13 21:59                           ` Andrew Cohen
2010-10-13 22:06                             ` Lars Magne Ingebrigtsen
2010-10-14  0:38                           ` Andrew Cohen
2010-10-14 12:57                             ` Andrew Cohen
2010-10-14 18:00                               ` Lars Magne Ingebrigtsen
2010-10-14 18:45                                 ` Andrew Cohen
2010-10-14 19:02                                   ` Lars Magne Ingebrigtsen
2010-10-15 11:02                                   ` Julien Danjou
2010-10-15 11:24                                     ` Andrew Cohen
2010-10-15 11:29                                       ` Julien Danjou
2010-10-15 11:53                                         ` Steinar Bang
2010-10-15 12:01                                           ` Julien Danjou
2010-10-15 12:00                                         ` Andrew Cohen
2010-10-15 12:06                                           ` Julien Danjou
2010-10-15 12:17                                             ` Andrew Cohen
2010-10-15 12:26                                               ` Andrew Cohen
2010-10-15 18:26                                                 ` Julien Danjou
2010-10-16 12:58                                                   ` Andrew Cohen
2010-10-16 18:16                                                     ` Lars Magne Ingebrigtsen
2010-10-15 14:03                                               ` Lars Magne Ingebrigtsen
2010-10-15 12:11                                           ` Andrew Cohen
2010-10-15 12:28                                             ` Julien Danjou

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87mxqjvuy8.fsf@andy.bu.edu \
    --to=cohen@andy.bu.edu \
    --cc=ding@gnus.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).