Project

General

Profile

« Previous | Next » 

Revision 6bc51624

Added by Marc Dequènes almost 14 years ago

  • ID 6bc51624438375e0d63f00ffa642a6c5720b7312

[evol] reorganized imap processing

View differences:

lib/cyborghood/imap.rb
module CyborgHood
class IMAP
def initialize(params)
def initialize(params, min_check_interval)
@params = params
@imap = nil
@is_loggued = false
@min_check_interval = min_check_interval
end
class IMAPMessage
......
@config = Config.instance
@content = nil
@stop_mail_check = false
end
def content
......
def delete
if @config.debug.nil? or @config.debug.flags.nil? or not @config.debug.flags.include?(:debug_nomaildeletion)
@imap.store(@message_id, "+FLAGS", [:Deleted])
@imap.store(@message_id, "+FLAGS", [:Deleted])
end
end
end
......
@imap = Net::IMAP.new(@params.host, port, ssl, @params.ca_cert, check_ca)
rescue SocketError
logger.warn "Could not connect to the IMAP server"
return false
return false
end
logger.debug "Connected (IMAP Capabilities: " + @imap.capability.join(", ") + ")"
#p @imap.getquotaroot("INBOX")
@stop_mail_check = false
true
end
......
@imap.authenticate('LOGIN', @params.login, @params.passwd)
rescue Net::IMAP::NoResponseError
logger.warn "Could not authenticate to the IMAP server"
disconnect
return false
disconnect
return false
end
logger.debug "Authenticated as '#{@params.login}'"
@is_loggued = true
true
end
def check_mail(&message_handler)
def check_mails_once(&message_handler)
connect &&
authenticate &&
check_inbox(&message_handler) &&
disconnect
authenticate &&
check_inbox(&message_handler)
rescue SocketError, Net::IMAP::NoResponseError => e
logger.warn "IMAP or Network error: " + e.message
rescue Net::IMAP::Error => e
raise CyberError.new(:unrecoverable, "protocol/imap", e.message)
ensure
begin
disconnect
rescue
end
end
def check_mails(&message_handler)
until @stop_mail_check
t = Time.now.to_i
r = check_mails_once(&message_handler)
t2 = Time.now.to_i
sleep_time = @min_check_interval - (t2 - t)
if sleep_time > 0
logger.debug "Having a break before new check..."
begin
sleep(sleep_time)
rescue
end
end
end
end
def check_inbox
logger.debug "Examining INBOX"
@imap.select('INBOX')
logger.debug "Starting mail check"
@imap.search(["ALL"], "UTF-8").each do |message_id|
logger.debug "*** Fetched mail ##{message_id}"
yield IMAPMessage.new(@imap, message_id)
unless yield IMAPMessage.new(@imap, message_id)
@stop_mail_check = true
break
end
end
logger.debug "Mail check finished"
@imap.expunge
end

Also available in: Unified diff