From 2cde2aeb826cb80d94dec045fa105e2e791ef1b6 Mon Sep 17 00:00:00 2001 From: wmorgan Date: Wed, 5 Dec 2007 18:38:25 +0000 Subject: [PATCH] more tweaks of detailed-header hook git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@739 5c8cc53c-5e98-4d25-b20a-d8db53a31250 --- lib/sup/imap.rb | 1 + lib/sup/modes/thread-view-mode.rb | 14 +++++++------- lib/sup/util.rb | 24 ++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/lib/sup/imap.rb b/lib/sup/imap.rb index d648763..f9d3194 100644 --- a/lib/sup/imap.rb +++ b/lib/sup/imap.rb @@ -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 diff --git a/lib/sup/modes/thread-view-mode.rb b/lib/sup/modes/thread-view-mode.rb index 9c1edb1..fbe6351 100644 --- a/lib/sup/modes/thread-view-mode.rb +++ b/lib/sup/modes/thread-view-mode.rb @@ -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 diff --git a/lib/sup/util.rb b/lib/sup/util.rb index 3ffb92b..cc15803 100644 --- a/lib/sup/util.rb +++ b/lib/sup/util.rb @@ -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 + -- 2.43.0