]> git.cworth.org Git - sup/blobdiff - lib/sup/modes/compose-mode.rb
Unbreak "bounce-command" hook (was referencing an nonexistent variable)
[sup] / lib / sup / modes / compose-mode.rb
index 3c58e0b2419480a42dbaabdcaba7894f32e9c355..04d5922381b728de2034c9dbda3b8089d78d7ccc 100644 (file)
@@ -1,36 +1,34 @@
 module Redwood
 
 class ComposeMode < EditMessageMode
-  attr_reader :body, :header
-
   def initialize opts={}
-    super()
-    @header = {
-      "From" => AccountManager.default_account.full_address,
-      "Message-Id" => gen_message_id,
-    }
-
-    @header["To"] = opts[:to].map { |p| p.full_address }.join(", ") if opts[:to]
-    @header["Cc"] = opts[:cc].map { |p| p.full_address }.join(", ") if opts[:cc]
-    @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
-    regen_text
+    header = {}
+    header["From"] = (opts[:from] || AccountManager.default_account).full_address
+    header["To"] = opts[:to].map { |p| p.full_address }.join(", ") if opts[:to]
+    header["Cc"] = opts[:cc].map { |p| p.full_address }.join(", ") if opts[:cc]
+    header["Bcc"] = opts[:bcc].map { |p| p.full_address }.join(", ") if opts[:bcc]
+    header["Subject"] = opts[:subj] if opts[:subj]
+    header["References"] = opts[:refs].map { |r| "<#{r}>" }.join(" ") if opts[:refs]
+    header["In-Reply-To"] = opts[:replytos].map { |r| "<#{r}>" }.join(" ") if opts[:replytos]
+
+    super :header => header, :body => (opts[:body] || [])
   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
+  def edit_message
+    edited = super
+    BufferManager.kill_buffer self.buffer unless edited
+    edited
   end
 
-  def regen_text
-    @text = header_lines(@header - EditMessageMode::NON_EDITABLE_HEADERS) + [""] + @body
+  def self.spawn_nicely opts={}
+    to = opts[:to] || BufferManager.ask_for_contacts(:people, "To: ", [opts[:to_default]]) or return
+    cc = opts[:cc] || (BufferManager.ask_for_contacts(:people, "Cc: ") or return if $config[:ask_for_cc])
+    bcc = opts[:bcc] || (BufferManager.ask_for_contacts(:people, "Bcc: ") or return if $config[:ask_for_bcc])
+    subj = opts[:subj] || (BufferManager.ask(:subject, "Subject: ") or return if $config[:ask_for_subject])
+    
+    mode = ComposeMode.new :from => opts[:from], :to => to, :cc => cc, :bcc => bcc, :subj => subj
+    BufferManager.spawn "New Message", mode
+    mode.edit_message
   end
 end