def make_id imap_stuff
# use 7 digits for the size. why 7? seems nice.
+ %w(RFC822.SIZE INTERNALDATE).each do |w|
+ raise FatalSourceError, "requested data not in IMAP response: #{w}" unless imap_stuff.attr[w]
+ end
+
msize, mdate = imap_stuff.attr['RFC822.SIZE'] % 10000000, Time.parse(imap_stuff.attr["INTERNALDATE"])
sprintf("%d%07d", mdate.to_i, msize).to_i
end
got_id = make_id results
raise OutOfSyncSourceError, "IMAP message mismatch: requested #{id}, got #{got_id}." unless got_id == id
- fields.map { |f| results.attr[f] }
+ fields.map { |f| results.attr[f] or raise FatalSourceError, "empty response from IMAP server: #{f}" }
end
## execute a block, connected if unconnected, re-connected up to 3