Mercurial > wow > libmoduledbshare-1-0
changeset 29:d8dd617017de
Rewrote LibDualSpec support to use public APIs instead of directly accessing data.
| author | Andrew Knoll <andrewtknoll@gmail.com> |
|---|---|
| date | Sun, 17 Mar 2013 03:05:25 -0400 |
| parents | 085d93d62782 |
| children | 5c7143d32287 |
| files | LibModuleDBShare-1.0/LibModuleDBShare-1.0.lua |
| diffstat | 1 files changed, 46 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- a/LibModuleDBShare-1.0/LibModuleDBShare-1.0.lua Sun Mar 17 01:56:31 2013 -0400 +++ b/LibModuleDBShare-1.0/LibModuleDBShare-1.0.lua Sun Mar 17 03:05:25 2013 -0400 @@ -10,9 +10,12 @@ if not LibModuleDBShare then return end -- No upgrade needed --- Lua APIs +-- Lua functions local error, type, pairs, time = error, type, pairs, time; +-- Blizzard functions +local GetActiveSpecGroup = GetActiveSpecGroup; + -- Required Libraries local AceDB = LibStub("AceDB-3.0"); local AceDBOptions = LibStub("AceDBOptions-3.0"); @@ -71,8 +74,11 @@ group.syncDB = AceDB:New(group.syncDBTable, nil, initialDB:GetCurrentProfile()); group.profileOptionsTable = AceDBOptions:GetOptionsTable(group.syncDB, false); if usesDualSpec then + group.usesDualSpec = true; LibDualSpec:EnhanceDatabase(group.syncDB, groupName); LibDualSpec:EnhanceOptions(group.profileOptionsTable, group.syncDB); + else + group.usesDualSpec = false; end AceConfigRegistry:RegisterOptionsTable(groupName.."Profiles", group.profileOptionsTable); AceConfigDialog:AddToBlizOptions(groupName.."Profiles", group.profileOptionsTable.name, groupName); @@ -83,17 +89,20 @@ -- load profile info from initialDB group.syncDB:SetProfile(initialDB:GetCurrentProfile()); group.members[initialDB] = initialDB:GetNamespace(MAJOR, true) or initialDB:RegisterNamespace(MAJOR); - if type(group.members[initialDB].char.logoutTimestamp) == "number" then - group.profileTimestamp = group.members[initialDB].char.logoutTimestamp; + local storedData = group.members[initialDB].char; + if type(storedData.logoutTimestamp) == "number" then + group.profileTimestamp = storedData.logoutTimestamp; else group.profileTimestamp = 0; end - if usesDualSpec then - local dualSpecNamespace = group.syncDB:GetNamespace("LibDualSpec-1.0"); - dualSpecNamespace.char.profile = group.members[initialDB].char.profile; - dualSpecNamespace.char.enabled = group.members[initialDB].char.enabled; - dualSpecNamespace.char.specGroup = group.members[initialDB].char.specGroup; - group.syncDB:CheckDualSpecState(); + if usesDualSpec and storedData.altProfile then + group.syncDB:SetDualSpecProfile(storedData.altProfile); + group.syncDB:SetDualSpecEnabled(storedData.dualSpecEnabled); + if storedData.dualSpecEnabled and storedData.activeSpecGroup ~= GetActiveSpecGroup() then + group.syncDB:SetDualSpecProfile(group.syncDB:GetCurrentProfile()); + group.syncDB:SetProfile(storedData.altProfile); + initialDB:SetProfile(storedData.altProfile); + end end -- add methods and callbacks for k, v in pairs(DBGroup) do @@ -142,16 +151,19 @@ end -- set current profile based on timestamps local namespace = newDB:GetNamespace(MAJOR, true) or newDB:RegisterNamespace(MAJOR); - if type(namespace.char.logoutTimestamp) == "number" and namespace.char.logoutTimestamp > self.profileTimestamp then + local storedData = namespace.char; + if type(storedData.logoutTimestamp) == "number" and storedData.logoutTimestamp > self.profileTimestamp then self.squelchCallbacks = false; self.syncDB:SetProfile(newDB:GetCurrentProfile()); - self.profileTimestamp = namespace.character.logoutTimestamp; - local dualSpecNamespace = self.syncDB:GetNamespace("LibDualSpec-1.0", true); - if dualSpecNamespace then - dualSpecNamespace.char.profile = namespace.char.profile; - dualSpecNamespace.char.enabled = namespace.char.enabled; - dualSpecNamespace.char.specGroup = namespace.char.specGroup; - group.syncDB:CheckDualSpecState(); + self.profileTimestamp = storedData.logoutTimestamp; + if self.usesDualSpec and storedData.altProfile then + self.syncDB:SetDualSpecProfile(storedData.altProfile); + self.syncDB:SetDualSpecEnabled(storedData.dualSpecEnabled); + if storedData.dualSpecEnabled and storedData.activeSpecGroup ~= GetActiveSpecGroup() then + self.syncDB:SetDualSpecProfile(self.syncDB:GetCurrentProfile()); + self.syncDB:SetProfile(storedData.altProfile); + newDB:SetProfile(storedData.altProfile); + end end else self.syncDB:SetProfile(syncProfile); @@ -191,16 +203,15 @@ end end -local profile = nil; -local enabled = nil; -local specGroup = nil; +local altProfile = nil; +local dualSpecEnabled = nil; +local activeSpecGroup = nil; function DBGroup:OnSyncShutdown(callback, syncDB) - if not profile then - local dualSpecNamespace = syncDB:GetNamespace("LibDualSpec-1.0"); - profile = dualSpecNamespace.char.profile; - enabled = dualSpecNamespace.char.enabled; - specGroup = dualSpecNamespace.char.specGroup; + if self.usesDualSpec and not altProfile then + altProfile = syncDB:GetDualSpecProfile(); + dualSpecEnabled = syncDB:IsDualSpecEnabled(); + activeSpecGroup = GetActiveSpecGroup(); end end @@ -210,14 +221,15 @@ if not timestamp then -- ensure uniform timestamps to minimize timestamp = time(); -- calls to SetProfile in NewGroup end - if not profile then - local dualSpecNamespace = syncDB:GetNamespace("LibDualSpec-1.0"); - profile = dualSpecNamespace.char.profile; - enabled = dualSpecNamespace.char.enabled; - specGroup = dualSpecNamespace.char.specGroup; + if self.usesDualSpec then + if not altProfile then + altProfile = self.syncDB:GetDualSpecProfile(); + dualSpecEnabled = self.syncDB:IsDualSpecEnabled(); + activeSpecGroup = GetActiveSpecGroup(); + end + self.members[db].char.logoutTimestamp = timestamp; + self.members[db].char.altProfile = altProfile; + self.members[db].char.dualSpecEnabled = dualSpecEnabled; + self.members[db].char.activeSpecGroup = activeSpecGroup; end - self.members[db].char.logoutTimestamp = timestamp; - self.members[db].char.profile = profile; - self.members[db].char.enabled = enabled; - self.members[db].char.specGroup = specGroup; end
