]> git.cworth.org Git - sup/commitdiff
don't automatically parse header on Message#new
authorWilliam Morgan <wmorgan-sup@masanjin.net>
Sun, 26 Apr 2009 22:18:26 +0000 (18:18 -0400)
committerWilliam Morgan <wmorgan-sup@masanjin.net>
Sun, 26 Apr 2009 22:20:15 +0000 (18:20 -0400)
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.

lib/sup/index.rb
lib/sup/message.rb
lib/sup/poll.rb

index 725dda6e85af7dc962f9502fda915234fd90e917..c66a24eac428ab7256ea237db16c42e126189dd7 100644 (file)
@@ -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
 
index dea54aca55603ac9d2ab4750f062a7753a2ccdf2..263fde3fedd86a2919adc14116198832d066311c 100644 (file)
@@ -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
index afda64f61420d9f317a2d0f6167cccdf6e12916e..de3fbcb848833edfd0a320482f3c9adb8bf1b0d4 100644 (file)
@@ -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