|
|
|
@ -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 |
|
|
|
|
|
|
|
|
|
|
|
|