sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
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:
M lib/sup/imap.rb | 21 ++++++++++++---------
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