Handle status request responses to trap errors.
[embrace.git] / lib / embrace / imap.rb
index cb129a08dbf071ad3f351fcc2d7756b0b29021e9..0c545e32a3ada166341bfe36b0ae52561613bc9c 100644 (file)
@@ -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)