3 class SourceError < StandardError; end
6 ## dirty? described whether cur_offset has changed, which means the
7 ## source needs to be re-saved to disk.
9 ## broken? means no message can be loaded (e.g. IMAP server is
10 ## down), so don't even bother.
11 bool_reader :usual, :archived, :dirty
12 attr_reader :cur_offset, :broken
15 ## You should implement:
19 ## load_header(offset)
20 ## load_message(offset)
22 ## raw_full_message(offset)
25 def initialize uri, initial_offset=nil, usual=true, archived=false, id=nil
27 @cur_offset = initial_offset || start_offset
35 def broken?; !@broken.nil?; end
37 def seek_to! o; self.cur_offset = o; end
38 def reset!; seek_to! start_offset; end
39 def == o; o.to_s == to_s; end
40 def done?; cur_offset >= end_offset; end
41 def is_source_for? s; to_s == s; end
46 raise "no message" unless n
47 labels += [:inbox] unless archived?
62 Redwood::register_yaml(Source, %w(uri cur_offset usual archived id))