211 lines
4.8 KiB
Lua
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
|