Changes committed gnus/lisp (ChangeLog imap.el)

"Ted Zlatanov" <[email protected]> Thu, 10 Sep 2009 13:19:57 +0200
Newsgroups gmane.emacs.gnus.commits
Message-ID <[email protected]>
Modified: ChangeLog imap.el

(imap-interactive-login): Better messages.
(imap-open): Fix bug with renamed buffer on reconnect.
(imap-authenticate): Add buffer-local imap-last-authenticator variable
for easier debugging and cleaner code.	On successful (guessed based on
server capabilities) secondary authentication, set imap-state
correctly.


Index: ChangeLog
diff -u gnus/lisp/ChangeLog:7.2014 gnus/lisp/ChangeLog:7.2015
--- ChangeLog:7.2014	Thu Sep 10 02:12:47 2009
+++ ChangeLog	Thu Sep 10 13:19:57 2009
@@ -1,3 +1,12 @@
+2009-09-10  Teodor Zlatanov  <[email protected]>
+
+	* imap.el (imap-interactive-login): Better messages.
+	(imap-open): Fix bug with renamed buffer on reconnect.
+	(imap-authenticate): Add buffer-local imap-last-authenticator variable
+	for easier debugging and cleaner code.  On successful (guessed based on
+	server capabilities) secondary authentication, set imap-state
+	correctly.
+
 2009-09-10  Katsumi Yamaoka  <[email protected]>
 
 	* nnrss.el (nnrss-request-article): Remove binding of
Index: imap.el
diff -u gnus/lisp/imap.el:7.56 gnus/lisp/imap.el:7.57
--- imap.el:7.56	Wed Sep  9 11:31:35 2009
+++ imap.el	Thu Sep 10 13:19:57 2009
@@ -872,25 +872,26 @@
       (while (or (not user) (not passwd))
 	(setq user (or imap-username
 		       (read-from-minibuffer
-			(concat "IMAP username for " imap-server
+			(concat "imap: username for " imap-server
 				" (using stream `" (symbol-name imap-stream)
 				"'): ")
 			(or user imap-default-user))))
 	(setq passwd (or imap-password
 			 (read-passwd
-			  (concat "IMAP password for " user "@"
+			  (concat "imap: password for " user "@"
 				  imap-server " (using authenticator `"
 				  (symbol-name imap-auth) "'): "))))
 	(when (and user passwd)
 	  (if (funcall loginfunc user passwd)
 	      (progn
+		(message "imap: Login successful...")
 		(setq ret t
 		      imap-username user)
 		(when (and (not imap-password)
 			   (or imap-store-password
-			       (y-or-n-p "Store password for this session? ")))
+			       (y-or-n-p "imap: Store password for this IMAP session? ")))
 		  (setq imap-password passwd)))
-	    (message "Login failed...")
+	    (message "imap: Login failed...")
 	    (setq passwd nil)
 	    (setq imap-password nil)
 	    (sit-for 1))))
@@ -1160,7 +1161,10 @@
 				      buffer
 				    (buffer-name buffer))))
 			(kill-buffer buffer)
-			(rename-buffer name))
+			(rename-buffer name)
+			;; set the passed buffer to the current one,
+			;; so that (imap-opened buffer) later will work
+			(setq buffer (current-buffer)))
 		      (message "imap: Reconnecting with stream `%s'...done"
 			       stream)
 		      (setq imap-stream stream)
@@ -1173,6 +1177,7 @@
 		(setq streams nil))))))
       (when (imap-opened buffer)
 	(setq imap-mailbox-data (make-vector imap-mailbox-prime 0)))
+      ;; (debug "opened+state+auth+buffer" (imap-opened buffer) imap-state imap-auth buffer)
       (when imap-stream
 	buffer))))
 
@@ -1217,25 +1222,32 @@
 	    (eq imap-state 'examine))
       (make-local-variable 'imap-username)
       (make-local-variable 'imap-password)
-      (if user (setq imap-username user))
-      (if passwd (setq imap-password passwd))
+      (make-local-variable 'imap-last-authenticator)
+      (when user (setq imap-username user))
+      (when passwd (setq imap-password passwd))
       (if imap-auth
-	  (and (funcall (nth 2 (assq imap-auth
-				     imap-authenticator-alist)) (current-buffer))
+	  (and (setq imap-last-authenticator 
+		     (assq imap-auth imap-authenticator-alist))
+	       (funcall (nth 2 imap-last-authenticator) (current-buffer))
 	       (setq imap-state 'auth))
 	;; Choose authenticator.
 	(let ((auths imap-authenticators)
 	      auth)
 	  (while (setq auth (pop auths))
 	    ;; OK to use authenticator?
-	    (when (funcall (nth 1 (assq auth imap-authenticator-alist)) (current-buffer))
+	    (setq imap-last-authenticator
+		  (assq auth imap-authenticator-alist))
+	    (when (funcall (nth 1 imap-last-authenticator) (current-buffer))
 	      (message "imap: Authenticating to `%s' using `%s'..."
 		       imap-server auth)
 	      (setq imap-auth auth)
-	      (if (funcall (nth 2 (assq auth imap-authenticator-alist)) (current-buffer))
+	      (if (funcall (nth 2 imap-last-authenticator) (current-buffer))
 		  (progn
 		    (message "imap: Authenticating to `%s' using `%s'...done"
 			     imap-server auth)
+		    ;; set imap-state correctly on successful auth attempt
+		    (setq imap-state 'auth)
+		    ;; stop iterating through the authenticator list
 		    (setq auths nil))
 		(message "imap: Authenticating to `%s' using `%s'...failed"
 			 imap-server auth)))))