-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDatabase.lua
More file actions
executable file
·155 lines (139 loc) · 4.76 KB
/
Copy pathDatabase.lua
File metadata and controls
executable file
·155 lines (139 loc) · 4.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
---@diagnostic disable: undefined-global
local addonName, addon = ...
-- Current database version - increment when migrations are added
local DB_VERSION = 1
local DEFAULTS = {
enabled = true,
debugMode = false,
debugFramePosition = nil,
currentTargetEnabled = true,
currentTargetColor = { r = 0, g = 1, b = 0, a = 0.8 },
currentTargetThickness = 2,
currentTargetOffset = 0,
currentTargetStyle = "blizzard",
questObjectiveEnabled = true,
questObjectiveColor = { r = 1, g = 1, b = 0, a = 0.9 },
questObjectiveThickness = 3,
questObjectiveOffset = 0,
questObjectiveStyle = "blizzard",
questItemEnabled = true,
questItemColor = { r = 0, g = 1, b = 1, a = 0.9 }, -- Cyan
questItemThickness = 3,
questItemOffset = 0,
questItemStyle = "blizzard",
worldQuestEnabled = true,
worldQuestColor = { r = 0.3, g = 0.7, b = 1, a = 0.9 },
worldQuestThickness = 3,
worldQuestOffset = 0,
worldQuestStyle = "blizzard",
bonusObjectiveEnabled = true,
bonusObjectiveColor = { r = 1, g = 0.41, b = 0.71, a = 0.9 },
bonusObjectiveThickness = 3,
bonusObjectiveOffset = 0,
bonusObjectiveStyle = "blizzard",
}
local MIGRATION_MAP = {
showCurrentTarget = "currentTargetEnabled",
showQuestObjective = "questObjectiveEnabled",
showQuestItem = "questItemEnabled",
showWorldQuestHighlight = "worldQuestEnabled",
currentBorderThickness = "currentTargetThickness",
currentBorderOffset = "currentTargetOffset",
questObjectiveBorderThickness = "questObjectiveThickness",
questObjectiveBorderOffset = "questObjectiveOffset",
questItemBorderThickness = "questItemThickness",
questItemBorderOffset = "questItemOffset",
worldQuestBorderThickness = "worldQuestThickness",
worldQuestBorderOffset = "worldQuestOffset",
}
local STYLE_KEYS = {
"currentTargetStyle",
"questObjectiveStyle",
"questItemStyle",
"worldQuestStyle",
"bonusObjectiveStyle",
"mythicObjectiveStyle",
}
local function cloneTable(source)
if type(source) ~= "table" then
return source
end
local copy = {}
for key, value in pairs(source) do
copy[key] = cloneTable(value)
end
return copy
end
local function mergeDefaults(target, source)
for key, value in pairs(source) do
if type(value) == "table" then
if type(target[key]) ~= "table" then
target[key] = cloneTable(value)
else
mergeDefaults(target[key], value)
end
elseif target[key] == nil then
target[key] = value
end
end
end
local function wipeTable(tbl)
if table.wipe then
table.wipe(tbl)
elseif type(wipe) == "function" then
wipe(tbl)
else
for key in pairs(tbl) do
tbl[key] = nil
end
end
end
addon.WipeTable = wipeTable
local function sanitizeCommand(text)
if not text then
return ""
end
return text:match("^%s*(.-)%s*$") or ""
end
addon.SanitizeCommand = sanitizeCommand
function addon:GetDefault(key)
return cloneTable(DEFAULTS[key])
end
function addon:InitializeDB()
NextTargetDB = NextTargetDB or {}
-- Only run migrations if database version is outdated or missing
local currentVersion = NextTargetDB.dbVersion or 0
if currentVersion < DB_VERSION then
-- Migration: Rename old keys to new keys
for oldKey, newKey in pairs(MIGRATION_MAP) do
if NextTargetDB[oldKey] ~= nil and NextTargetDB[newKey] == nil then
NextTargetDB[newKey] = NextTargetDB[oldKey]
end
NextTargetDB[oldKey] = nil
end
-- Migration: Rename "border" style to "outline"
for _, styleKey in ipairs(STYLE_KEYS) do
if NextTargetDB[styleKey] == "border" then
NextTargetDB[styleKey] = "outline"
end
end
-- Migration: Remove deprecated settings
NextTargetDB.rareEliteEnabled = nil
NextTargetDB.rareEliteColor = nil
NextTargetDB.rareEliteThickness = nil
NextTargetDB.rareEliteOffset = nil
NextTargetDB.onlyInCombat = nil
-- Migration: Fix old orange quest color to new yellow
local questColor = NextTargetDB.questObjectiveColor
if questColor and questColor.r == 1 and questColor.g == 0.5 and questColor.b == 0 then
questColor.r = DEFAULTS.questObjectiveColor.r
questColor.g = DEFAULTS.questObjectiveColor.g
questColor.b = DEFAULTS.questObjectiveColor.b
questColor.a = DEFAULTS.questObjectiveColor.a
end
-- Mark database as migrated
NextTargetDB.dbVersion = DB_VERSION
end
-- Always merge in any new defaults (doesn't overwrite existing values)
mergeDefaults(NextTargetDB, DEFAULTS)
end