Files
Questie-X/Modules/Migration.lua
T

154 lines
6.7 KiB
Lua

---@class Migration
local Migration = QuestieLoader:CreateModule("Migration")
---@type l10n
local l10n = QuestieLoader:ImportModule("l10n")
-- add functions to this table to migrate users who have not yet run said function.
-- make sure to always add to the end of the table as it runs first to last
local migrationFunctions = {
[1] = function()
-- this is the big Questie v9.0 settings refactor, implementing profiles
if Questie.db.char then -- if you actually have previous settings, then on first startup we should notify you of this
Questie:Print("[Migration] Migrated Questie for v9.0. This will reset all Questie settings to default. Journey history has been preserved.")
end
-- theres no need to delete old settings, since we read/write to different addresses now;
-- old settings can linger unused unless you roll back versions, no harm no foul
end,
[2] = function()
-- Blizzard removed some sounds from Era/SoD, which are present in WotLK
local objectiveSound = Questie.db.profile.objectiveCompleteSoundChoiceName
if (not (Questie.IsWotlk or QuestieCompat.Is335)) and
objectiveSound == "Explosion" or
objectiveSound == "Shing!" or
objectiveSound == "Wham!" or
objectiveSound == "Simon Chime" or
objectiveSound == "War Drums" or
objectiveSound == "Humm" or
objectiveSound == "Short Circuit"
then
Questie.db.profile.objectiveCompleteSoundChoiceName = "ObjectiveDefault"
end
local progressSound = Questie.db.profile.objectiveProgressSoundChoiceName
if (not (Questie.IsWotlk or QuestieCompat.Is335)) and
progressSound == "Explosion" or
progressSound == "Shing!" or
progressSound == "Wham!" or
progressSound == "Simon Chime" or
progressSound == "War Drums" or
progressSound == "Humm" or
progressSound == "Short Circuit"
then
Questie.db.profile.objectiveProgressSoundChoiceName = "ObjectiveProgress"
end
end,
[3] = function()
if Questie.IsSoD then
if Questie.db.profile.showSoDRunes then
Questie.db.profile.showRunesOfPhase = {
phase1 = true,
phase2 = false,
phase3 = false,
phase4 = false,
}
else
Questie.db.profile.showRunesOfPhase = {
phase1 = false,
phase2 = false,
phase3 = false,
phase4 = false,
}
end
end
end,
[4] = function()
Questie.db.profile.tutorialShowRunesDone = false
end,
[5] = function()
Questie.db.profile.enableTooltipsNextInChain = true
end,
[6] = function()
if Questie.dbCache and Questie.dbCache.global then
Questie:Debug(Questie.DEBUG_INFO, "[Migration] Offloading compiled database binary blobs to separate SavedVariable...")
local keys = {"npcBin", "npcPtrs", "questBin", "questPtrs", "objBin", "objPtrs", "itemBin", "itemPtrs"}
-- Handle standard keys
for _, k in ipairs(keys) do
if Questie.db.global[k] then
Questie.dbCache.global[k] = Questie.db.global[k]
Questie.db.global[k] = nil
end
end
-- Handle SoD keys
if Questie.db.global.sod then
Questie.dbCache.global.sod = Questie.dbCache.global.sod or {}
for _, k in ipairs(keys) do
if Questie.db.global.sod[k] then
Questie.dbCache.global.sod[k] = Questie.db.global.sod[k]
Questie.db.global.sod[k] = nil
end
end
-- Also move other SoD metadata
local sodMetadata = {"dbCompiledOnVersion", "dbCompiledLang", "dbIsCompiled", "dbCompiledCount"}
for _, k in ipairs(sodMetadata) do
if Questie.db.global.sod[k] then
Questie.dbCache.global.sod[k] = Questie.db.global.sod[k]
Questie.db.global.sod[k] = nil
end
end
end
-- Move global metadata
local globalMetadata = {"dbCompiledExpansion", "dbCompiledPluginSignature", "dbCompiledOnVersion", "dbCompiledLang", "dbIsCompiled", "dbCompiledCount"}
for _, k in ipairs(globalMetadata) do
if Questie.db.global[k] then
Questie.dbCache.global[k] = Questie.db.global[k]
Questie.db.global[k] = nil
end
end
end
end,
[7] = function()
-- Offload Journey history to its own SavedVariable
if Questie.dbJourney and Questie.dbJourney.char then
if Questie.db.char and Questie.db.char.journey and (table.getn(Questie.db.char.journey) > 0) then
Questie:Debug(Questie.DEBUG_INFO, "[Migration] Offloading Journey history to separate SavedVariable...")
Questie.dbJourney.char.journey = Questie.db.char.journey
Questie.db.char.journey = nil
end
end
-- Final cleanup of old learnedData from main config if still present
if Questie.db and Questie.db.global and Questie.db.global.learnedData then
Questie.db.global.learnedData = nil
end
end,
[8] = function()
-- The "ElvUI style tooltips" option shipped enabled by default, which made Questie
-- restyle every default WoW tooltip (stripping the border) for users who never asked
-- for it (#16). It is now opt-in (default false). Reset it off once so existing installs
-- get their default tooltips back; users who want the flat style can re-enable it.
Questie.db.profile.elvuiStyleTooltips = false
end
}
function Migration:Migrate()
if not Questie.db.profile.migrationVersion then
Questie.db.profile.migrationVersion = 0
end
local currentVersion = Questie.db.profile.migrationVersion
local targetVersion = table.getn(migrationFunctions)
if currentVersion == targetVersion then
Questie:Debug(Questie.DEBUG_DEVELOP, "[Migration] Nothing to migrate. Already on latest version:", targetVersion)
return
end
Questie:Debug(Questie.DEBUG_DEVELOP, "[Migration] Starting Questie migration for targetVersion", targetVersion)
while currentVersion < targetVersion do
currentVersion = currentVersion + 1
migrationFunctions[currentVersion]()
end
Questie.db.profile.migrationVersion = currentVersion
end