factored out scan into separate file
This commit is contained in:
@@ -0,0 +1,166 @@
|
||||
local SCAN_STATE_IDLE = 0
|
||||
local SCAN_STATE_PREQUERY = 1
|
||||
local SCAN_STATE_POSTQUERY = 2
|
||||
|
||||
NUM_AUCTION_ITEMS_PER_PAGE = 50
|
||||
|
||||
local currentQuery
|
||||
local currentPage
|
||||
local scanState = SCAN_STATE_IDLE
|
||||
|
||||
local scanData
|
||||
|
||||
-----------------------------------------
|
||||
|
||||
function Auctionator_Scan_State_Idle()
|
||||
return scanState == SCAN_STATE_IDLE
|
||||
end
|
||||
|
||||
function Auctionator_Scan_State_Prequery()
|
||||
return scanState == SCAN_STATE_PREQUERY
|
||||
end
|
||||
|
||||
function Auctionator_Scan_State_Postquery()
|
||||
return scanState == SCAN_STATE_POSTQUERY
|
||||
end
|
||||
|
||||
-----------------------------------------
|
||||
|
||||
function Auctionator_Scan_Complete()
|
||||
|
||||
if currentQuery.onComplete then
|
||||
currentQuery.onComplete(scanData);
|
||||
end
|
||||
|
||||
currentQuery = nil
|
||||
currentPage = nil
|
||||
scanData = nil
|
||||
scanState = SCAN_STATE_IDLE
|
||||
end
|
||||
|
||||
-----------------------------------------
|
||||
|
||||
function Auctionator_Scan_Abort()
|
||||
|
||||
if currentQuery and currentQuery.onAbort then
|
||||
currentQuery.onAbort();
|
||||
end
|
||||
|
||||
currentQuery = nil
|
||||
currentPage = nil
|
||||
scanData = nil
|
||||
scanState = SCAN_STATE_IDLE
|
||||
end
|
||||
|
||||
-----------------------------------------
|
||||
|
||||
function Auctionator_Scan_Query()
|
||||
if scanState == SCAN_STATE_PREQUERY then
|
||||
|
||||
QueryAuctionItems(
|
||||
currentQuery.name,
|
||||
currentQuery.minLevel,
|
||||
currentQuery.maxLevel,
|
||||
currentQuery.invTypeIndex,
|
||||
currentQuery.classIndex,
|
||||
currentQuery.subclassIndex,
|
||||
currentPage,
|
||||
currentQuery.isUsable,
|
||||
currentQuery.qualityIndex
|
||||
)
|
||||
scanState = SCAN_STATE_POSTQUERY
|
||||
currentPage = currentPage + 1
|
||||
end
|
||||
end
|
||||
|
||||
-----------------------------------------
|
||||
|
||||
function Auctionator_Scan_Process()
|
||||
|
||||
if scanState == SCAN_STATE_POSTQUERY then
|
||||
|
||||
-- SortAuctionItems("list", "buyout")
|
||||
-- if IsAuctionSortReversed("list", "buyout") then
|
||||
-- SortAuctionItems("list", "buyout")
|
||||
-- end
|
||||
|
||||
local numBatchAuctions, totalAuctions = GetNumAuctionItems("list")
|
||||
|
||||
if totalAuctions >= NUM_AUCTION_ITEMS_PER_PAGE then
|
||||
Auctionator_SetMessage("Scanning auctions: page "..currentPage.." ...")
|
||||
end
|
||||
|
||||
for i = 1, numBatchAuctions do
|
||||
|
||||
local name, texture, count, quality, canUse, level, minBid, minIncrement, buyoutPrice, bidAmount, highBidder, owner = GetAuctionItemInfo("list", i)
|
||||
local duration = GetAuctionItemTimeLeft("list", i)
|
||||
|
||||
local scanDatum = {
|
||||
name = name,
|
||||
texture = texture,
|
||||
stackSize = count,
|
||||
quality = quality,
|
||||
canUse = canUse,
|
||||
level = level,
|
||||
minBid = minBid,
|
||||
minIncrement = minIncrement,
|
||||
buyoutPrice = buyoutPrice,
|
||||
bidAmount = bidAmount,
|
||||
highBidder = highBidder,
|
||||
owner = owner,
|
||||
duration = duration
|
||||
}
|
||||
|
||||
if not currentQuery.exactMatch or (currentQuery.name == scanDatum.name and scanDatum.buyoutPrice > 0) then -- TODO separate option for buyout price
|
||||
tinsert(scanData, scanDatum)
|
||||
if currentQuery.onReadDatum then
|
||||
currentQuery.onReadDatum(scanDatum)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if numBatchAuctions == NUM_AUCTION_ITEMS_PER_PAGE then
|
||||
scanState = SCAN_STATE_PREQUERY
|
||||
else
|
||||
Auctionator_Scan_Complete()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-----------------------------------------
|
||||
|
||||
function Auctionator_Scan_Start(query)
|
||||
|
||||
Auctionator_SetMessage("Scanning auctions ...")
|
||||
|
||||
if scanState ~= SCAN_STATE_IDLE then
|
||||
Auctionator_Scan_Abort()
|
||||
end
|
||||
|
||||
currentQuery = query
|
||||
currentPage = 0
|
||||
scanData = {}
|
||||
scanState = SCAN_STATE_PREQUERY
|
||||
end
|
||||
|
||||
-----------------------------------------
|
||||
|
||||
function Auctionator_Scan_CreateQuery(parameterMap)
|
||||
local query = {
|
||||
name = nil,
|
||||
exactMatch = false,
|
||||
minLevel = "",
|
||||
maxLevel = "",
|
||||
invTypeIndex = nil,
|
||||
classIndex = nil,
|
||||
subclassIndex = nil,
|
||||
isUsable = nil,
|
||||
qualityIndex = nil
|
||||
}
|
||||
|
||||
for k,v in pairs(parameterMap) do
|
||||
query[k] = v
|
||||
end
|
||||
|
||||
return query
|
||||
end
|
||||
Reference in New Issue
Block a user