87 lines
2.4 KiB
Lua
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")
|