]> git.cworth.org Git - sup/blob - lib/sup/modes/compose-mode.rb
add unsaved? attribute to modes
[sup] / lib / sup / modes / compose-mode.rb
1 module Redwood
2
3 class ComposeMode < EditMessageMode
4   def initialize opts={}
5     header = {}
6     header["From"] = (opts[:from] || AccountManager.default_account).full_address
7     header["To"] = opts[:to].map { |p| p.full_address }.join(", ") if opts[:to]
8     header["To"] = opts[:to].map { |p| p.full_address }.join(", ") if opts[:to]
9     header["Cc"] = opts[:cc].map { |p| p.full_address }.join(", ") if opts[:cc]
10     header["Bcc"] = opts[:bcc].map { |p| p.full_address }.join(", ") if opts[:bcc]
11     header["Subject"] = opts[:subj] if opts[:subj]
12     header["References"] = opts[:refs].map { |r| "<#{r}>" }.join(" ") if opts[:refs]
13     header["In-Reply-To"] = opts[:replytos].map { |r| "<#{r}>" }.join(" ") if opts[:replytos]
14
15     super :header => header, :body => (opts[:body] || [])
16   end
17
18   def edit_message
19     edited = super
20     BufferManager.kill_buffer self.buffer unless edited
21     edited
22   end
23
24   def self.spawn_nicely opts={}
25     to = opts[:to] || BufferManager.ask_for_contacts(:people, "To: ", [opts[:to_default]]) or return
26     cc = opts[:cc] || (BufferManager.ask_for_contacts(:people, "Cc: ") or return if $config[:ask_for_cc])
27     bcc = opts[:bcc] || (BufferManager.ask_for_contacts(:people, "Bcc: ") or return if $config[:ask_for_bcc])
28     subj = opts[:subj] || (BufferManager.ask(:subject, "Subject: ") or return if $config[:ask_for_subject])
29     
30     mode = ComposeMode.new :from => opts[:from], :to => to, :cc => cc, :bcc => bcc, :subj => subj
31     BufferManager.spawn "New Message", mode
32     mode.edit_message
33   end
34 end
35
36 end