sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit 6119bb9b65371c8fa7a9e0895b35be1207822aa1
parent ce8d41af569f94b9992fb9fe866e94dc8d5d8da5
Author: Rich Lane <rlane@club.cc.cmu.edu>
Date:   Tue, 29 Dec 2009 17:38:02 -0800

factor saving out of thread/message classes

Diffstat:
M lib/sup/index.rb | 7 +++++++
M lib/sup/message.rb | 5 +----
M lib/sup/modes/thread-index-mode.rb | 2 +-
M lib/sup/thread.rb | 2 +-
4 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/lib/sup/index.rb b/lib/sup/index.rb
@@ -172,6 +172,13 @@ class BaseIndex
   def parse_query s
     unimplemented
   end
+
+  def save_thread t
+    t.each_dirty_message do |m|
+      update_message_state m
+      m.clear_dirty
+    end
+  end
 end
 
 index_name = ENV['SUP_INDEX'] || $config[:index] || DEFAULT_INDEX
diff --git a/lib/sup/message.rb b/lib/sup/message.rb
@@ -182,11 +182,8 @@ class Message
   ## don't tempt me.
   def sanitize_message_id mid; mid.gsub(/(\s|[^\000-\177])+/, "")[0..254] end
 
-  def save_state index
-    return unless @dirty
-    index.update_message_state self
+  def clear_dirty
     @dirty = false
-    true
   end
 
   def has_label? t; @labels.member? t; end
diff --git a/lib/sup/modes/thread-index-mode.rb b/lib/sup/modes/thread-index-mode.rb
@@ -477,7 +477,7 @@ EOS
       BufferManager.say("Saving threads...") do |say_id|
         dirty_threads.each_with_index do |t, i|
           BufferManager.say "Saving modified thread #{i + 1} of #{dirty_threads.length}...", say_id
-          t.save_state Index
+          Index.save_thread t
         end
       end
     end
diff --git a/lib/sup/thread.rb b/lib/sup/thread.rb
@@ -112,7 +112,7 @@ class Thread
 
   def set_labels l; each { |m, *o| m && m.labels = l }; end
   def has_label? t; any? { |m, *o| m && m.has_label?(t) }; end
-  def save_state index; each { |m, *o| m && m.save_state(index) }; end
+  def each_dirty_message; each { |m, *o| m && m.dirty? && yield(m) }; end
 
   def direct_participants
     map { |m, *o| [m.from] + m.to if m }.flatten.compact.uniq