def search(query)
query = Vmail::Query.parse(query)
@limit = query.shift.to_i
if @limit == 0
@limit = @num_messages
end
if query.size == 1 && query[0].downcase == 'all'
query.unshift [[@num_messages - @limit + 1 , 1].max, @num_messages].join(':')
@all_search = true
else
query.unshift "1:#@num_messages"
@all_search = false
end
@query = query.map {|x| x.to_s.downcase}
query_string = Vmail::Query.args2string(@query)
log "Search query: #{@query} > #{query_string.inspect}"
log "- @all_search #{@all_search}"
@query = query
@ids = reconnect_if_necessary(180) do
@imap.search(query_string)
end
fetch_ids = if @all_search
@ids
else
@start_index = [@ids.length - @limit, 0].max
@ids[@start_index..-1]
end
self.max_seqno = @ids[-1]
log "- search query got #{@ids.size} results; max seqno: #{self.max_seqno}"
clear_cached_message
res = fetch_row_text(fetch_ids)
if STDOUT.tty?
add_more_message_line(res, fetch_ids[0])
else
puts [@mailbox, res].join("\n")
end
rescue
log "ERROR:\n#{$!.inspect}\n#{$!.backtrace.join("\n")}"
end