From ab3f5dc9a5343973f98d944025c30147b6233594 Mon Sep 17 00:00:00 2001 From: wmorgan Date: Wed, 20 Dec 2006 19:46:44 +0000 Subject: [PATCH] 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 --- lib/sup/imap.rb | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/lib/sup/imap.rb b/lib/sup/imap.rb index 41c3c0f..c445bea 100644 --- 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 -- 2.45.2