sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit c525f80342e835efb1dc830cde24b4a740c524ca
parent c3d6da56640afa7b1da783e5d1cfaf7505cf7206
Author: Rich Lane <rlane@club.cc.cmu.edu>
Date:   Tue, 30 Mar 2010 23:50:07 -0700

remove add_new_messages and fix internal sources

Diffstat:
M lib/sup/connection.rb | 5 ++++-
M lib/sup/draft.rb | 12 ++++++++----
M lib/sup/mbox.rb | 6 +++++-
M lib/sup/poll.rb | 9 ---------
M lib/sup/sent.rb | 3 ++-
5 files changed, 19 insertions(+), 16 deletions(-)
diff --git a/lib/sup/connection.rb b/lib/sup/connection.rb
@@ -49,7 +49,10 @@ class Connection
     SentManager.source.store_message Time.now, "test@example.com" do |io|
       io.write raw
     end
-    PollManager.add_new_messages SentManager.source, labels, []
+    PollManager.poll_from SentManager.source do |sym,m,old_m|
+      next unless sym == :add
+      m.labels = labels
+    end
     nil
   end
 end
diff --git a/lib/sup/draft.rb b/lib/sup/draft.rb
@@ -17,7 +17,7 @@ class DraftManager
     offset = @source.gen_offset
     fn = @source.fn_for_offset offset
     File.open(fn, "w") { |f| yield f }
-    PollManager.add_new_messages @source
+    PollManager.poll_from @source
   end
 
   def discard m
@@ -37,6 +37,7 @@ class DraftLoader < Source
     Dir.mkdir dir unless File.exists? dir
     super DraftManager.source_name, true, false
     @dir = dir
+    @cur_offset = 0
   end
 
   def id; DraftManager.source_id; end
@@ -46,9 +47,12 @@ class DraftLoader < Source
   def poll
     ids = get_ids
     ids.each do |id|
-      if id >= cur_offset
-        self.cur_offset = id + 1
-        yield :add, id, [:draft, :inbox]
+      if id >= @cur_offset
+        @cur_offset = id + 1
+        yield :add,
+          :info => id,
+          :labels => [:draft, :inbox],
+          :progress => 0.0
       end
     end
   end
diff --git a/lib/sup/mbox.rb b/lib/sup/mbox.rb
@@ -121,13 +121,17 @@ class MBox < Source
     0.0
   end
 
+  def default_labels
+    [:inbox, :unread]
+  end
+
   def poll
     offset = first_new_message
     end_offset = File.size @f
     while offset and offset < end_offset
       yield :add,
         :info => offset,
-        :labels => (labels + [:inbox, :unread]),
+        :labels => (labels + default_labels),
         :progress => 0.0
       offset = next_offset offset
     end
diff --git a/lib/sup/poll.rb b/lib/sup/poll.rb
@@ -190,15 +190,6 @@ EOS
     end
   end
 
-  def add_new_messages source, add_labels, remove_labels
-    each_message_from(source) do |action,m|
-      next unless action == :add
-      remove_labels.each { |l| m.remove_label l }
-      add_labels.each { |l| m.add_label l }
-      add_new_message m
-    end
-  end
-
   def handle_idle_update sender, idle_since; @should_clear_running_totals = false; end
   def handle_unidle_update sender, idle_since; @should_clear_running_totals = true; clear_running_totals; end
   def clear_running_totals; @running_totals = {:num => 0, :numi => 0, :loaded_labels => Set.new}; end
diff --git a/lib/sup/sent.rb b/lib/sup/sent.rb
@@ -26,7 +26,7 @@ class SentManager
 
   def write_sent_message date, from_email, &block
     @source.store_message date, from_email, &block
-    PollManager.add_new_messages @sources, [:sent], [:unread]
+    PollManager.poll_from @source
   end
 end
 
@@ -46,6 +46,7 @@ class SentLoader < MBox
 
   def id; 9998; end
   def labels; [:inbox, :sent]; end
+  def default_labels; []; end
   def read?; true; end
 end