sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit 447533afd212ee3080ffac85aa56b30180fce1ec
parent e24ea497cf4f86f0e6b99e3333b39aeb0f71c11f
Author: William Morgan <wmorgan-sup@masanjin.net>
Date:   Sun, 26 Apr 2009 18:18:26 -0400

don't automatically parse header on Message#new

You must now explicitly call #parse_header (e.g. when loading
from the index) or #load_from_source! (e.g. when loading from
disk).

This prevents redundant loading from the source when adding to the
index, as #snippet must be called before adding, and that requires
loading the entire message from the source.

Diffstat:
M lib/sup/index.rb | 6 ++++--
M lib/sup/message.rb | 3 +--
M lib/sup/poll.rb | 2 ++
3 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/lib/sup/index.rb b/lib/sup/index.rb
@@ -413,9 +413,11 @@ EOS
         "references" => doc[:refs].split(/\s+/).map { |x| "<#{x}>" }.join(" "),
       }
 
-      Message.new :source => source, :source_info => doc[:source_info].to_i,
+      m = Message.new :source => source, :source_info => doc[:source_info].to_i,
                   :labels => doc[:label].split(" ").map { |s| s.intern },
-                  :snippet => doc[:snippet], :header => fake_header
+                  :snippet => doc[:snippet]
+      m.parse_header fake_header
+      m
     end
   end
 
diff --git a/lib/sup/message.rb b/lib/sup/message.rb
@@ -60,7 +60,7 @@ class Message
     ## why.
     @refs = []
 
-    parse_header(opts[:header] || @source.load_header(@source_info))
+    #parse_header(opts[:header] || @source.load_header(@source_info))
   end
 
   def parse_header header
@@ -123,7 +123,6 @@ class Message
     @list_subscribe = header["list-subscribe"]
     @list_unsubscribe = header["list-unsubscribe"]
   end
-  private :parse_header
 
   def add_ref ref
     @refs << ref
diff --git a/lib/sup/poll.rb b/lib/sup/poll.rb
@@ -149,6 +149,8 @@ EOS
 
         begin
           m = Message.new :source => source, :source_info => offset, :labels => labels
+          m.load_from_source!
+
           if m.source_marked_read?
             m.remove_label :unread
             labels.delete :unread