From e39a5583efbaa11447f89e13f3f0e5a178b95225 Mon Sep 17 00:00:00 2001 From: Lars Magne Ingebrigtsen Date: Sun, 21 Nov 2010 07:11:35 +0000 Subject: [PATCH] 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. --- lisp/gnus/ChangeLog | 10 ++++++++++ lisp/gnus/nnimap.el | 24 +++++++++++++++++++----- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 5e10f34d4e1..9dbfbfb8219 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -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 --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index ed69c4cdab2..af58ce2468d 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el @@ -125,7 +125,7 @@ textual parts.") (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 @@ textual parts.") (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 @@ textual parts.") (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 @@ textual parts.") (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 @@ textual parts.") (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 @@ textual parts.") (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 @@ textual parts.") 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) -- 2.39.2