]> git.eshelyaron.com Git - emacs.git/commitdiff
Merge changes made in Gnus trunk.
authorAndrew Cohen <cohen@andy.bu.edu>
Sun, 24 Jul 2011 00:19:29 +0000 (00:19 +0000)
committerKatsumi Yamaoka <yamaoka@jpl.org>
Sun, 24 Jul 2011 00:19:29 +0000 (00:19 +0000)
nnir.el (nnir-search-thread): New function to make an nnir group based on a thread query.
gnus-sum.el (gnus-refer-thread-use-nnir): New variable to control use of nnir in thread referral.
 (gnus-summary-refer-thread): Use it.
nnimap.el (nnimap-request-thread): Use it.

lisp/gnus/ChangeLog
lisp/gnus/gnus-sum.el
lisp/gnus/nnimap.el
lisp/gnus/nnir.el

index a8065fc5ca47f0e98fec3ebfdc9acde0319d7ed7..400abd51c270cbabceddf407944c2794cadb47ba 100644 (file)
@@ -1,3 +1,14 @@
+2011-07-23  Andrew Cohen  <cohen@andy.bu.edu>
+
+       * nnir.el (nnir-search-thread): New function to make an nnir group
+       based on a thread query.
+
+       * gnus-sum.el (gnus-refer-thread-use-nnir): New variable to control use
+       of nnir in thread referral.
+       (gnus-summary-refer-thread): Use it.
+
+       * nnimap.el (nnimap-request-thread): Use it.
+
 2011-07-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * shr.el (shr-tag-comment): Ignore HTML comments.
index 6e8fc63d79f85d15c407e49765d957e2f47b5321..5917c9d7cef88c712ec62f10b0de5b7c4f8d5402 100644 (file)
@@ -118,6 +118,13 @@ If t, fetch all the available old headers."
   :type '(choice number
                 (sexp :menu-tag "other" t)))
 
