From: wmorgan Date: Sat, 27 Oct 2007 17:40:00 +0000 (+0000) Subject: message/rfc822 mime-type handling X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=f1a13dd2a9b9b8259d29d0ed7523b21a5fd1fff8;p=sup message/rfc822 mime-type handling git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@621 5c8cc53c-5e98-4d25-b20a-d8db53a31250 --- diff --git a/bin/sup b/bin/sup index e2b331a..be455fa 100644 --- a/bin/sup +++ b/bin/sup @@ -130,6 +130,7 @@ begin c.add :cryptosig_valid_color, Ncurses::COLOR_YELLOW, Ncurses::COLOR_BLACK, Ncurses::A_BOLD c.add :cryptosig_unknown_color, Ncurses::COLOR_CYAN, Ncurses::COLOR_BLACK c.add :cryptosig_invalid_color, Ncurses::COLOR_YELLOW, Ncurses::COLOR_RED, Ncurses::A_BOLD + c.add :generic_notice_patina_color, Ncurses::COLOR_YELLOW, Ncurses::COLOR_BLACK c.add :quote_patina_color, Ncurses::COLOR_YELLOW, Ncurses::COLOR_BLACK c.add :sig_patina_color, Ncurses::COLOR_YELLOW, Ncurses::COLOR_BLACK c.add :quote_color, Ncurses::COLOR_YELLOW, Ncurses::COLOR_BLACK diff --git a/lib/sup/message-chunks.rb b/lib/sup/message-chunks.rb index de7d4b5..e96dab4 100644 --- a/lib/sup/message-chunks.rb +++ b/lib/sup/message-chunks.rb @@ -10,18 +10,18 @@ ## inlineable, #color and #lines are called and the output is treated ## as part of the message text. This is how Text and one-line Quotes ## and Signatures work. - -## If it's expandable, #patina_color and #patina_text are called to -## generate a "patina" (a one-line widget, basically), and the user -## can press enter to toggle the display of the chunk content, which -## is generated from #color and #lines). This is how Quote, Signature, -## and most widgets work. - -## If it's viewable, a patina is displayed using #patina_color and -## #patina_text, but no toggling is allowed. Instead, if #view! is -## defined, pressing enter on the widget calls view! and (if that -## returns false) #to_s. Otherwise enter does nothing. This is how -## non-inlineable attachments work. +## +## If it's not inlineable but is expandable, #patina_color and +## #patina_text are called to generate a "patina" (a one-line widget, +## basically), and the user can press enter to toggle the display of +## the chunk content, which is generated from #color and #lines as +## above. This is how Quote, Signature, and most widgets work. +## +## If it's not expandable but is viewable, a patina is displayed using +## #patina_color and #patina_text, but no toggling is allowed. Instead, +## if #view! is defined, pressing enter on the widget calls view! and +## (if that returns false) #to_s. Otherwise, enter does nothing. This +## is how non-inlineable attachments work. module Redwood module Chunk @@ -137,14 +137,19 @@ EOS end class EnclosedMessageNotice - attr_reader :from - def initialize from + attr_reader :from, :lines + def initialize from, body @from = from + @lines = body.split "\n" end - def to_s - "Begin enclosed message from #{@from.longname}" - end + def inlineable?; false end + def expandable?; true end + + def patina_color; :generic_notice_patina_color end + def patina_text; "Begin enclosed message from #{@from.longname} (#{@lines.length} lines)" end + + def color; :quote_color end end class CryptoNotice diff --git a/lib/sup/message.rb b/lib/sup/message.rb index 6eb47d8..0d4a780 100644 --- a/lib/sup/message.rb +++ b/lib/sup/message.rb @@ -323,6 +323,9 @@ private end chunks + elsif m.header.content_type == "message/rfc822" + payload = RMail::Parser.read(m.body) + [Chunk::EnclosedMessageNotice.new(PersonManager.person_for(payload.header.from.first.format), payload.to_s)] else filename = ## first, paw through the headers looking for a filename diff --git a/lib/sup/modes/thread-view-mode.rb b/lib/sup/modes/thread-view-mode.rb index d9c3f8c..2f25b25 100644 --- a/lib/sup/modes/thread-view-mode.rb +++ b/lib/sup/modes/thread-view-mode.rb @@ -478,6 +478,7 @@ private (chunk.is_draft? ? [[[:draft_notification_color, prefix + " >>> This message is a draft. To edit, hit 'e'. <<<"]]] : []) else + raise "Bad chunk: #{chunk.inspect}" unless chunk.respond_to?(:inlineable?) ## debugging if chunk.inlineable? chunk.lines.map { |line| [[chunk.color, "#{prefix}#{line}"]] } elsif chunk.expandable?