From 276ab5edad1b440db6a7791a832794342ef94fda Mon Sep 17 00:00:00 2001 From: Tilman Sauerbeck Date: Fri, 8 Dec 2006 17:49:26 +0100 Subject: [PATCH] Handle status request responses to trap errors. We used to ignore the tagged response to the status request, and evaluated the untagged response only. This way we couldn't see whether the command was actually completed successfully. This would result in the IMAP connection staying open if one of the configured mailboxes didn't exist. --- lib/embrace/imap.rb | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/lib/embrace/imap.rb b/lib/embrace/imap.rb index cb129a0..0c545e3 100644 --- a/lib/embrace/imap.rb +++ b/lib/embrace/imap.rb @@ -138,15 +138,23 @@ end end def handle_tagged_response(resp, req) - return unless req.is_a?(LoginRequest) - - case resp.status - when :ok - @state = :logged_in - - @mboxes.each { |mb| query_status(mb) } - else - raise(LoginError, "cannot login - #{resp.data}") + case req + when LoginRequest + case resp.status + when :ok + @state = :logged_in + + @mboxes.each { |mb| query_status(mb) } + else + raise(LoginError, "cannot login - #{resp.data}") + end + when StatusRequest + @mboxes.delete(req.mailbox) + + if @mboxes.empty? + @status = :done + logout + end end end @@ -161,12 +169,6 @@ end name, count = md.captures.first, md.captures.last.to_i MailboxStatusEvent.raise(name, count) - @mboxes.delete(name) - - if @mboxes.empty? - @status = :done - logout - end end end @@ -208,6 +210,8 @@ end end class StatusRequest < Request + attr_reader :mailbox + def initialize(session, mailbox) super(session) -- 2.30.2