Prevent per-character player cache persistence
This commit is contained in:
+25
-2
@@ -73,7 +73,13 @@ local function GetRealmPlayerCache()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function MigrateLegacyPlayerCaches(playerdb, realmdb, realm)
|
local function MigrateLegacyPlayerCaches(playerdb, realmdb, realm)
|
||||||
if cacheMigrationDone then return end
|
local perCharacterPlayers = type(ShaguTweaks_cache) == "table"
|
||||||
|
and type(ShaguTweaks_cache.players) == "table"
|
||||||
|
|
||||||
|
-- Normally this is a one-time migration. If another legacy code path happens
|
||||||
|
-- to recreate the per-character players table later, migrate it again instead
|
||||||
|
-- of letting duplicate data survive until the next session.
|
||||||
|
if cacheMigrationDone and not perCharacterPlayers then return end
|
||||||
|
|
||||||
-- Merge the old per-character cache, then remove its player entries so they
|
-- Merge the old per-character cache, then remove its player entries so they
|
||||||
-- are no longer written back to each character's SavedVariables file.
|
-- are no longer written back to each character's SavedVariables file.
|
||||||
@@ -123,6 +129,15 @@ local function EnsurePlayerCache()
|
|||||||
end
|
end
|
||||||
|
|
||||||
MigrateLegacyPlayerCaches(units.players, realmdb, realm)
|
MigrateLegacyPlayerCaches(units.players, realmdb, realm)
|
||||||
|
|
||||||
|
-- Final defensive cleanup: the shared cache is authoritative from this point
|
||||||
|
-- on, so never leave a player table attached to the per-character cache.
|
||||||
|
if type(ShaguTweaks_cache) == "table" then
|
||||||
|
ShaguTweaks_cache.players = nil
|
||||||
|
ShaguTweaks_cache.players_cleanup = nil
|
||||||
|
ShaguTweaks_cache.social_global_migrated = nil
|
||||||
|
end
|
||||||
|
|
||||||
return units.players, realmdb
|
return units.players, realmdb
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -270,6 +285,7 @@ local useNameplateUnitEvents = API and API.eventutils and _G.C_EventUtils
|
|||||||
and _G.C_EventUtils.IsEventValid("NAME_PLATE_UNIT_ADDED")
|
and _G.C_EventUtils.IsEventValid("NAME_PLATE_UNIT_ADDED")
|
||||||
|
|
||||||
libunitscan:RegisterEvent("PLAYER_ENTERING_WORLD")
|
libunitscan:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||||
|
libunitscan:RegisterEvent("PLAYER_LOGOUT")
|
||||||
libunitscan:RegisterEvent("FRIENDLIST_UPDATE")
|
libunitscan:RegisterEvent("FRIENDLIST_UPDATE")
|
||||||
libunitscan:RegisterEvent("GUILD_ROSTER_UPDATE")
|
libunitscan:RegisterEvent("GUILD_ROSTER_UPDATE")
|
||||||
libunitscan:RegisterEvent("RAID_ROSTER_UPDATE")
|
libunitscan:RegisterEvent("RAID_ROSTER_UPDATE")
|
||||||
@@ -285,7 +301,14 @@ for chatEvent in pairs(passiveChatEvents) do
|
|||||||
end
|
end
|
||||||
|
|
||||||
libunitscan:SetScript("OnEvent", function()
|
libunitscan:SetScript("OnEvent", function()
|
||||||
if event == "PLAYER_ENTERING_WORLD" then
|
if event == "PLAYER_LOGOUT" then
|
||||||
|
-- SavedVariables are written after this event. Re-run the migration here so
|
||||||
|
-- even a legacy addon path that recreated ShaguTweaks_cache.players during
|
||||||
|
-- the session cannot persist a duplicate per-character player database.
|
||||||
|
cacheMigrationDone = false
|
||||||
|
EnsurePlayerCache()
|
||||||
|
|
||||||
|
elseif event == "PLAYER_ENTERING_WORLD" then
|
||||||
-- Ensure the saved database is already bound even if another module queried
|
-- Ensure the saved database is already bound even if another module queried
|
||||||
-- it earlier while restoring UI state.
|
-- it earlier while restoring UI state.
|
||||||
EnsurePlayerCache()
|
EnsurePlayerCache()
|
||||||
|
|||||||
Reference in New Issue
Block a user