Files
Guda-ClassicAPI/Core/InventoryIndexSafety.lua
T

87 lines
2.4 KiB
Lua

-- Guda ClassicAPI InventoryIndex mutation hooks
-- Ensures the O(1) tooltip index never stays stale after SavedVariables or
-- cross-character data changes that do not necessarily emit a fresh bag event.
-- Lua 5.0 compatible.
local addon = Guda
local Index = addon.Modules.InventoryIndex
local DB = addon.Modules.DB
if not Index or not DB then return end
local oldSaveBags = DB.SaveBags
local oldSaveBank = DB.SaveBank
local oldSaveEquipment = DB.SaveEquipment
local oldSaveMailbox = DB.SaveMailbox
local oldAddMailToCharacter = DB.AddMailToCharacter
local oldToggleGoldBlacklist = DB.ToggleGoldBlacklist
local oldRemoveCharacter = DB.RemoveCharacter
local oldCleanupOldCharacters = DB.CleanupOldCharacters
if oldSaveBags then
function DB:SaveBags(bagData)
oldSaveBags(self, bagData)
Index:InvalidateCurrent()
end
end
if oldSaveBank then
function DB:SaveBank(bankData)
oldSaveBank(self, bankData)
Index:InvalidateCurrent()
end
end
if oldSaveEquipment then
function DB:SaveEquipment(equipmentData)
oldSaveEquipment(self, equipmentData)
Index:InvalidateCurrent()
end
end
if oldSaveMailbox then
function DB:SaveMailbox(mailboxData)
oldSaveMailbox(self, mailboxData)
-- MAIL_INBOX_UPDATE can fire before MailboxScanner's debounced save.
-- Re-invalidating here guarantees the next tooltip sees the persisted
-- post-update mailbox snapshot rather than the pre-save one.
Index:InvalidateCurrent()
end
end
if oldAddMailToCharacter then
function DB:AddMailToCharacter(name, realm, mailRow)
local added = oldAddMailToCharacter(self, name, realm, mailRow)
if added then
-- This can mutate a different local character's mailbox.
Index:InvalidateAll()
end
return added
end
end
if oldToggleGoldBlacklist then
function DB:ToggleGoldBlacklist(fullName)
oldToggleGoldBlacklist(self, fullName)
Index:InvalidateAll()
end
end
if oldRemoveCharacter then
function DB:RemoveCharacter(fullName)
local removed = oldRemoveCharacter(self, fullName)
if removed then
Index:InvalidateAll()
end
return removed
end
end
if oldCleanupOldCharacters then
function DB:CleanupOldCharacters()
oldCleanupOldCharacters(self)
Index:InvalidateAll()
end
end
addon:Debug("ClassicAPI inventory index mutation safety enabled")