]> git.cworth.org Git - sup/blob - lib/sup/sent.rb
935da2ac156c6619bd5bf1d7d799c3fd2eb700c9
[sup] / lib / sup / sent.rb
1 module Redwood
2
3 class SentManager
4   include Singleton
5
6   attr_reader :source
7   attr_reader :source_uri
8
9   def initialize source_uri
10     @source = nil
11     @source_uri = source_uri
12     self.class.i_am_the_instance self
13     Redwood::log "SentManager intialized with source uri: #@source_uri"
14   end
15
16   def source_id; @source.id; end
17
18   def source= s
19     raise FatalSourceError.new("Configured sent_source [#{s.uri}] can't store mail.  Correct your configuration.") unless s.respond_to? :store_message
20     @souce_uri = s.uri
21     @source = s
22   end
23
24   def default_source
25     @source = Recoverable.new SentLoader.new
26     Redwood::log "SentManager initializing default source: #@source."
27     @source_uri = @source.uri
28     @source
29   end
30
31   def write_sent_message date, from_email, &block
32     @source.store_message date, from_email, &block
33
34     PollManager.add_messages_from(@source) do |m, o, e|
35       m.remove_label :unread
36       m
37     end
38   end
39 end
40
41 class SentLoader < MBox::Loader
42   yaml_properties :cur_offset
43
44   def initialize cur_offset=0
45     @filename = Redwood::SENT_FN
46     File.open(@filename, "w") { } unless File.exists? @filename
47     super "mbox://" + @filename, cur_offset, true, true
48   end
49
50   def file_path; @filename end
51
52   def to_s; 'sup://sent'; end
53   def uri; 'sup://sent' end
54
55   def id; 9998; end
56   def labels; [:inbox]; end
57 end
58
59 end