Files
Andrew6810 4e3aff9d89 init
2022-10-21 06:37:39 -07:00

211 lines
4.8 KiB
Lua

--[[
dbSettings.lua
Database access for Bagnon
--]]
local Bagnon = LibStub('AceAddon-3.0'):GetAddon('Bagnon')
local L = LibStub('AceLocale-3.0'):GetLocale('Bagnon')
local SavedSettings = {}
Bagnon.SavedSettings = SavedSettings
--[[---------------------------------------------------------------------------
Local Functions of Justice
--]]---------------------------------------------------------------------------
local function removeDefaults(tbl, defaults)
for k, v in pairs(defaults) do
if type(tbl[k]) == 'table' and type(v) == 'table' then
removeDefaults(tbl[k], v)
if next(tbl[k]) == nil then
tbl[k] = nil
end
elseif tbl[k] == v then
tbl[k] = nil
end
end
end
local function copyDefaults(tbl, defaults)
for k, v in pairs(defaults) do
if type(v) == 'table' then
tbl[k] = copyDefaults(tbl[k] or {}, v)
elseif tbl[k] == nil then
tbl[k] = v
end
end
return tbl
end
--[[---------------------------------------------------------------------------
Constructorish
--]]---------------------------------------------------------------------------
function SavedSettings:GetDB()
if not self.db then
self.db = _G['BagnonGlobalSettings']
if self.db then
if self:IsDBOutOfDate() then
self:UpgradeDB()
end
else
self.db = self:CreateNewDB()
Bagnon:Print(L.NewUser)
end
copyDefaults(self.db, self:GetDefaultSettings())
end
return self.db
end
function SavedSettings:GetDefaultSettings()
self.defaults = self.defaults or {
highlightItemsByQuality = true,
highlightQuestItems = true,
showEmptyItemSlotTexture = true,
lockFramePositions = false,
colorBagSlots = true,
enableBlizzardBagPassThrough = false,
enabledFrames = {
inventory = true,
bank = true,
keys = true,
},
autoDisplayEvents = {
inventory = {
ah = false,
bank = true,
vendor = true,
mail = true,
guildbank = true,
trade = false,
craft = false,
player = false
},
},
slotColors = {
ammo = {0.7, 0.7, 1},
trade = {0.5, 1, 0.5},
shard = {0.9, 0.7, 1},
keyring = {1, 0.8, 0},
},
highlightOpacity = 0.5,
}
return self.defaults
end
--[[---------------------------------------------------------------------------
Upgrade Methods
--]]---------------------------------------------------------------------------
function SavedSettings:CreateNewDB()
local db = {
version = self:GetAddOnVersion()
}
_G['BagnonGlobalSettings'] = db
return db
end
function SavedSettings:UpgradeDB()
local major, minor, bugfix = self:GetDBVersion():match('(%w+)%.(%w+)%.(%w+)')
--do upgrade stuff
if tonumber(minor) <= 6 and tonumber(bugfix) <= 2 then
local db = self.db
local autoDisplayEvents = self.db.autoDisplayEvents
if autoDisplayEvents then
for i = 1, #autoDisplayEvents do
autoDisplayEvents[i] = nil
end
end
end
self:GetDB().version = self:GetAddOnVersion()
Bagnon:Print(string.format(L.Updated, self:GetDBVersion()))
end
function SavedSettings:IsDBOutOfDate()
return self:GetDBVersion() ~= self:GetAddOnVersion()
end
function SavedSettings:GetDBVersion()
return self:GetDB().version
end
function SavedSettings:GetAddOnVersion()
return GetAddOnMetadata('Bagnon', 'Version')
end
--[[---------------------------------------------------------------------------
Events
--]]---------------------------------------------------------------------------
--create an event handler
do
local f = CreateFrame('Frame')
f:SetScript('OnEvent', function(self, event, ...)
local action = SavedSettings[event]
if action then
action(SavedSettings, event, ...)
end
end)
f:RegisterEvent('PLAYER_LOGOUT')
end
--remove any settings that are set to defaults upon logout
function SavedSettings:PLAYER_LOGOUT()
self:UpdateEnableFrames()
self:UpdateEnableBlizzardBagPassThrough()
self:ClearDefaults()
end
--handle enabling/disabling of frames
function SavedSettings:UpdateEnableFrames()
local framesToEnable = Bagnon.Settings.framesToEnable
if framesToEnable then
for frameID, enableStatus in pairs(framesToEnable) do
self:GetDB().enabledFrames[frameID] = enableStatus
end
end
end
function SavedSettings:UpdateEnableBlizzardBagPassThrough()
self:GetDB().enableBlizzardBagPassThrough = Bagnon.Settings:WillBlizzardBagPassThroughBeEnabled()
end
function SavedSettings:ClearDefaults()
if self.db then
removeDefaults(self.db, self:GetDefaultSettings())
end
end
--[[---------------------------------------------------------------------------
Complex Settings
--]]---------------------------------------------------------------------------
--frame auto display events
function SavedSettings:SetShowFrameAtEvent(frameID, event, enable)
self:GetDB().autoDisplayEvents[frameID][event] = enable and true or false
end
function SavedSettings:IsFrameShownAtEvent(frameID, event)
return self:GetDB().autoDisplayEvents[frameID][event]
end