Repository navigation
Expand file tree
/
Copy pathSettings.lua
More file actions
113 lines (97 loc) · 3.52 KB
/
Copy pathSettings.lua
File metadata and controls
113 lines (97 loc) · 3.52 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
local addonName, addon = ...
addon.Settings = addon.Settings or {}
local defaults = {
scanActive = true,
showPopup = true,
firstOnly = false,
playSound = true,
soundId = 120, -- SOUNDKIT.LOOT_WINDOW_COIN_SOUND
roles = { tank = true, heal = true, damage = true },
LFG_dungeonIDs = {},
popupAnchor = { point = "CENTER", relativeTo = "UIParent", relativePoint = "CENTER", x = 0, y = 0 },
}
local changeCallbacks = {}
function addon.Settings:OnChange(key, cb)
changeCallbacks[key] = changeCallbacks[key] or {}
table.insert(changeCallbacks[key], cb)
end
local function fireChange(key, value)
if not changeCallbacks[key] then return end
for _, cb in ipairs(changeCallbacks[key]) do
cb(value)
end
end
local function migrate(db)
-- v0.23 -> v0.24: 0/1 ints -> booleans, positional roles array -> named table,
-- drop the floating indicator anchor fields.
if db.scanActive == 0 then db.scanActive = false
elseif db.scanActive == 1 then db.scanActive = true end
if db.playSound == 0 then db.playSound = false
elseif db.playSound == 1 then db.playSound = true end
if db.first ~= nil then
db.firstOnly = db.first and true or false
db.first = nil
end
if type(db.LFG_roles) == "table" and (db.LFG_roles[1] ~= nil) then
db.roles = {
tank = db.LFG_roles[1] == 1,
heal = db.LFG_roles[2] == 1,
damage = db.LFG_roles[3] == 1,
}
db.LFG_roles = nil
end
if db.roles == nil then
db.roles = { tank = true, heal = true, damage = true }
end
if db.framePointPopup or db.frameRelativeToPopup then
db.popupAnchor = {
point = db.framePointPopup or defaults.popupAnchor.point,
relativeTo = db.frameRelativeToPopup or defaults.popupAnchor.relativeTo,
relativePoint = db.frameRelativePointPopup or defaults.popupAnchor.relativePoint,
x = db.frameOffsetXPopup or 0,
y = db.frameOffsetYPopup or 0,
}
db.framePointPopup, db.frameRelativeToPopup, db.frameRelativePointPopup = nil, nil, nil
db.frameOffsetXPopup, db.frameOffsetYPopup = nil, nil
end
db.framePoint, db.frameRelativeTo, db.frameRelativePoint = nil, nil, nil
db.frameOffsetX, db.frameOffsetY = nil, nil
db.showFrame = nil
db.addonVersion = nil
-- RaidFinder does not exist in MoP Classic; drop any legacy watch-list entries.
if type(db.LFG_dungeonIDs) == "table" then
for id, entry in pairs(db.LFG_dungeonIDs) do
if entry and entry.lfgCategory == "RaidFinder" then
db.LFG_dungeonIDs[id] = nil
end
end
end
end
local function seedDefaults(db)
for k, v in pairs(defaults) do
if db[k] == nil then
if type(v) == "table" then
local copy = {}
for k2, v2 in pairs(v) do copy[k2] = v2 end
db[k] = copy
else
db[k] = v
end
end
end
end
function addon.Settings:Get(key)
if addon.db then return addon.db[key] end
return defaults[key]
end
function addon.Settings:Set(key, value)
if not addon.db then return end
addon.db[key] = value
fireChange(key, value)
end
function addon.Settings:Initialize()
LookingForSatchelsOptions = LookingForSatchelsOptions or {}
migrate(LookingForSatchelsOptions)
seedDefaults(LookingForSatchelsOptions)
addon.db = LookingForSatchelsOptions
end