def each
return unless start_offset
ids =
@mutex.synchronize do
unsynchronized_scan_mailbox
@ids
end
start = ids.index(cur_offset || start_offset) or raise OutOfSyncSourceError, "Unknown message id #{cur_offset || start_offset}."
start.upto(ids.length - 1) do |i|
id = ids[i]
state = @mutex.synchronize { @imap_state[id] } or next
self.cur_offset = id
labels = { :Flagged => :starred,
:Deleted => :deleted
}.inject(@labels) do |cur, (imap, sup)|
cur + (state[:flags].include?(imap) ? [sup] : [])
end
labels += [:unread] unless state[:flags].include?(:Seen)
yield id, labels
end
end