diff --git a/SVUI_!Core/libs/_SVUI_Lib/Registry.lua b/SVUI_!Core/libs/_SVUI_Lib/Registry.lua
index ad0fc7e..50e925f 100644
--- a/SVUI_!Core/libs/_SVUI_Lib/Registry.lua
+++ b/SVUI_!Core/libs/_SVUI_Lib/Registry.lua
@@ -102,9 +102,6 @@ local GLOBAL_SV, PRIVATE_SV, FILTER_SV, MEDIA_SV, ERROR_SV;
local MODULES, PLUGINS;
local LoadOnDemand, ScriptQueue = {},{};
local DirtyDataList, DirtyMediaList = {},{};
-local SAFE_DATA_KEYS = {["LAYOUT"] = true, ["REPORT_SLOTS"] = true}
-local SAFE_MEDIA_KEYS = {["customClassColor"] = true, ["extended"] = true, ["shared"] = true, ["color"] = true, ["bordercolor"] = true}
-local SAFE_THEME_KEYS = {["Default"] = true, ["Simple"] = true, ["Warcraft"] = true}
local debugHeader = "|cffFF2F00%s|r [|cff992FFF%s|r]|cffFF2F00:|r";
local debugPattern = '|cffFF2F00%s|r [|cff0affff%s|r]|cffFF2F00:|r @|cffFF0000(|r%s|cffFF0000)|r - %s';
@@ -127,6 +124,14 @@ end
lib.EventManager = CreateFrame("Frame", nil)
+--[[ LIB CONSTRAINTS ]]--
+
+lib.CONSTRAINTS = {
+ ["IGNORED"] = {},
+ ["PROTECTED"] = {},
+ ["DYNAMIC"] = {}
+}
+
--[[ COMMON META METHODS ]]--
local rootstring = function(self) return self.NameID end
@@ -193,7 +198,7 @@ local function remove_undefined(src, db)
end
end
-local function removedefaults(db, src, nometa)
+local function remove_defaults(db, src, nometa)
if(type(src) ~= "table") then
if(db == src) then db = nil end
return
@@ -203,7 +208,7 @@ local function removedefaults(db, src, nometa)
end
for k,v in pairs(src) do
if type(v) == "table" and type(db[k]) == "table" then
- removedefaults(db[k], v, nometa)
+ remove_defaults(db[k], v, nometa)
if next(db[k]) == nil then
db[k] = nil
end
@@ -216,16 +221,21 @@ local function removedefaults(db, src, nometa)
end
local function sanitize(db, src)
- local saved = PRIVATE_SV.SAFEDATA.SAVED;
+ local cns = lib.CONSTRAINTS;
+ local ignored = cns.IGNORED;
+ local protected = cns.PROTECTED;
+ local dynamic = cns.DYNAMIC;
if((type(src) == "table")) then
if(type(db) == "table") then
for k,v in pairs(db) do
- if(not SAFE_DATA_KEYS[k]) then
- if((src[k] == nil) and (saved[k] == nil)) then
+ if(not ignored[k]) then
+ if((src[k] == nil) and (protected[k] == nil)) then
db[k] = nil
elseif(src[k] ~= nil) then
- removedefaults(db[k], src[k])
- remove_undefined(src[k], db[k])
+ remove_defaults(db[k], src[k])
+ if(dynamic[k] == nil) then
+ remove_undefined(src[k], db[k])
+ end
end
end
end
@@ -233,20 +243,6 @@ local function sanitize(db, src)
end
end
-local function sanitizeMedia(db, src)
- if((type(src) == "table")) then
- if(type(db) == "table") then
- for k,v in pairs(db) do
- if(SAFE_MEDIA_KEYS[k] and (src[k] ~= nil)) then
- removedefaults(db[k], src[k])
- else
- db[k] = nil
- end
- end
- end
- end
-end
-
--DATABASE META METHODS
local meta_transdata = {
__index = function(t, k)
@@ -506,14 +502,12 @@ function lib:CleanUpData(deep)
sanitize(data, defaults)
end
for theme,profile in pairs(MEDIA_SV.profiles) do
- if(not SAFE_THEME_KEYS[theme]) then
- MEDIA_SV.profiles[theme] = nil
- else
+ if(CoreObject.AvailableThemes[theme]) then
for key,data in pairs(profile) do
if(not GLOBAL_SV.profileKeys[key]) then
MEDIA_SV.profiles[theme][key] = nil
else
- sanitizeMedia(data, media)
+ sanitize(data, media)
end
end
end
@@ -523,7 +517,7 @@ function lib:CleanUpData(deep)
local linked = DirtyDataList[key]
if(linked) then
sanitize(data, defaults)
- sanitizeMedia(MEDIA_SV.profiles[linked][key], media)
+ sanitize(MEDIA_SV.profiles[linked][key], media)
end
end
else
@@ -602,6 +596,12 @@ local function UpdateProfileSources(newKey)
end
end
+local function UpdateConstraints()
+ for k,v in pairs(PRIVATE_SV.SAFEDATA.SAVED) do
+ lib.CONSTRAINTS.PROTECTED[k] = true
+ end
+end
+
local function UpdateCoreDatabases()
UpdateProfileSources()
@@ -620,6 +620,8 @@ local function UpdateCoreDatabases()
CoreObject.private = private
CoreObject.ERRORLOG = ERROR_SV.FOUND
+
+ UpdateConstraints()
end
local function CorePreInitialize()
@@ -1123,6 +1125,8 @@ function lib:Launch()
end
end
end
+
+ UpdateConstraints()
end
function lib:LoadScripts()
@@ -1220,7 +1224,7 @@ function lib:ExportDatabase()
tablecopy(t["MEDIA"][THEME_KEY], MEDIA_SV.profiles[THEME_KEY][PROFILE_KEY]);
sanitize(t["PROFILE"], CoreObject.defaults)
- sanitizeMedia(t["MEDIA"][THEME_KEY], CoreObject.mediadefaults)
+ sanitize(t["MEDIA"][THEME_KEY], CoreObject.mediadefaults)
local export = table.tostring(t)
@@ -1275,6 +1279,33 @@ function lib:SaveSafeData(index, value)
PRIVATE_SV.SAFEDATA[index] = value
end
+function lib:AddProtectedKeys(...)
+ for i = 1, select('#', ...) do
+ local index = select(i, ...)
+ if(index and type(index) == "string") then
+ self.CONSTRAINTS.PROTECTED[index] = true
+ end
+ end
+end
+
+function lib:AddIgnoredKeys(...)
+ for i = 1, select('#', ...) do
+ local index = select(i, ...)
+ if(index and type(index) == "string") then
+ self.CONSTRAINTS.IGNORED[index] = true
+ end
+ end
+end
+
+function lib:AddDynamicKeys(...)
+ for i = 1, select('#', ...) do
+ local index = select(i, ...)
+ if(index and type(index) == "string") then
+ self.CONSTRAINTS.DYNAMIC[index] = true
+ end
+ end
+end
+
function lib:CheckData(schema, key)
local file = GLOBAL_SV.profiles[PROFILE_KEY][schema]
print("______" .. schema .. ".db[" .. key .. "]_____")
diff --git a/SVUI_!Core/system/_reports/reputation.lua b/SVUI_!Core/system/_reports/reputation.lua
index 9e783c5..89884a7 100644
--- a/SVUI_!Core/system/_reports/reputation.lua
+++ b/SVUI_!Core/system/_reports/reputation.lua
@@ -195,7 +195,7 @@ ReportBar.OnEvent = function(self, event, ...)
end
Report.OnClick = function(self, button)
- CacheRepData()
+ CacheRepData(self.InnerData)
SV.Dropdown:Open(self, self.InnerData, "Select Faction")
end
@@ -220,5 +220,5 @@ Report.OnInit = function(self)
if(not self.InnerData) then
self.InnerData = {}
end
- CacheRepData()
+ CacheRepData(self.InnerData)
end
\ No newline at end of file
diff --git a/SVUI_!Core/system/core.lua b/SVUI_!Core/system/core.lua
index e61dcb9..40fe9cf 100644
--- a/SVUI_!Core/system/core.lua
+++ b/SVUI_!Core/system/core.lua
@@ -222,6 +222,11 @@ SV.Hidden:Hide();
SV.RollFrames = {};
SV.SystemAlert = {};
+
+SVUILib:AddIgnoredKeys("customClassColor", "LAYOUT", "REPORT_SLOTS");
+SVUILib:AddProtectedKeys("extended", "shared", "color", "bordercolor");
+SVUILib:AddDynamicKeys("Filters");
+
SV.mediadefaults = {};
SV.defaults = {
["LAYOUT"] = {},
diff --git a/SVUI_!Core/system/reports.lua b/SVUI_!Core/system/reports.lua
index faa938c..4c88653 100644
--- a/SVUI_!Core/system/reports.lua
+++ b/SVUI_!Core/system/reports.lua
@@ -89,6 +89,8 @@ local PVP_INFO_LOOKUP = {
["Changes"] = {13, RATING_CHANGE},
["Spec"] = {16, SPECIALIZATION}
};
+local LDB_TEXT_PATTERN = "|cff22CFFF(|r%s|cff22CFFF)|r";
+local LDB_ICON_PATTERN = "\124T%s:12\124t %s";
local DIRTY_LIST = true;
--[[
##########################################################
@@ -284,14 +286,12 @@ local function GetDataSlot(parent, index)
return parent.Stats.Slots[index];
end
-local LDB_TEXT_PATTERN = "|cff22CFFF(|r%s|cff22CFFF)|r";
-local LDB_ICON_PATTERN = "\124T%s:12\124t %s";
local function LDB_AttributeChanged(event, data_name, key, value, obj)
local name = obj.ReportName
local socket = MOD.References[name]
if(not socket) then return end
value = value or obj.text
- icon = obj.icon
+ local icon = obj.icon
if(type(value) ~= "string") then
value = name
end
@@ -310,9 +310,6 @@ end
local function CreateLDB_OnEventHandler(name, obj)
return function(self, ...)
LDB:RegisterCallback("LibDataBroker_AttributeChanged_"..name, LDB_AttributeChanged)
- -- LDB:RegisterCallback("LibDataBroker_AttributeChanged_"..name.."_text", LDB_AttributeChanged)
- -- LDB:RegisterCallback("LibDataBroker_AttributeChanged_"..name.."_label", LDB_AttributeChanged)
- -- LDB:RegisterCallback("LibDataBroker_AttributeChanged_"..name.."_value", LDB_AttributeChanged)
LDB_AttributeChanged(nil, name, nil, nil, obj)
end
end
@@ -382,7 +379,6 @@ function MOD:EnableReport(socket, name)
Socket_OnUpdate(socket, 20000)
if(LDB and obj.LDBName and obj.OnTooltipShow) then
- print(name .. ' OnTooltipShow')
socket:SetScript("OnEnter", LDB_OnEnter)
end