From: Tilman Sauerbeck Date: Fri, 8 Dec 2006 16:49:26 +0000 (+0100) Subject: Handle status request responses to trap errors. X-Git-Tag: embrace-0.1.0~8 X-Git-Url: http://git.code-monkey.de/?p=embrace.git;a=commitdiff_plain;h=276ab5edad1b440db6a7791a832794342ef94fda;hp=c0b425d6a1cd0e286d58eca4c1ed415315bd48d2 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. --- 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)