def initialize dir
@dir = dir
@source = nil
- self.class.i_am_the_instance self
end
def self.source_name; "sup://drafts"; end
File.open(fn, "w") { |f| yield f }
my_message = nil
- @source.each do |thisoffset, theselabels|
- m = Message.new :source => @source, :source_info => thisoffset, :labels => theselabels
- Index.sync_message m
- UpdateManager.relay self, :added, m
- my_message = m if thisoffset == offset
+ PollManager.each_message_from(@source) do |m|
+ PollManager.add_new_message m
+ my_message = m
end
my_message
end
def discard m
- docid, entry = Index.load_entry_for_id m.id
- unless entry
- Redwood::log "can't find entry for draft: #{m.id.inspect}. You probably already discarded it."
- return
- end
- raise ArgumentError, "not a draft: source id #{entry[:source_id].inspect}, should be #{DraftManager.source_id.inspect} for #{m.id.inspect} / docno #{docid}" unless entry[:source_id].to_i == DraftManager.source_id
- Index.drop_entry docid
- File.delete @source.fn_for_offset(entry[:source_info])
+ raise ArgumentError, "not a draft: source id #{m.source.id.inspect}, should be #{DraftManager.source_id.inspect} for #{m.id.inspect}" unless m.source.id.to_i == DraftManager.source_id
+ Index.delete m.id
+ File.delete @source.fn_for_offset(m.source_info)
UpdateManager.relay self, :single_message_deleted, m
end
end
def fn_for_offset o; File.join(@dir, o.to_s); end
def load_header offset
- File.open fn_for_offset(offset) do |f|
- return MBox::read_header(f)
- end
+ File.open(fn_for_offset(offset)) { |f| parse_raw_email_header f }
end
def load_message offset