From bcd323b2c47c686ae9c7388092a9fc8e4acfc775 Mon Sep 17 00:00:00 2001 From: wmorgan Date: Wed, 13 Jun 2007 00:43:29 +0000 Subject: [PATCH] use default account values for name, sendmail, signature account fields, and properly set signature based on from: address git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@452 5c8cc53c-5e98-4d25-b20a-d8db53a31250 --- lib/sup/account.rb | 18 ++++++++++----- lib/sup/modes/compose-mode.rb | 9 +------- lib/sup/modes/edit-message-mode.rb | 36 ++++++++++++++++++++---------- lib/sup/modes/forward-mode.rb | 9 +------- lib/sup/modes/reply-mode.rb | 7 +----- 5 files changed, 40 insertions(+), 39 deletions(-) diff --git a/lib/sup/account.rb b/lib/sup/account.rb index c15d5ce..68e3c2b 100644 --- a/lib/sup/account.rb +++ b/lib/sup/account.rb @@ -1,12 +1,12 @@ module Redwood class Account < Person - attr_accessor :sendmail, :sig_file + attr_accessor :sendmail, :signature def initialize email, h super h[:name], email, 0, true @sendmail = h[:sendmail] - @sig_file = h[:signature] + @signature = h[:signature] end end @@ -20,7 +20,8 @@ class AccountManager @accounts = {} @default_account = nil - accounts.each { |k, v| add_account v, k == :default } + add_account accounts[:default], true + accounts.each { |k, v| add_account v unless k == :default } self.class.i_am_the_instance self end @@ -28,10 +29,17 @@ class AccountManager def user_accounts; @accounts.keys; end def user_emails; @email_map.keys.select { |e| String === e }; end + ## must be called first with the default account. fills in missing + ## values from the default account. def add_account hash, default=false - main_email = hash[:email] + raise ArgumentError, "no email specified for account" unless hash[:email] + unless default + [:name, :sendmail, :signature].each { |k| hash[k] ||= @default_account.send(k) } + end + hash[:alternates] ||= [] - ([hash[:email]] + (hash[:alternates] || [])).each do |email| + main_email = hash[:email] + ([hash[:email]] + hash[:alternates]).each do |email| next if @email_map.member? email a = Account.new main_email, hash PersonManager.register a diff --git a/lib/sup/modes/compose-mode.rb b/lib/sup/modes/compose-mode.rb index 3c58e0b..65ea172 100644 --- a/lib/sup/modes/compose-mode.rb +++ b/lib/sup/modes/compose-mode.rb @@ -15,23 +15,16 @@ class ComposeMode < EditMessageMode @header["Bcc"] = opts[:bcc].map { |p| p.full_address }.join(", ") if opts[:bcc] @header["Subject"] = opts[:subj] if opts[:subj] - @body = (opts[:body] || []) + sig_lines + @body = opts[:body] || [] regen_text end - def lines; @text.length; end - def [] i; @text[i]; end - protected def handle_new_text new_header, new_body @header = new_header @body = new_body end - - def regen_text - @text = header_lines(@header - EditMessageMode::NON_EDITABLE_HEADERS) + [""] + @body - end end end diff --git a/lib/sup/modes/edit-message-mode.rb b/lib/sup/modes/edit-message-mode.rb index bf48a64..866a82f 100644 --- a/lib/sup/modes/edit-message-mode.rb +++ b/lib/sup/modes/edit-message-mode.rb @@ -23,6 +23,9 @@ class EditMessageMode < LineCursorMode @edited = false end + def lines; @text.length; end + def [] i; @text[i]; end + def edit @file = Tempfile.new "sup.#{self.class.name.gsub(/.*::/, '').camel_to_hyphy}" @file.puts header_lines(header - NON_EDITABLE_HEADERS) @@ -57,6 +60,10 @@ protected buffer.mark_dirty end + def regen_text + @text = header_lines(header - NON_EDITABLE_HEADERS) + [""] + body + sig_lines + end + def parse_file fn File.open(fn) do |f| header = MBox::read_header f @@ -140,17 +147,6 @@ protected BufferManager.flash "Saved for later editing." end - def sig_lines - sigfn = (AccountManager.account_for(header["From"]) || - AccountManager.default_account).sig_file - - if sigfn && File.exists?(sigfn) - ["", "-- "] + File.readlines(sigfn).map { |l| l.chomp } - else - [] - end - end - def write_message f, full_header=true, date=Time.now raise ArgumentError, "no pre-defined date: header allowed" if header["Date"] f.puts header_lines(header) @@ -165,8 +161,24 @@ EOS end f.puts - f.puts @body.map { |l| l =~ /^From / ? ">#{l}" : l } + f.puts body.map { |l| l =~ /^From / ? ">#{l}" : l } + f.puts sig_lines end + +private + + + def sig_lines + p = PersonManager.person_for header["From"] + sigfn = (AccountManager.account_for(p.email) || + AccountManager.default_account).signature + + if sigfn && File.exists?(sigfn) + ["", "-- "] + File.readlines(sigfn).map { |l| l.chomp } + else + [] + end + end end end diff --git a/lib/sup/modes/forward-mode.rb b/lib/sup/modes/forward-mode.rb index 0cbf1ec..37beeba 100644 --- a/lib/sup/modes/forward-mode.rb +++ b/lib/sup/modes/forward-mode.rb @@ -10,13 +10,10 @@ class ForwardMode < EditMessageMode "Subject" => "Fwd: #{m.subj}", "Message-Id" => gen_message_id, } - @body = forward_body_lines(m) + sig_lines + @body = forward_body_lines m regen_text end - def lines; @text.length; end - def [] i; @text[i]; end - protected def forward_body_lines m @@ -29,10 +26,6 @@ protected @header = new_header @body = new_body end - - def regen_text - @text = header_lines(@header - NON_EDITABLE_HEADERS) + [""] + @body - end end end diff --git a/lib/sup/modes/reply-mode.rb b/lib/sup/modes/reply-mode.rb index dee7aaa..e29bf57 100644 --- a/lib/sup/modes/reply-mode.rb +++ b/lib/sup/modes/reply-mode.rb @@ -22,7 +22,7 @@ class ReplyMode < EditMessageMode ## it's important to put this early because it forces a read of ## the full headers (most importantly the list-post header, if ## any) - @body = reply_body_lines(message) + @body = reply_body_lines message from = if @m.recipient_email @@ -89,7 +89,6 @@ class ReplyMode < EditMessageMode :recipient end - @body += sig_lines regen_text end @@ -133,10 +132,6 @@ protected end end - def regen_text - @text = header_lines(header - NON_EDITABLE_HEADERS) + [""] + body - end - def gen_references (@m.refs + [@m.id]).map { |x| "<#{x}>" }.join(" ") end -- 2.45.2