From 7a6c47db42e8d0b192f3dd9c8a15bc323226d280 Mon Sep 17 00:00:00 2001 From: Bunny67 Date: Sun, 12 Aug 2018 19:57:58 +0300 Subject: [PATCH] update ClassCache --- ElvUI/Core/ClassCache.lua | 187 +++++++++++++------------------------- 1 file changed, 64 insertions(+), 123 deletions(-) diff --git a/ElvUI/Core/ClassCache.lua b/ElvUI/Core/ClassCache.lua index b3b13ed..e81e45f 100644 --- a/ElvUI/Core/ClassCache.lua +++ b/ElvUI/Core/ClassCache.lua @@ -25,6 +25,7 @@ local UnitName = UnitName local UNKNOWN = UNKNOWN +local MYREALM = E.myrealm local GAME_LOCALE = GetLocale() local ENGLISH_CLASS_NAMES @@ -50,11 +51,9 @@ local function GetEnglishClassName(class) end local function WhoCallback(result) - if result then - if result.NoLocaleClass then - CC:CachePlayer(result.Name, result.NoLocaleClass) - CC:SendMessage("ClassCacheQueryResult", result.Name, result.NoLocaleClass) - end + if result and result.NoLocaleClass then + CC:CachePlayer(result.Name, result.NoLocaleClass) + CC:SendMessage("ClassCacheQueryResult", result.Name, result.NoLocaleClass) end end @@ -62,29 +61,17 @@ function CC:GetClassByName(name, realm) if not name or name == "" then return end if realm and realm == "" then return end - if E.db.general.classCacheStoreInDB then - if realm then - if self.cache[realm] and self.cache[realm][name] then - return self.cache[realm][name] - else - return - end + local cacheDB = self:GetCacheTable() + + if realm then + if cacheDB[realm] and cacheDB[realm][name] then + return cacheDB[realm][name] else - if self.cache[E.myrealm][name] then - return self.cache[E.myrealm][name] - end + return end else - if realm then - if self.tempCache[realm] and self.tempCache[realm][name] then - return self.tempCache[realm][name] - else - return - end - else - if self.tempCache[E.myrealm][name] then - return self.tempCache[E.myrealm][name] - end + if cacheDB[MYREALM][name] then + return cacheDB[MYREALM][name] end end @@ -109,68 +96,32 @@ function CC:CachePlayer(name, class, realm) if realm and realm == "" then return end - if E.db.general.classCacheStoreInDB then - if realm and not self.cache[realm] then - self.cache[realm] = {} - end + local cacheDB = self:GetCacheTable() + realm = realm or MYREALM - if realm then - self.cache[realm][name] = class - else - self.cache[E.myrealm][name] = class - end - else - if realm and not self.tempCache[realm] then - self.tempCache[realm] = {} - end + cacheDB[realm] = cacheDB[realm] or {} - if realm then - self.tempCache[realm][name] = class - else - self.tempCache[E.myrealm][name] = class - end + if cacheDB[realm][name] ~= class then + CC:SendMessage("ClassCache_ClassUpdated", name, class) end + + cacheDB[realm][name] = class end function CC:SwitchCacheType(init) - if E.db.general.classCacheStoreInDB then - if not self.cache[E.myrealm] then - self.cache[E.myrealm] = {} - end + local newDB = self:GetCacheTable() - if not self.cache[E.myrealm][E.myname] then - self.cache[E.myrealm][E.myname] = E.myclass - end + newDB[MYREALM] = newDB[MYREALM] or {} + newDB[MYREALM][E.myname] = E.myclass - if not init then - for realm in pairs(self.tempCache) do - if not self.cache[realm] then - self.cache[realm] = {} - end + if not init then + local oldDB = E.db.general.classCacheStoreInDB and self.tempCache or self.cache - for name, class in pairs(self.tempCache[realm]) do - self.cache[realm][name] = class - end - end - end - else - if not self.tempCache[E.myrealm] then - self.tempCache[E.myrealm] = {} - end + for realm in pairs(oldDB) do + newDB[realm] = newDB[realm] or {} - if not self.tempCache[E.myrealm][E.myname] then - self.tempCache[E.myrealm][E.myname] = E.myclass - end - - if not init then - for realm in pairs(self.cache) do - if not self.cache[realm] then - self.tempCache[realm] = {} - end - - for name, class in pairs(self.cache[realm]) do - self.tempCache[realm][name] = class - end + for name, class in pairs(oldDB[realm]) do + newDB[realm][name] = class end end end @@ -192,23 +143,18 @@ function CC:GetCacheSize(global) end local size = 0 + local cacheDB = global and self.cache or self.tempCache + + for realm in pairs(cacheDB) do + for _ in pairs(cacheDB[realm]) do + size = size + 1 + end + end if global then - for realm in pairs(self.cache) do - for _ in pairs(self.cache[realm]) do - size = size + 1 - end - end - self.cacheDBSize = size self.cacheDBCalculationTime = GetTime() else - for realm in pairs(self.tempCache) do - for _ in pairs(self.tempCache[realm]) do - size = size + 1 - end - end - self.cacheLocalSize = size self.cacheLocalCalculationTime = GetTime() end @@ -217,25 +163,20 @@ function CC:GetCacheSize(global) end function CC:WipeCache(global) + local cacheDB = global and self.cache or self.tempCache + + for realm in pairs(cacheDB) do + wipe(cacheDB[realm]) + end + + wipe(cacheDB) + self:SwitchCacheType(true) + if global then - for realm in pairs(self.cache) do - wipe(self.cache[realm]) - end - - wipe(self.cache) - self:SwitchCacheType(true) self.cacheDBCalculationTime = 0 - E:Print(L["Class DB cache wiped."]) else - for realm in pairs(self.tempCache) do - wipe(self.tempCache[realm]) - end - - wipe(self.tempCache) - self:SwitchCacheType(true) self.cacheLocalCalculationTime = 0 - E:Print(L["Class session cache wiped."]) end end @@ -245,12 +186,12 @@ function CC:PLAYER_ENTERING_WORLD() self.inInstance = inInstance if instanceType == "pvp" then - self.inBattleground = true + self.onBattleground = instanceType else - self.inBattleground = false + self.onBattleground = false end - if self.inInstance or self.inBattleground then + if self.inInstance or self.onBattleground then self.lastNumPlayers = 0 self:UnregisterEvent("PLAYER_TARGET_CHANGED") @@ -262,7 +203,7 @@ function CC:PLAYER_ENTERING_WORLD() self:RegisterEvent("UPDATE_BATTLEFIELD_SCORE") - if self.inBattleground then + if self.onBattleground then self:UPDATE_BATTLEFIELD_SCORE() end else @@ -301,13 +242,13 @@ function CC:PLAYER_GUILD_UPDATE() end function CC:FRIENDLIST_UPDATE() - local name, class, _ + local name, classLocalized, _ for i = 1, GetNumFriends() do - name, _, class = GetFriendInfo(i) + name, _, classLocalized = GetFriendInfo(i) - if class then - self:CachePlayer(name, GetEnglishClassName(class)) + if classLocalized then + self:CachePlayer(name, GetEnglishClassName(classLocalized)) end end end @@ -315,13 +256,13 @@ end function CC:GUILD_ROSTER_UPDATE(_, update) if not update then return end - local name, class, _ + local name, classLocalized, _ for i = 1, GetNumGuildMembers() do - name, _, _, _, _, _, _, _, _, _, class = GetGuildRosterInfo(i) + name, _, _, _, _, classLocalized = GetGuildRosterInfo(i) - if class then - self:CachePlayer(name, class) + if classLocalized then + self:CachePlayer(name, GetEnglishClassName(classLocalized)) end end end @@ -335,7 +276,7 @@ function CC:PARTY_MEMBERS_CHANGED() if not class then return end - if self.inBattleground then + if self.onBattleground then self:CachePlayer(name, class, realm) else self:CachePlayer(name, class) @@ -352,7 +293,7 @@ function CC:RAID_ROSTER_UPDATE() if not class then return end - if self.inBattleground then + if self.onBattleground then self:CachePlayer(name, class, realm) else self:CachePlayer(name, class) @@ -368,7 +309,7 @@ function CC:PLAYER_TARGET_CHANGED() local name, realm = UnitName("target") - if self.inBattleground then + if self.onBattleground then self:CachePlayer(name, class, realm) else self:CachePlayer(name, class) @@ -383,7 +324,7 @@ function CC:UPDATE_MOUSEOVER_UNIT() local name, realm = UnitName("mouseover") - if self.inBattleground then + if self.onBattleground then self:CachePlayer(name, class, realm) else self:CachePlayer(name, class) @@ -400,14 +341,14 @@ function CC:UPDATE_BATTLEFIELD_SCORE() return end - local name, realm, class, _ + local name, realm, classLocalized, _ for i = 1, numPlayers do - name, _, _, _, _, _, _, _, _, class = GetBattlefieldScore(i) + name, _, _, _, _, _, _, _, classLocalized = GetBattlefieldScore(i) - if name and class then + if name and classLocalized then name, realm = split("-", name) - self:CachePlayer(name, class, realm) + self:CachePlayer(name, GetEnglishClassName(classLocalized), realm) end end end