X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=lib%2Fembrace%2Fimap.rb;h=0c545e32a3ada166341bfe36b0ae52561613bc9c;hb=276ab5edad1b440db6a7791a832794342ef94fda;hp=f0ae8a5538b32b5155322365372a81b37cb2a38b;hpb=c189b3f91201f97fb0e3090d939a1db51fca9a29;p=embrace.git diff --git a/lib/embrace/imap.rb b/lib/embrace/imap.rb index f0ae8a5..0c545e3 100644 --- a/lib/embrace/imap.rb +++ b/lib/embrace/imap.rb @@ -37,21 +37,22 @@ module Embrace::IMAP class Session attr_reader :connection - def initialize(server_info, mboxes) - @server_info = server_info + def initialize(config) + @login = config[:server][:login] + @password = config[:server][:password] - flags = 2 - flags |= 16 if @server_info.use_ssl + flags = 3 + flags |= 16 if config[:server][:use_ssl] @connection = Ecore::Con::Server.new(flags, - @server_info[:host], - @server_info[:port]) + config[:server][:host], + config[:server][:port]) @buffer = "" @tag_id = 0 @requests = [] - @mboxes = mboxes.dup + @mboxes = config[:mailboxes].dup @state = :disconnected @handlers = [ @@ -122,7 +123,7 @@ end handle_response(Response.deserialize(line)) if @state == :connected - login(@server_info[:login], @server_info[:password]) + login(@login, @password) end end @@ -137,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 @@ -160,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 @@ -201,16 +204,14 @@ end end class LogoutRequest < Request - def initialize(session) - super - end - def serialize "LOGOUT" end end class StatusRequest < Request + attr_reader :mailbox + def initialize(session, mailbox) super(session)