]> git.cworth.org Git - sup/commitdiff
more tweaks of detailed-header hook
authorwmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Wed, 5 Dec 2007 18:38:25 +0000 (18:38 +0000)
committerwmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Wed, 5 Dec 2007 18:38:25 +0000 (18:38 +0000)
git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@739 5c8cc53c-5e98-4d25-b20a-d8db53a31250

lib/sup/imap.rb
lib/sup/modes/thread-view-mode.rb
lib/sup/util.rb

index d648763b0c2f1c77841dd2960a281407a5e9b819..f9d31942af76a2ef37366ad1bb87a14c24a17a37 100644 (file)
@@ -141,6 +141,7 @@ class IMAP < Source
       @ids << id
       @imap_state[id] = { :id => v.seqno, :flags => v.attr["FLAGS"] }
     end
+    Redwood::log "done fetching IMAP headers"
   end
   synchronized :scan_mailbox
 
index 9c1edb1035387591719f5c1a200eb5fac8f30701..fbe6351c3997c27509edf1d901d35fe7dcdb9635 100644 (file)
@@ -17,9 +17,10 @@ class ThreadViewMode < LineCursorMode
 Add or remove headers from the detailed header display of a message.
 Variables:
   message: The message whose headers are to be formatted.
-  headers: A hash of header name, value pairs for the default display.
+  headers: A hash of header (name, value) pairs, initialized to the default
+           headers.
 Return value:
-  A hash of the same form of 'headers'.
+  None. The variable 'headers' should be modified in place.
 EOS
 
   register_keymap do |k|
@@ -465,10 +466,9 @@ private
         addressee_lines += format_person_list "   Bcc: ", m.bcc
       end
 
-      headers = {
-        "Date" => "#{m.date.strftime DATE_FORMAT} (#{m.date.to_nice_distance_s})",
-        "Subject" => m.subj,
-      }
+      headers = OrderedHash.new
+      headers["Date"] = "#{m.date.strftime DATE_FORMAT} (#{m.date.to_nice_distance_s})"
+      headers["Subject"] = m.subj
 
       show_labels = @thread.labels - LabelManager::HIDDEN_RESERVED_LABELS
       unless show_labels.empty?
@@ -478,7 +478,7 @@ private
         headers["In reply to"] = "#{parent.from.mediumname}'s message of #{parent.date.strftime DATE_FORMAT}"
       end
 
-      headers = (HookManager.run("detailed-headers", :message => m, :headers => headers)) || headers
+      HookManager.run "detailed-headers", :message => m, :headers => headers
       
       from_line + (addressee_lines + headers.map { |k, v| "   #{k}: #{v}" }).map { |l| [[color, prefix + "  " + l]] }
     end
index 3ffb92bc39ab04db182873c19268ed7b6a5c19d3..cc15803b1ddb4ed9a6b4d91d7c6ceb935e26a9e5 100644 (file)
@@ -573,3 +573,27 @@ class SavingHash
 
   defer_all_other_method_calls_to :hash
 end
+
+class OrderedHash < Hash
+  alias_method :store, :[]=
+  alias_method :each_pair, :each
+
+  def initialize
+    @keys = []
+  end
+
+  def []=(key, val)
+    @keys << key unless member?(key)
+    super
+  end
+
+  def delete(key)
+    @keys.delete(key)
+    super
+  end
+
+  def each
+    @keys.each { |k| yield k, self[k] }
+  end
+end
+