Browse Source

update scan

dev
Jørgen Lien Sellæg 4 months ago
parent
commit
caf152df3a
  1. 86
      TradeSkillMaster_AuctionDB/Modules/ChannelSync.lua
  2. 2
      TradeSkillMaster_AuctionDB/Modules/Scanning.lua
  3. 2
      TradeSkillMaster_AuctionDB/Modules/data.lua

86
TradeSkillMaster_AuctionDB/Modules/ChannelSync.lua

@ -104,24 +104,21 @@ local function DecodePayload(encoded)
return payload
end
function ChannelSync:BroadcastScanData(scanType)
function ChannelSync:BroadcastScanData(scanType, items)
if scanType ~= "Full" and scanType ~= "GetAll" and scanType ~= "Group" and scanType ~= "Search" then
return
end
if TSM.processingData then
TSMAPI:CreateTimeDelay("auctionDBChannelSyncBroadcast", 0.5, function()
ChannelSync:BroadcastScanData(scanType)
ChannelSync:BroadcastScanData(scanType, items)
end)
return
end
EnsureChannel()
if not private.channelName or not private.channelId then return end
TSM:Serialize()
local payload = {
scanTime = TSM.db.realm.lastCompleteScan,
scanData = TSM.db.realm.scanData,
}
local payload = ChannelSync:BuildPayload(scanType, items)
if not payload then return end
local encoded = EncodePayload(payload)
if not encoded then return end
@ -141,28 +138,95 @@ function ChannelSync:BroadcastScanData(scanType)
end
end
function ChannelSync:BuildPayload(scanType, items)
local itemIDs = {}
if items then
if #items > 0 then
for _, itemString in ipairs(items) do
local itemID = TSMAPI:GetItemID(itemString)
if itemID then
itemIDs[itemID] = true
end
end
else
for itemString in pairs(items) do
local itemID = TSMAPI:GetItemID(itemString)
if itemID then
itemIDs[itemID] = true
end
end
end
else
local scanTime = TSM.db.realm.lastCompleteScan
for itemID in pairs(TSM.data) do
TSM:DecodeItemData(itemID)
if TSM.data[itemID].lastScan == scanTime then
itemIDs[itemID] = true
end
end
end
local payloadItems = {}
for itemID in pairs(itemIDs) do
local data = TSM.data[itemID]
if data then
TSM:EncodeItemData(itemID)
if data.encoded then
payloadItems[itemID] = data.encoded
end
end
end
if not next(payloadItems) then return end
return {
v = 1,
scanType = scanType,
scanTime = TSM.db.realm.lastCompleteScan,
items = payloadItems,
}
end
local function DecodeIncomingItem(itemID, encoded)
local tmp = {}
tmp[itemID] = {encoded = encoded}
TSM:DecodeItemData(itemID, tmp)
return tmp[itemID]
end
local function MergeIncomingData(payload, sender)
if type(payload) ~= "table" or type(payload.scanData) ~= "string" then return end
if type(payload) ~= "table" then return end
local incoming = {}
if payload.items then
incoming = payload.items
elseif type(payload.scanData) == "string" then
TSM:Deserialize(payload.scanData, incoming, true)
else
return
end
local updated = 0
local lastItemID
for itemID, data in pairs(incoming) do
local incomingData = data
if payload.items then
incomingData = DecodeIncomingItem(itemID, data)
end
if incomingData then
local existing = TSM.data[itemID]
if existing then
TSM:DecodeItemData(itemID)
if data.lastScan and (not existing.lastScan or data.lastScan > existing.lastScan) then
TSM.data[itemID] = data
if incomingData.lastScan and (not existing.lastScan or incomingData.lastScan > existing.lastScan) then
TSM.data[itemID] = incomingData
updated = updated + 1
lastItemID = itemID
end
else
TSM.data[itemID] = data
TSM.data[itemID] = incomingData
updated = updated + 1
lastItemID = itemID
end
end
end
if payload.scanTime and (not TSM.db.realm.lastCompleteScan or payload.scanTime > TSM.db.realm.lastCompleteScan) then
TSM.db.realm.lastCompleteScan = payload.scanTime

2
TradeSkillMaster_AuctionDB/Modules/Scanning.lua

@ -580,7 +580,7 @@ function Scan:ProcessScanData(scanData)
-- Process the collected auction data.
TSM.Data:ProcessData(data, Scan.groupItems, verifyNewAlgorithm)
if TSM.ChannelSync then
TSM.ChannelSync:BroadcastScanData(Scan.isScanning)
TSM.ChannelSync:BroadcastScanData(Scan.isScanning, Scan.groupItems)
end
end

2
TradeSkillMaster_AuctionDB/Modules/data.lua

@ -171,7 +171,7 @@ function Data:ProcessExternalScanData(scanData, groupItems, scanTime)
if not next(data) then return end
Data:ProcessData(data, groupSet, nil, scanTime or time(), true)
if TSM.ChannelSync then
TSM.ChannelSync:BroadcastScanData("Search")
TSM.ChannelSync:BroadcastScanData("Search", groupSet)
end
end

Loading…
Cancel
Save