Skip to content

Commit 1ef0111

Browse files
author
michaelspain
committed
Refactored AFK status, now afk_cache keys are guids instead of units.
1 parent 6aadd31 commit 1ef0111

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

modules/StatusAFK.lua

+17-8
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,33 @@ local AFK = Grid2.statusPrototype:new("afk")
66

77
local Grid2 = Grid2
88
local GetTime = GetTime
9+
local UnitGUID = UnitGUID
910
local UnitIsAFK = UnitIsAFK
1011

1112
local afk_cache = setmetatable({}, {__index = function(t,k) local v=GetTime(); t[k]=v; return v end})
1213

1314
AFK.GetColor = Grid2.statusLibrary.GetColor
1415

15-
function AFK:UpdateUnit(_, unit)
16+
local function UpdateUnit(_, unit)
1617
if unit then
17-
afk_cache[unit] = nil
18-
self:UpdateIndicators(unit)
18+
if not UnitIsAFK(unit) then -- only clear cache, afk_cache is already assigned when metatable lookup fails in GetStartTime()
19+
afk_cache[ UnitGUID(unit) ] = nil
20+
end
21+
AFK:UpdateIndicators(unit)
22+
end
23+
end
24+
25+
function AFK:ZONE_CHANGED_NEW_AREA()
26+
for unit in Grid2:IterateRosterUnits() do
27+
UpdateUnit(nil,unit)
1928
end
2029
end
2130

2231
function AFK:OnEnable()
23-
self:RegisterEvent("PLAYER_FLAGS_CHANGED", "UpdateUnit")
24-
self:RegisterEvent("ZONE_CHANGED_NEW_AREA", "UpdateAllUnits")
25-
self:RegisterEvent("READY_CHECK", "UpdateAllUnits")
26-
self:RegisterEvent("READY_CHECK_FINISHED", "UpdateAllUnits")
32+
self:RegisterEvent("PLAYER_FLAGS_CHANGED", UpdateUnit)
33+
self:RegisterEvent("ZONE_CHANGED_NEW_AREA")
34+
self:RegisterEvent("READY_CHECK", "ZONE_CHANGED_NEW_AREA")
35+
self:RegisterEvent("READY_CHECK_FINISHED", "ZONE_CHANGED_NEW_AREA")
2736
end
2837

2938
function AFK:OnDisable()
@@ -39,7 +48,7 @@ function AFK:IsActive(unit)
3948
end
4049

4150
function AFK:GetStartTime(unit)
42-
return afk_cache[unit]
51+
return afk_cache[ UnitGUID(unit) ]
4352
end
4453

4554
local text = L["AFK"]

0 commit comments

Comments
 (0)