summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorGnus developers <ding@gnus.org>2010-10-24 22:32:38 +0000
committerKatsumi Yamaoka <yamaoka@jpl.org>2010-10-24 22:32:38 +0000
commitb5c575e640368d4a29c53d8a4f0cf2dab3355b9f (patch)
treebaa6e421e77302bec437b5f8de3ed1c45bb2facc /lisp
parent709228c0d3d2e5e810fa8194488334a267c0508f (diff)
Merge changes made in Gnus trunk.
message.el (message-default-headers): Fix type. nnimap.el (nnimap-request-head, nnimap-request-move-article): Make internal nnimap moving slightly faster. nnimap.el (nnimap-transform-headers): Don't bug out on bodiless articles. nnimap.el (nnimap-send-command): Have no outstanding messages if the IMAP server doesn't support streaming. nnimap.el (nnimap-transform-headers): Fold {quoted} strings more sloppily.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/gnus/ChangeLog14
-rw-r--r--lisp/gnus/gnus-int.el3
-rw-r--r--lisp/gnus/message.el13
-rw-r--r--lisp/gnus/nnimap.el64
4 files changed, 67 insertions, 27 deletions
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 2697a1c5409..58041943c09 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,5 +1,19 @@
2010-10-24 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * nnimap.el (nnimap-request-head): New function.
+ (nnimap-request-move-article): Try to be slighly faster by not
+ requesting the entire message when moving.
+ (nnimap-transform-headers): Don't bug out on bodiless articles.
+ (nnimap-send-command): Have no outstanding messages if the IMAP server
+ doesn't support streaming.
+ (nnimap-transform-headers): Fold {quoted} strings more sloppily.
+
+2010-10-24 Julien Danjou <julien@danjou.info>
+
+ * message.el (message-default-headers): Fix type.
+
+2010-10-24 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
* gnus-html.el (gnus-html-prefetch-images): Decode entities before
prefetching images.
diff --git a/lisp/gnus/gnus-int.el b/lisp/gnus/gnus-int.el
index 19bcffe0049..318cdfebda2 100644
--- a/lisp/gnus/gnus-int.el
+++ b/lisp/gnus/gnus-int.el
@@ -655,7 +655,8 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
(result (funcall (gnus-get-function gnus-command-method
'request-move-article)
article (gnus-group-real-name group)
- (nth 1 gnus-command-method) accept-function last move-is-internal)))
+ (nth 1 gnus-command-method) accept-function
+ last move-is-internal)))
(when (and result gnus-agent
(gnus-agent-method-p gnus-command-method))
(gnus-agent-unfetch-articles group (list article)))
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 49bfd4bb934..bac6ef4fac0 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -1139,14 +1139,17 @@ It is a vector of the following headers:
:error "All header lines must be newline terminated")
(defcustom message-default-headers ""
- "A string containing header lines to be inserted in outgoing messages.
-It is inserted before you edit the message, so you can edit or
-delete these lines. If set to a function, it is called and its
-result is inserted."
+ "Header lines to be inserted in outgoing messages.
+This can be set to a string containing or a function returning
+header lines to be inserted before you edit the message, so you
+can edit or delete these lines. If set to a function, it is
+called and its result is inserted."
:version "23.2"
:group 'message-headers
:link '(custom-manual "(message)Message Headers")
- :type 'message-header-lines)
+ :type '(choice
+ (message-header-lines :tag "String")
+ (function :tag "Function")))
(defcustom message-default-mail-headers
;; Ease the transition from mail-mode to message-mode. See bugs#4431, 5555.
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index 701ed1e2412..49d2d37d482 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -136,6 +136,16 @@ textual parts.")
(defun nnimap-buffer ()
(nnimap-find-process-buffer nntp-server-buffer))
+(defun nnimap-header-parameters ()
+ (format "(UID RFC822.SIZE BODYSTRUCTURE %s)"
+ (format
+ (if (nnimap-ver4-p)
+ "BODY.PEEK[HEADER.FIELDS %s]"
+ "RFC822.HEADER.LINES %s")
+ (append '(Subject From Date Message-Id
+ References In-Reply-To Xref)
+ nnmail-extra-headers))))
+
(deffoo nnimap-retrieve-headers (articles &optional group server fetch-old)
(with-current-buffer nntp-server-buffer
(erase-buffer)
@@ -146,14 +156,7 @@ textual parts.")
(nnimap-send-command
"UID FETCH %s %s"
(nnimap-article-ranges (gnus-compress-sequence articles))
- (format "(UID RFC822.SIZE BODYSTRUCTURE %s)"
- (format
- (if (nnimap-ver4-p)
- "BODY.PEEK[HEADER.FIELDS %s]"
- "RFC822.HEADER.LINES %s")
- (append '(Subject From Date Message-Id
- References In-Reply-To Xref)
- nnmail-extra-headers))))
+ (nnimap-header-parameters))
t)
(nnimap-transform-headers))
(insert-buffer-substring
@@ -171,7 +174,7 @@ textual parts.")
(return)))
(setq article (match-string 1))
;; Unfold quoted {number} strings.
- (while (re-search-forward "[^]] {\\([0-9]+\\)}\r\n"
+ (while (re-search-forward "[^]][ (]{\\([0-9]+\\)}\r\n"
(1+ (line-end-position)) t)
(setq size (string-to-number (match-string 1)))
(delete-region (+ (match-beginning 0) 2) (point))
@@ -200,7 +203,8 @@ textual parts.")
(insert (format "Chars: %s\n" size)))
(when lines
(insert (format "Lines: %s\n" lines)))
- (re-search-forward "^\r$")
+ (unless (re-search-forward "^\r$" nil t)
+ (goto-char (point-max)))
(delete-region (line-beginning-position) (line-end-position))
(insert ".")
(forward-line 1)))))
@@ -490,12 +494,28 @@ textual parts.")
(nnheader-ms-strip-cr)
(cons group article)))))))))
-(defun nnimap-get-whole-article (article)
+(deffoo nnimap-request-head (article &optional group server to-buffer)
+ (when (nnimap-possibly-change-group group server)
+ (with-current-buffer (nnimap-buffer)
+ (when (stringp article)
+ (setq article (nnimap-find-article-by-message-id group article)))
+ (nnimap-get-whole-article
+ article (format "UID FETCH %%d %s"
+ (nnimap-header-parameters)))
+ (let ((buffer (current-buffer)))
+ (with-current-buffer (or to-buffer nntp-server-buffer)
+ (erase-buffer)
+ (insert-buffer-substring buffer)
+ (nnheader-ms-strip-cr)
+ (cons group article))))))
+
+(defun nnimap-get-whole-article (article &optional command)
(let ((result
(nnimap-command
- (if (nnimap-ver4-p)
- "UID FETCH %d BODY.PEEK[]"
- "UID FETCH %d RFC822.PEEK")
+ (or command
+ (if (nnimap-ver4-p)
+ "UID FETCH %d BODY.PEEK[]"
+ "UID FETCH %d RFC822.PEEK"))
article)))
;; Check that we really got an article.
(goto-char (point-min))
@@ -715,7 +735,10 @@ textual parts.")
&optional last internal-move-group)
(with-temp-buffer
(mm-disable-multibyte)
- (when (nnimap-request-article article group server (current-buffer))
+ (when (funcall (if internal-move-group
+ 'nnimap-request-head
+ 'nnimap-request-article)
+ article group server (current-buffer))
;; If the move is internal (on the same server), just do it the easy
;; way.
(let ((message-id (message-field-value "message-id")))
@@ -1025,12 +1048,7 @@ textual parts.")
(utf7-encode group t))
(nnimap-send-command "UID FETCH %d:* FLAGS" start)
start group command)
- sequences)))
- ;; Some servers apparently can't have many outstanding
- ;; commands, so throttle them.
- (when (and (not nnimap-streaming)
- (car sequences))
- (nnimap-wait-for-response (caar sequences))))
+ sequences))))
sequences))))
(deffoo nnimap-finish-retrieve-group-infos (server infos sequences)
@@ -1408,6 +1426,10 @@ textual parts.")
(if (nnimap-newlinep nnimap-object)
""
"\r"))))
+ ;; Some servers apparently can't have many outstanding
+ ;; commands, so throttle them.
+ (unless nnimap-streaming
+ (nnimap-wait-for-response nnimap-sequence))
nnimap-sequence)
(defun nnimap-log-command (command)