-- Class Setup AceData = AceDatabase:new("AceDB") -- Need a constructor to override the AceDB one. function AceData:new() return ace:new(self) end function AceData:Initialize() if( self.initialized ) then return end self.optionsPath = {"options"} self.profileBasePath = {"profiles"} self.profileMapPath = {"profileMap"} self.profilePath = {} self.profileLoadPath = {self.profilePath, "_loadOnStart"} return AceDbClass.Initialize(self) end --[[--------------------------------------------------------------------------------- Ace Settings ------------------------------------------------------------------------------------]] function AceData:GetOpt(var) return self:get(self.optionsPath, var) end function AceData:SetOpt(var, val) return self:set(self.optionsPath, var, val) end --[[--------------------------------------------------------------------------------- Profile Management ------------------------------------------------------------------------------------]] function AceData:GetProfile(name) return self:get(self.profileBasePath, name) end function AceData:GetAddonProfile(profile, addon, profName) return self:get({self.profileBasePath, profile}, addon.name, profName) end function AceData:SetAddonProfile(profile, addon, profName) if( (not addon) or (not addon.db) ) then return end self:set({self.profileBasePath, profile}, addon.name, profName) if( profName and (not addon.db:get(self.profileBasePath, profile)) ) then local defaults = self:GetAddonDefaults(addon) if( defaults ) then addon.db:set(self.profileBasePath, profile, defaults) end end end function AceData:GetLoadOnStart(addon) if( not addon ) then -- Return the entire list. return self:get(self.profilePath, "_loadOnStart") else return self:get(self.profileLoadPath, strlower(addon)) end end function AceData:SetLoadOnStart(addon, val) self:set(self.profileLoadPath, strlower(addon), val) end function AceData:SetCurrentProfile() local profile = self:get(self.profileMapPath, ace.char.id) if( (not profile) or (not self:GetProfile(profile)) ) then profile = ACE_PROFILE_DEFAULT end self:SetProfile(profile) end function AceData:SetProfile(name) self.profileName = name self.profilePath[1] = self.profileBasePath self.profilePath[2] = name end function AceData:LoadProfile(name) self:SetProfile(name) self:set(self.profileMapPath, ace.char.id, name) for _, addon in ace.registry:get() do if( addon.db and addon.db.initialized ) then self:LoadAddonProfile(addon) end end -- Load any on demand addons in this profile. local addons = self:GetLoadOnStart(addon) if( addons ) then for addon in addons do LoadAddOn(addon) end end ace.event:TriggerEvent("ACE_PROFILE_LOADED") end function AceData:LoadAddonProfile(addon) if( not addon.profilePath ) then addon.profilePath = {} end addon.profilePath[1] = self.profileBasePath addon.profilePath[2] = self:SelectAddonProfile(self.profileName, addon) if( addon.initialized and addon.db ) then if( addon.db:get(addon.profilePath, "disabled") ) then addon:DisableAddon() else addon:EnableAddon() end end end function AceData:SelectAddonProfile(name, addon) if( not addon.db ) then return end local profile = self:get({self.profileBasePath, name}, addon.name) or ACE_PROFILE_DEFAULT if( not addon.db:get(self.profileBasePath, profile) ) then local defaults = self:GetAddonDefaults(addon) if( defaults ) then addon.db:set(self.profileBasePath, profile, defaults) end end return profile end function AceData:GetAddonDefaults(addon) if( addon.db and addon.db:get(self.profileBasePath, ACE_PROFILE_DEFAULT) ) then return ace.CopyTable({}, addon.db:get(self.profileBasePath, ACE_PROFILE_DEFAULT)) elseif( addon.defaults ) then return ace.CopyTable({}, addon.defaults) end end function AceData:SaveProfile(name, profile) self:set(self.profileBasePath, name, {desc=profile.desc}) if( not profile.addons ) then return end for _, addon in ace.registry:get() do if( addon.db and profile.addons[addon.name] ) then addon.db:set(self.profileBasePath, name, profile.addons[addon.name]) end end end function AceData:DeleteProfile(name) self:set(self.profileBasePath, name) for _, addon in ace.registry:get() do if( addon.db ) then addon.db:set(self.profileBasePath, name) end end end function AceData:NewProfile(incDefaults) local profile = {} if( not incDefault ) then return profile end profile.addons = {} for _, addon in ace.registry:get() do if( addon.db and incDefaults ) then profile.addons[addon.name] = self:GetAddonDefaults(addon) end end return profile end ace.db = AceData