projects
/
embrace.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Handle status request responses to trap errors.
[embrace.git]
/
lib
/
embrace
/
imap.rb
diff --git
a/lib/embrace/imap.rb
b/lib/embrace/imap.rb
index 2fc3af434af2fbe21caa694ea6d61294fe75fd2d..0c545e32a3ada166341bfe36b0ae52561613bc9c 100644
(file)
--- a/
lib/embrace/imap.rb
+++ b/
lib/embrace/imap.rb
@@
-37,18
+37,22
@@
module Embrace::IMAP
class Session
attr_reader :connection
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]
- @connection = Ecore::Con::Server.new(2 | 16,
- @server_info[:host],
- @server_info[:port])
+ flags = 3
+ flags |= 16 if config[:server][:use_ssl]
+
+ @connection = Ecore::Con::Server.new(flags,
+ config[:server][:host],
+ config[:server][:port])
@buffer = ""
@tag_id = 0
@requests = []
@buffer = ""
@tag_id = 0
@requests = []
- @mboxes =
mboxes
.dup
+ @mboxes =
config[:mailboxes]
.dup
@state = :disconnected
@handlers = [
@state = :disconnected
@handlers = [
@@
-119,7
+123,7
@@
end
handle_response(Response.deserialize(line))
if @state == :connected
handle_response(Response.deserialize(line))
if @state == :connected
- login(@
server_info[:login], @server_info[:password]
)
+ login(@
login, @password
)
end
end
end
end
@@
-134,15
+138,23
@@
end
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
end
end
end
end
@@
-157,12
+169,6
@@
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
end
end
end
@@
-198,16
+204,14
@@
end
end
class LogoutRequest < Request
end
class LogoutRequest < Request
- def initialize(session)
- super
- end
-
def serialize
"LOGOUT"
end
end
class StatusRequest < Request
def serialize
"LOGOUT"
end
end
class StatusRequest < Request
+ attr_reader :mailbox
+
def initialize(session, mailbox)
super(session)
def initialize(session, mailbox)
super(session)