refactor: consolidate small compatibility layers

This commit is contained in:
2026-09-06 08:54:46 +02:00
parent e096ba2d90
commit cadf154d0f
18 changed files with 757 additions and 727 deletions
+110
View File
@@ -364,3 +364,113 @@ function ItemDetection:InvalidateCharges(bagID)
end
addon:Debug("ClassicAPI single-pass ItemDetection enabled")
--=====================================================
-- Consolidated from Core/ItemChargesClassicAPI.lua
--=====================================================
-- Preserve Guda's original charge overlay behavior.
-- ClassicAPI's container charge value is not reliable for distinguishing
-- ordinary stack counts from explicit item charges on the target client, so
-- only show the yellow "xN" overlay when the item tooltip actually contains a
-- Charges line (matching upstream Guda behavior).
local addon = Guda
local ItemDetection = addon.Modules.ItemDetection
if not ItemDetection then return end
local chargesCache = {}
local function SafeSetHyperlink(tooltip, link)
if not link then return false end
local _, _, bare = string.find(link, "|H(item:[^|]+)|h")
if not bare and string.find(link, "^item:") then bare = link end
if not bare then return false end
return pcall(tooltip.SetHyperlink, tooltip, bare)
end
local function GetExplicitTooltipCharges(itemData, bagID, slotID)
local tooltip, tooltipName = addon.Modules.Utils:GetScanTooltip()
tooltip:SetOwner(WorldFrame, "ANCHOR_NONE")
tooltip:ClearLines()
local ok = false
if bagID and slotID and bagID ~= -1 then
ok = pcall(tooltip.SetBagItem, tooltip, bagID, slotID)
end
if not ok then
ok = SafeSetHyperlink(tooltip, itemData and itemData.link)
end
if not ok then return nil, false end
local numLines = tooltip:NumLines() or 0
for i = 1, numLines do
local line = getglobal(tooltipName .. "TextLeft" .. i)
local text = line and line:GetText()
if text then
local _, _, num = string.find(string.lower(text), "^(%d+) charges?$")
if num then return tonumber(num), numLines >= 2 end
end
end
return nil, numLines >= 2
end
function ItemDetection:GetCharges(itemData, bagID, slotID)
if not bagID or not slotID then return nil end
local slotKey = bagID .. ":" .. slotID
local cached = chargesCache[slotKey]
if cached ~= nil then
if cached == false then return nil end
return cached
end
local charges, complete = GetExplicitTooltipCharges(itemData, bagID, slotID)
if complete then
chargesCache[slotKey] = charges or false
end
return charges
end
function ItemDetection:InvalidateCharges(bagID)
if bagID then
local prefix = bagID .. ":"
for key in pairs(chargesCache) do
if string.find(key, "^" .. prefix) then
chargesCache[key] = nil
end
end
else
chargesCache = {}
end
end
addon:Debug("Upstream-compatible charge display enabled")
--=====================================================
-- Consolidated from Core/ItemDetectionCacheSafety.lua
--=====================================================
-- Guda ClassicAPI ItemDetection cache safety
-- Keep the optimized detection cache and the legacy per-slot charge cache in
-- sync when ClassicAPI charge access is unavailable.
-- Lua 5.0 compatible.
local addon = Guda
local ItemDetection = addon.Modules.ItemDetection
if not ItemDetection then return end
local FastClearCache = ItemDetection.ClearCache
function ItemDetection:ClearCache()
if FastClearCache then
FastClearCache(self)
end
-- ItemDetectionClassicAPI keeps the original Vanilla charge-cache
-- invalidator behind this public method. With ClassicAPI charges present
-- it is a no-op; without them it clears the legacy bagID:slotID cache.
if self.InvalidateCharges then
self:InvalidateCharges(nil)
end
end
addon:Debug("ClassicAPI ItemDetection cache safety enabled")