Browse Source

update scan

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

100
TradeSkillMaster_AuctionDB/Modules/ChannelSync.lua

@ -104,24 +104,21 @@ local function DecodePayload(encoded)
return payload return payload
end end
function ChannelSync:BroadcastScanData(scanType) function ChannelSync:BroadcastScanData(scanType, items)
if scanType ~= "Full" and scanType ~= "GetAll" and scanType ~= "Group" and scanType ~= "Search" then if scanType ~= "Full" and scanType ~= "GetAll" and scanType ~= "Group" and scanType ~= "Search" then
return return
end end
if TSM.processingData then if TSM.processingData then
TSMAPI:CreateTimeDelay("auctionDBChannelSyncBroadcast", 0.5, function() TSMAPI:CreateTimeDelay("auctionDBChannelSyncBroadcast", 0.5, function()
ChannelSync:BroadcastScanData(scanType) ChannelSync:BroadcastScanData(scanType, items)
end) end)
return return
end end
EnsureChannel() EnsureChannel()
if not private.channelName or not private.channelId then return end if not private.channelName or not private.channelId then return end
TSM:Serialize() local payload = ChannelSync:BuildPayload(scanType, items)
local payload = { if not payload then return end
scanTime = TSM.db.realm.lastCompleteScan,
scanData = TSM.db.realm.scanData,
}
local encoded = EncodePayload(payload) local encoded = EncodePayload(payload)
if not encoded then return end if not encoded then return end
@ -141,26 +138,93 @@ function ChannelSync:BroadcastScanData(scanType)
end end
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) 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 = {} local incoming = {}
TSM:Deserialize(payload.scanData, incoming, true) 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 updated = 0
local lastItemID local lastItemID
for itemID, data in pairs(incoming) do for itemID, data in pairs(incoming) do
local existing = TSM.data[itemID] local incomingData = data
if existing then if payload.items then
TSM:DecodeItemData(itemID) incomingData = DecodeIncomingItem(itemID, data)
if data.lastScan and (not existing.lastScan or data.lastScan > existing.lastScan) then end
TSM.data[itemID] = data if incomingData then
local existing = TSM.data[itemID]
if existing then
TSM:DecodeItemData(itemID)
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] = incomingData
updated = updated + 1 updated = updated + 1
lastItemID = itemID lastItemID = itemID
end end
else
TSM.data[itemID] = data
updated = updated + 1
lastItemID = itemID
end end
end end

2
TradeSkillMaster_AuctionDB/Modules/Scanning.lua

@ -580,7 +580,7 @@ function Scan:ProcessScanData(scanData)
-- Process the collected auction data. -- Process the collected auction data.
TSM.Data:ProcessData(data, Scan.groupItems, verifyNewAlgorithm) TSM.Data:ProcessData(data, Scan.groupItems, verifyNewAlgorithm)
if TSM.ChannelSync then if TSM.ChannelSync then
TSM.ChannelSync:BroadcastScanData(Scan.isScanning) TSM.ChannelSync:BroadcastScanData(Scan.isScanning, Scan.groupItems)
end end
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 if not next(data) then return end
Data:ProcessData(data, groupSet, nil, scanTime or time(), true) Data:ProcessData(data, groupSet, nil, scanTime or time(), true)
if TSM.ChannelSync then if TSM.ChannelSync then
TSM.ChannelSync:BroadcastScanData("Search") TSM.ChannelSync:BroadcastScanData("Search", groupSet)
end end
end end

Loading…
Cancel
Save