commit ab3f5dc9a5343973f98d944025c30147b6233594
parent 320609c08675d823e214c8dfed5296d292ac72b4
Author: wmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Date: Wed, 20 Dec 2006 19:46:44 +0000
imap bugfix (cur_offset not being stored) and better exception handling
git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@90 5c8cc53c-5e98-4d25-b20a-d8db53a31250
Diffstat:
1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/lib/sup/imap.rb b/lib/sup/imap.rb
@@ -17,7 +17,7 @@ class IMAP < Source
@password = password
@imap = nil
@labels = [:unread]
- @labels << mailbox.intern unless mailbox =~ /inbox/i || mailbox.empty?
+ @labels << mailbox.intern unless mailbox =~ /inbox/i || mailbox.nil?
@labels << :inbox unless archived?
connect
@@ -72,18 +72,20 @@ class IMAP < Source
## load the full header text
def raw_header uid
connect or return broken_msg
- begin
- connect or return broken_msg
- rescue Exception => e
- raise "wtf: #{e.inspect}"
- end
- @imap.uid_fetch(uid, 'RFC822.HEADER')[0].attr['RFC822.HEADER'].gsub(/\r\n/, "\n")
+ get_imap_field(uid, 'RFC822.HEADER').gsub(/\r\n/, "\n")
end
def raw_full_message uid
connect or return broken_msg
- @imap.uid_fetch(uid, 'RFC822')[0].attr['RFC822'].gsub(/\r\n/, "\n")
+ get_imap_field(uid, 'RFC822').gsub(/\r\n/, "\n")
+ end
+
+ def get_imap_field uid, field
+ f = @imap.uid_fetch uid, field
+ raise SourceError, "null IMAP field '#{field}' for message with uid #{uid}" if f.nil?
+ f[0].attr[field]
end
+ private :get_imap_field
def each
connect or return broken_msg
@@ -91,6 +93,7 @@ class IMAP < Source
uids.each do |uid|
@last_uid = uid
@dirty = true
+ self.cur_offset = uid
yield uid, labels
end
end
@@ -102,6 +105,6 @@ class IMAP < Source
end
end
-Redwood::register_yaml(IMAP, %w(uri username password offset usual archived id))
+Redwood::register_yaml(IMAP, %w(uri username password cur_offset usual archived id))
end