+(defcustom gnus-refer-thread-use-nnir nil
+  "*Use nnir to search an entire server when referring threads. A
+nil value will only search for thread-related articles in the
+current group."
+  :group 'gnus-thread
+  :type 'boolean)
+
 (defcustom gnus-summary-make-false-root 'adopt
   "*nil means that Gnus won't gather loose threads.
 If the root of a thread has expired or been read in a previous
@@ -8972,11 +8979,16 @@ Return the number of articles fetched."
     result))
 
 (defun gnus-summary-refer-thread (&optional limit)
-  "Fetch all articles in the current thread.
-If no backend-specific 'request-thread function is available
-fetch LIMIT (the numerical prefix) old headers. If LIMIT is nil
-fetch what's specified by the `gnus-refer-thread-limit'
-variable."
+  "Fetch all articles in the current thread. For backends that
+know how to search for threads (currently only 'nnimap) a
+non-numeric prefix arg will use nnir to search the entire
+server; without a prefix arg only the current group is
+searched. If the variable `gnus-refer-thread-use-nnir' is
+non-nil the prefix arg has the reverse meaning. If no
+backend-specific 'request-thread function is available fetch
+LIMIT (the numerical prefix) old headers. If LIMIT is
+non-numeric or nil fetch the number specified by the
+`gnus-refer-thread-limit' variable."
   (interactive "P")
   (gnus-warp-to-article)
   (let* ((header (gnus-summary-article-header))
@@ -8984,13 +8996,16 @@ variable."
         (gnus-inhibit-demon t)
         (gnus-summary-ignore-duplicates t)
         (gnus-read-all-available-headers t)
-        (limit (if limit (prefix-numeric-value limit)
-                 gnus-refer-thread-limit))
+        (gnus-refer-thread-use-nnir
+         (if (and (not (null limit)) (listp limit))
+             (not gnus-refer-thread-use-nnir) gnus-refer-thread-use-nnir))
         (new-headers
          (if (gnus-check-backend-function
               'request-thread gnus-newsgroup-name)
              (gnus-request-thread header gnus-newsgroup-name)
-           (let* ((last (if (numberp limit)
+           (let* ((limit (if (numberp limit) (prefix-numeric-value limit)
+                           gnus-refer-thread-limit))
+                  (last (if (numberp limit)
                             (min (+ (mail-header-number header)
                                     limit)
                                  gnus-newsgroup-highest)
@@ -9005,17 +9020,19 @@ variable."
                       (regexp-opt (append refs (list id subject)))))))
              (gnus-fetch-headers (list last) (if (numberp limit)
                                                  (* 2 limit) limit) t)))))
-    (dolist (header new-headers)
-      (when (member (mail-header-number header) gnus-newsgroup-unselected)
-       (push (mail-header-number header) gnus-newsgroup-unreads)
-       (setq gnus-newsgroup-unselected
-             (delete (mail-header-number header) gnus-newsgroup-unselected))))
-    (setq gnus-newsgroup-headers
-         (gnus-delete-duplicate-headers
-          (gnus-merge
-           'list gnus-newsgroup-headers new-headers
-           'gnus-article-sort-by-number)))
-    (gnus-summary-limit-include-thread id)))
+    (when (listp new-headers)
+      (dolist (header new-headers)
+       (when (member (mail-header-number header) gnus-newsgroup-unselected)
+          (push (mail-header-number header) gnus-newsgroup-unreads)
+          (setq gnus-newsgroup-unselected
+                (delete (mail-header-number header)
+                       gnus-newsgroup-unselected))))
+      (setq gnus-newsgroup-headers
+            (gnus-delete-duplicate-headers
+             (gnus-merge
+              'list gnus-newsgroup-headers new-headers
+              'gnus-article-sort-by-number)))
+      (gnus-summary-limit-include-thread id))))
 
 (defun gnus-summary-refer-article (message-id)
   "Fetch an article specified by MESSAGE-ID."
index 385522759b66429d678883fcb425a39eed923828..8a0d635ef7bfc4134464a0a6bcf6575230ad585c 100644 (file)
@@ -1566,15 +1566,17 @@ textual parts.")
                  (articles &optional limit force-new dependencies))
 
 (deffoo nnimap-request-thread (header &optional group server)
-  (when (nnimap-possibly-change-group group server)
-    (let* ((cmd (nnimap-make-thread-query header))
-          (result (with-current-buffer (nnimap-buffer)
-                    (nnimap-command  "UID SEARCH %s" cmd))))
-      (when result
-       (gnus-fetch-headers
-        (and (car result) (delete 0 (mapcar #'string-to-number
-                                            (cdr (assoc "SEARCH" (cdr result))))))
-        nil t)))))
+  (if gnus-refer-thread-use-nnir 
+      (nnir-search-thread header)
+    (when (nnimap-possibly-change-group group server)
+      (let* ((cmd (nnimap-make-thread-query header))
+             (result (with-current-buffer (nnimap-buffer)
+                       (nnimap-command  "UID SEARCH %s" cmd))))
+        (when result
+          (gnus-fetch-headers
+           (and (car result) (delete 0 (mapcar #'string-to-number
+                                               (cdr (assoc "SEARCH" (cdr result))))))
+           nil t))))))
 
 (defun nnimap-possibly-change-group (group server)
   (let ((open-result t))
index 9840dddcb66bbdc62533282558d7d183d98b641b..e6420a4d7bbb469481a7bb8c36cd1a079a96816c 100644 (file)
@@ -289,6 +289,7 @@ is `(valuefunc member)'."
   (autoload 'nnimap-buffer "nnimap")
   (autoload 'nnimap-command "nnimap")
   (autoload 'nnimap-possibly-change-group "nnimap")
+  (autoload 'nnimap-make-thread-query "nnimap")
   (autoload 'gnus-registry-action "gnus-registry")
   (defvar gnus-registry-install))
 
@@ -1649,6 +1650,16 @@ server is of form 'backend:name'."
     (nnir-open-server server)))
 
 
+(defun nnir-search-thread (header)
+  "Make an nnir group based on the thread containing the article header"
+  (let ((parm (list
+              (cons 'query
+                    (nnimap-make-thread-query header))
+              (cons 'criteria "")
+              (cons 'server (gnus-method-to-server
+                             (gnus-find-method-for-group
+                              gnus-newsgroup-name))))))
+    (gnus-group-make-nnir-group nil parm)))
 
 ;; unused?
 (defun nnir-artlist-groups (artlist)