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.
end
def handle_tagged_response(resp, req)
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
name, count = md.captures.first, md.captures.last.to_i
MailboxStatusEvent.raise(name, count)
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
class StatusRequest < Request
end
class StatusRequest < Request
def initialize(session, mailbox)
super(session)
def initialize(session, mailbox)
super(session)