--stopped doing the duplicate savedTable local detailsFramework = _G ["DetailsFramework"] if (not detailsFramework or not DetailsFrameworkCanLoad) then return end local _ local CONST_DEFAULT_PROFILE_NAME = "default" local UnitGUID = UnitGUID --create namespace detailsFramework.SavedVars = {} ---get the saved variables table for the addon ---@param addonObject df_addon the addon frame created by detailsFramework:CreateNewAddOn() ---@return table function detailsFramework.SavedVars.GetSavedVariables(addonObject) assert(type(addonObject) == "table", "SetProfile: addonObject must be a table.") if (addonObject.__savedGlobalVarsName) then local savedVariables = _G[addonObject.__savedGlobalVarsName] --check if the saved variables table is created, if not create one if (not savedVariables) then if (addonObject.__savedVarsDefaultTemplate) then savedVariables = { profiles = { --store profiles created from the 'savedVarsTemplate' [CONST_DEFAULT_PROFILE_NAME] = detailsFramework.table.deploy({}, addonObject.__savedVarsDefaultTemplate) }, profile_ids = {} --store the profile id for each character using its GUID } else savedVariables = {} end --set the table to be global savedVariables _G[addonObject.__savedGlobalVarsName] = savedVariables end if (not savedVariables.profiles) then savedVariables.profiles = { profiles = { --store profiles created from the 'savedVarsTemplate' [CONST_DEFAULT_PROFILE_NAME] = detailsFramework.table.deploy({}, addonObject.__savedVarsDefaultTemplate) } } end if (not savedVariables.profile_ids) then savedVariables.profile_ids = {} end return savedVariables end return {} end ---@param addonObject df_addon the addon frame created by detailsFramework:CreateNewAddOn() ---@param bCreateIfNotFound boolean|nil if true, create the profile if it doesn't exist ---@param profileToCopyFrom profile|nil if bCreateIfNotFound is true, copy the profile from this profile function detailsFramework.SavedVars.GetProfile(addonObject, bCreateIfNotFound, profileToCopyFrom) assert(type(addonObject) == "table", "GetProfile: addonObject must be a table.") local savedVariables = detailsFramework.SavedVars.GetSavedVariables(addonObject) local playerProfileName = savedVariables.profile_ids[UnitGUID("player")] --get the profile name from the player guid local profileTable = savedVariables.profiles[playerProfileName] if (not profileTable and bCreateIfNotFound) then profileTable = {} if (profileToCopyFrom) then --profileToCopyFrom has been cleaned at this point and only have values set by the user profileTable = detailsFramework.table.deploy(profileTable, profileToCopyFrom) end --as deploy does not overwrite existing values, it won't overwrite the values set by 'profileToCopyFrom' profileTable = detailsFramework.table.deploy(profileTable, addonObject.__savedVarsDefaultTemplate) savedVariables.profiles[playerProfileName] = profileTable end return profileTable end ---@param addonObject df_addon the addon frame created by detailsFramework:CreateNewAddOn() ---@param profileName profilename the name of the profile to set ---@param bCopyFromCurrentProfile boolean if true, copy the current profile to the new profile function detailsFramework.SavedVars.SetProfile(addonObject, profileName, bCopyFromCurrentProfile) assert(type(addonObject) == "table", "SetProfile: addonObject must be a table.") assert(type(profileName) == "string", "SetProfile: profileName must be a string.") ---@type profile local currentProfile = detailsFramework.SavedVars.GetProfile(addonObject) --save the current profile detailsFramework.SavedVars.SaveProfile(addonObject) --set the new profile local savedVariables = detailsFramework.SavedVars.GetSavedVariables(addonObject) local playerGUID = UnitGUID("player") savedVariables.profile_ids[playerGUID] = profileName local bCreateIfNotFound = true --get the new profile creating if doesn't exist ---@type profile local profileTable = detailsFramework.SavedVars.GetProfile(addonObject, bCreateIfNotFound, bCopyFromCurrentProfile and currentProfile or nil) if (addonObject.OnProfileChanged) then detailsFramework:Dispatch(addonObject.OnProfileChanged, addonObject, profileTable) end end ---@param addonObject df_addon the addon frame created by detailsFramework:CreateNewAddOn() function detailsFramework.SavedVars.SaveProfile(addonObject) assert(type(addonObject) == "table", "SetProfile: addonObject must be a table.") --the current profile in use local profileTable = detailsFramework.SavedVars.GetProfile(addonObject) --profile template or "default profile" local profileTemplate = addonObject.__savedVarsDefaultTemplate --if the addon has a default template, remove the keys which are the same as the default template --these keys haven't been changed by the user, hence doesn't need to save them if (profileTemplate) then detailsFramework.table.removeduplicate(profileTable, addonObject.__savedVarsDefaultTemplate) end end