lib/sup/draft.rb in sup-0.0.1 vs lib/sup/draft.rb in sup-0.0.2

- old
+ new

@@ -8,21 +8,21 @@ @dir = dir @source = nil self.class.i_am_the_instance self end - def self.source_name; "drafts"; end + def self.source_name; "drafts://"; end def self.source_id; 9999; end - def new_source; @source = DraftLoader.new @dir; end + def new_source; @source = DraftLoader.new; end def write_draft offset = @source.gen_offset fn = @source.fn_for_offset offset File.open(fn, "w") { |f| yield f } @source.each do |offset, labels| - m = Message.new @source, offset, labels + m = Message.new :source => @source, :source_info => offset, :labels => labels Index.add_message m UpdateManager.relay :add, m end end @@ -34,29 +34,34 @@ File.delete @source.fn_for_offset(entry[:source_info]) UpdateManager.relay :delete, mid end end -class DraftLoader - attr_accessor :dir, :end_offset - bool_reader :dirty +class DraftLoader < Source + attr_accessor :dir - def initialize dir, end_offset=0 + def initialize cur_offset=0 + dir = Redwood::DRAFT_DIR Dir.mkdir dir unless File.exists? dir + super "draft://#{dir}", cur_offset, true, false @dir = dir - @end_offset = end_offset - @dirty = false end - def done?; !File.exists? fn_for_offset(@end_offset); end - def usual?; true; end def id; DraftManager.source_id; end def to_s; DraftManager.source_name; end - def is_source_for? x; x == DraftManager.source_name; end + def next + ret = nil + begin + ret = cur_offset + self.cur_offset = cur_offset + 1 + end until File.exists? fn_for_offset(ret) + [ret, [:draft]] + end + def gen_offset - i = @end_offset + i = cur_offset while File.exists? fn_for_offset(i) i += 1 end i end @@ -75,31 +80,30 @@ return RMail::Parser.read(input) end end end - ## load the full header text - def load_header_text offset + def raw_header offset ret = "" File.open fn_for_offset(offset) do |f| until f.eof? || (l = f.gets) =~ /^$/ ret += l end end ret end - def each - while File.exists?(fn = File.join(@dir, @end_offset.to_s)) - yield @end_offset, [:draft, :inbox] - @end_offset += 1 - @dirty = true + def raw_full_message offset + ret = "" + File.open fn_for_offset(offset) do |f| + ret += l until f.eof? end + ret end - def total; Dir[File.join(@dir, "*")].sort.last.to_i; end - def reset!; @end_offset = 0; @dirty = true; end + def start_offset; 0; end + def end_offset; Dir.new(@dir).entries.sort.last.to_i + 1; end end -Redwood::register_yaml(DraftLoader, %w(dir end_offset)) +Redwood::register_yaml(DraftLoader, %w(cur_offset)) end