module Redwood

class SentManager
  include Singleton

  attr_accessor :source
  def initialize fn
    @fn = fn
    @source = nil
    self.class.i_am_the_instance self
  end

  def self.source_name; "sent"; end
  def self.source_id; 9998; end
  def new_source; @source = SentLoader.new @fn; end

  def write_sent_message date, from_email
    need_blank = File.exists?(@fn) && !File.zero?(@fn)
    File.open(@fn, "a") do |f|
      f.puts if need_blank
      f.puts "From #{from_email} #{date}"
      yield f
    end
    @source.each do |offset, labels|
      m = Message.new @source, offset, labels
      Index.add_message m
      UpdateManager.relay :add, m
    end
  end
end

class SentLoader < MBox::Loader
  def initialize filename, end_offset=0
    File.open(filename, "w") { } unless File.exists? filename
    super filename, end_offset, true, true
  end

  def id; SentManager.source_id; end
  def to_s; SentManager.source_name; end

  def labels; [:sent, :inbox]; end
end

Redwood::register_yaml(SentLoader, %w(filename end_offset))

end