]> git.cworth.org Git - sup/commitdiff
use default account values for name, sendmail, signature account fields, and properly...
authorwmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Wed, 13 Jun 2007 00:43:29 +0000 (00:43 +0000)
committerwmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Wed, 13 Jun 2007 00:43:29 +0000 (00:43 +0000)
git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@452 5c8cc53c-5e98-4d25-b20a-d8db53a31250

lib/sup/account.rb
lib/sup/modes/compose-mode.rb
lib/sup/modes/edit-message-mode.rb
lib/sup/modes/forward-mode.rb
lib/sup/modes/reply-mode.rb

index c15d5cee3b8517901a3547d9e6170e5106c06698..68e3c2b31a41a2865c7e0e58ff8138369edc5ae5 100644 (file)
@@ -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
index 3c58e0b2419480a42dbaabdcaba7894f32e9c355..65ea172013b6a25f05d8911afc52e605b6f6e61e 100644 (file)
@@ -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
index bf48a64b1f274f2799c6cb67ee0cbf429ed76870..866a82f2cdf39fbc25a7c10ca331f61858b8f990 100644 (file)
@@ -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
index 0cbf1ec46d6a0033be0e42b929efd88911db1a68..37beeba415da93d2efcff2fec4139be3d3ec8447 100644 (file)
@@ -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
index dee7aaa7bc57286d69b4539acc99d87adc87b647..e29bf574d9a0b88c36a1716e394fa1da28566c36 100644 (file)
@@ -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