76 lines
2.7 KiB
Lua
76 lines
2.7 KiB
Lua
aux 'scan_util' local info , filter_util = aux.info, aux.filter_util
|
|
|
|
function public.find(auction_record, status_bar, on_abort, on_failure, on_success)
|
|
|
|
local function test(index)
|
|
local auction_info = info.auction(index, auction_record.query_type)
|
|
return auction_info and auction_info.search_signature == auction_record.search_signature
|
|
end
|
|
|
|
local queries = t
|
|
tinsert(queries, t)
|
|
|
|
if auction_record.blizzard_query then
|
|
|
|
local blizzard_query1 = copy(auction_record.blizzard_query)
|
|
blizzard_query1.first_page = auction_record.page
|
|
blizzard_query1.last_page = auction_record.page
|
|
tinsert(queries, T('blizzard_query', blizzard_query1))
|
|
|
|
if auction_record.page > 0 then
|
|
local blizzard_query2 = copy(auction_record.blizzard_query)
|
|
blizzard_query2.first_page = auction_record.page - 1
|
|
blizzard_query2.last_page = auction_record.page - 1
|
|
tinsert(queries, T('blizzard_query', blizzard_query2))
|
|
end
|
|
|
|
local item_query = item_query(auction_record.item_id, 1, 1)
|
|
if not eq(auction_record.blizzard_query, item_query.blizzard_query) then
|
|
tinsert(queries, item_query)
|
|
end
|
|
end
|
|
|
|
|
|
local found
|
|
return aux.scan.start{
|
|
type = auction_record.query_type,
|
|
queries = queries,
|
|
on_scan_start = function()
|
|
status_bar:update_status(0, 0)
|
|
status_bar:set_text('Searching auction...')
|
|
end,
|
|
on_start_query = function(query_index)
|
|
status_bar:update_status((query_index - 1) / getn(queries) * 100, 0)
|
|
end,
|
|
on_auction = function(auction_record, ctrl)
|
|
if test(auction_record.index) then
|
|
found = true
|
|
ctrl.suspend()
|
|
status_bar:update_status(100, 100)
|
|
status_bar:set_text('Auction found')
|
|
return on_success(auction_record.index)
|
|
end
|
|
end,
|
|
on_abort = function()
|
|
if not found then
|
|
status_bar:update_status(100, 100)
|
|
status_bar:set_text('Auction not found')
|
|
return on_abort()
|
|
end
|
|
end,
|
|
on_complete = function()
|
|
status_bar:update_status(100, 100)
|
|
status_bar:set_text('Auction not found')
|
|
return on_failure()
|
|
end,
|
|
}
|
|
end
|
|
|
|
function public.item_query(item_id, first_page, last_page)
|
|
for item_info in present(info.item(item_id)) do
|
|
local query = filter_util.query(item_info.name..'/exact')
|
|
query.blizzard_query.first_page = first_page
|
|
query.blizzard_query.last_page = last_page
|
|
return T('validator', query.validator, 'blizzard_query', query.blizzard_query)
|
|
end
|
|
end |