# HG changeset patch # User Katsumi Yamaoka # Date 1290323495 0 # Node ID 42b6f450ae22354b9b862e205e2c2e6d243ea807 # Parent 72b4312028a2a16651b9dc0972f189fbac465f63 nnimap.el (nnimap-unselect-group): Made into its own function. (nnimap-request-rename-group): Unselect group before renaming. This had gotten lost somewhere. (nnimap-request-accept-article): Keep track of examined groups, and unselect the group before APPENDing to read-only groups. (nnimap-request-move-article): Clear flags before moving so that they can be re-set later. diff -r 72b4312028a2 -r 42b6f450ae22 lisp/gnus/ChangeLog --- a/lisp/gnus/ChangeLog Sat Nov 20 21:39:01 2010 -0800 +++ b/lisp/gnus/ChangeLog Sun Nov 21 07:11:35 2010 +0000 @@ -1,3 +1,13 @@ +2010-11-21 Lars Magne Ingebrigtsen + + * nnimap.el (nnimap-unselect-group): Made into its own function. + (nnimap-request-rename-group): Unselect group before renaming. This + had gotten lost somewhere. + (nnimap-request-accept-article): Keep track of examined groups, and + unselect the group before APPENDing to read-only groups. + (nnimap-request-move-article): Clear flags before moving so that they + can be re-set later. + 2010-11-20 Katsumi Yamaoka * gnus-gravatar.el (gnus-gravatar-transform-address): Decode name again. diff -r 72b4312028a2 -r 42b6f450ae22 lisp/gnus/nnimap.el --- a/lisp/gnus/nnimap.el Sat Nov 20 21:39:01 2010 -0800 +++ b/lisp/gnus/nnimap.el Sun Nov 21 07:11:35 2010 +0000 @@ -125,7 +125,7 @@ (defstruct nnimap group process commands capabilities select-result newlinep server - last-command-time greeting) + last-command-time greeting examined) (defvar nnimap-object nil) @@ -727,13 +727,17 @@ (deffoo nnimap-request-rename-group (group new-name &optional server) (when (nnimap-possibly-change-group nil server) (with-current-buffer (nnimap-buffer) - ;; Make sure we don't have this group open read/write by asking - ;; to examine a mailbox that doesn't exist. This seems to be - ;; the only way that allows us to reliably go back to unselected - ;; state on Courier. + (nnimap-unselect-group) (car (nnimap-command "RENAME %S %S" (utf7-encode group t) (utf7-encode new-name t)))))) +(defun nnimap-unselect-group () + ;; Make sure we don't have this group open read/write by asking + ;; to examine a mailbox that doesn't exist. This seems to be + ;; the only way that allows us to reliably go back to unselected + ;; state on Courier. + (nnimap-command "EXAMINE DOES.NOT.EXIST")) + (deffoo nnimap-request-expunge-group (group &optional server) (when (nnimap-possibly-change-group group server) (with-current-buffer (nnimap-buffer) @@ -774,6 +778,9 @@ (if internal-move-group (let ((result (with-current-buffer (nnimap-buffer) + ;; Clear all flags before moving. + (nnimap-send-command "UID STORE %d FLAGS.SILENT ()" + article) (nnimap-command "UID COPY %d %S" article (utf7-encode internal-move-group t))))) @@ -863,6 +870,7 @@ (erase-buffer) (unless (equal group (nnimap-group nnimap-object)) (setf (nnimap-group nnimap-object) nil) + (setf (nnimap-examined nnimap-object) group) (nnimap-send-command "EXAMINE %S" (utf7-encode group t))) (let ((sequence (nnimap-send-command "UID SEARCH HEADER Message-Id %S" message-id)) @@ -936,6 +944,10 @@ (nnimap-add-cr) (setq message (buffer-substring-no-properties (point-min) (point-max))) (with-current-buffer (nnimap-buffer) + ;; If we have this group open read-only, then unselect it + ;; before appending to it. + (when (equal (nnimap-examined nnimap-object) group) + (nnimap-unselect-group)) (erase-buffer) (setq sequence (nnimap-send-command "APPEND %S {%d}" (utf7-encode group t) @@ -994,6 +1006,7 @@ (with-current-buffer (nnimap-buffer) (setf (nnimap-group nnimap-object) nil) (dolist (group groups) + (setf (nnimap-examined nnimap-object) group) (push (list (nnimap-send-command "EXAMINE %S" (utf7-encode group t)) group) sequences)) @@ -1052,6 +1065,7 @@ active (cdr (assq 'active params)) uidvalidity (cdr (assq 'uidvalidity params)) modseq (cdr (assq 'modseq params))) + (setf (nnimap-examined nnimap-object) group) (if (and qresyncp uidvalidity modseq)