(fix/Transmission): prevent missing controlledChildren when importing newer groups without their original parent
(cherry picked from commit a8df20ae1f374069d792990fe096e0b788fc0c1c)
This commit is contained in:
@@ -541,7 +541,8 @@ function WeakAuras.Import(inData, target, callbackFunc, linkedAuras)
|
|||||||
return nil, "Invalid import data."
|
return nil, "Invalid import data."
|
||||||
end
|
end
|
||||||
|
|
||||||
local highestVersion = data.internalVersion or 0
|
-- Let people install auras that are newer than their version of WeakAuras, even tho it is bad
|
||||||
|
--[[local highestVersion = data.internalVersion or 0
|
||||||
if children then
|
if children then
|
||||||
for _, child in ipairs(children) do
|
for _, child in ipairs(children) do
|
||||||
highestVersion = max(highestVersion, child.internalVersion or 0)
|
highestVersion = max(highestVersion, child.internalVersion or 0)
|
||||||
@@ -551,7 +552,7 @@ function WeakAuras.Import(inData, target, callbackFunc, linkedAuras)
|
|||||||
-- Do not run PreAdd but still show Import Window
|
-- Do not run PreAdd but still show Import Window
|
||||||
tooltipLoading = nil;
|
tooltipLoading = nil;
|
||||||
return ImportNow(data, children, target, linkedAuras, nil, callbackFunc)
|
return ImportNow(data, children, target, linkedAuras, nil, callbackFunc)
|
||||||
end
|
end]]
|
||||||
|
|
||||||
if version < 2000 then
|
if version < 2000 then
|
||||||
if children then
|
if children then
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ local function ConstructImportExport(frame)
|
|||||||
elseif(mode == "table") then
|
elseif(mode == "table") then
|
||||||
displayStr = OptionsPrivate.Private.DataToString(id, true);
|
displayStr = OptionsPrivate.Private.DataToString(id, true);
|
||||||
end
|
end
|
||||||
input.editBox:SetMaxBytes(nil); -- Dragonflight doesn't accept nil
|
--input.editBox:SetMaxBytes(nil); Dragonflight doesn't accept nil
|
||||||
input.editBox:SetScript("OnEscapePressed", function()
|
input.editBox:SetScript("OnEscapePressed", function()
|
||||||
group:Close();
|
group:Close();
|
||||||
end);
|
end);
|
||||||
|
|||||||
@@ -290,26 +290,39 @@ end
|
|||||||
local function BuildUidMap(data, children, type)
|
local function BuildUidMap(data, children, type)
|
||||||
children = children or {}
|
children = children or {}
|
||||||
-- The eventual result
|
-- The eventual result
|
||||||
|
|
||||||
|
--- @class UidMapData
|
||||||
|
--- @field originalName auraId The original id of the aura
|
||||||
|
--- @field id auraId The current id of the aura, might have changed due to ids being unique
|
||||||
|
--- @field data auraData The raw data, is non-authoritative on e.g. id, controlledChildren, parent, sortHybridTable
|
||||||
|
--- @field controlledChildren? uid[] A array of child uids
|
||||||
|
--- @field parent? uid The parent uid
|
||||||
|
--- @field sortHybrid boolean? optional bool !! the parent's sortHybridTable is split up and recorded per aura:
|
||||||
|
--- nil, if the parent is not a dynamic group
|
||||||
|
--- false/true based on the sortHybridTable of the dynamic group
|
||||||
|
--- @field anchorFrameFrame uid? uid of the anchor iff the aura is anchored to another aura that is part of the same
|
||||||
|
--- import, otherwise nil
|
||||||
|
--- @field matchedUid uid? for "update", the matched uid. Is from a different domain!
|
||||||
|
--- @field diff any for "update", the diff and the categories of that diff between the aura and its match
|
||||||
|
--- @field categories? table the categories
|
||||||
|
--- @field index? number helpers that transport data between phase 1 and 2
|
||||||
|
--- @field total? number helpers that transport data between phase 1 and 2
|
||||||
|
--- @field parentIsDynamicGroup? boolean helpers that transport data between phase 1 and 2
|
||||||
|
|
||||||
|
--- @class UidMap
|
||||||
|
--- @field map table<uid, UidMapData>
|
||||||
|
--- @field type "new"|"old"
|
||||||
|
--- @field root uid uid of the root
|
||||||
|
--- @field totalCount number
|
||||||
|
--- @field idToUid table<auraId, uid> maps from id to uid
|
||||||
local uidMap = {
|
local uidMap = {
|
||||||
map = { -- per uid
|
--- @type table<uid, UidMapData>
|
||||||
-- originalName: The original id of the aura
|
map = {
|
||||||
-- id: The current id of the aura, might have changed due to ids being unique
|
|
||||||
-- data: The raw data, contains non-authoritative information on e.g. id, controlledChildren, parent, sortHybridTable
|
|
||||||
-- controlledChildren: A array of child uids
|
|
||||||
-- parent: The parent uid
|
|
||||||
-- sortHybrid: optional bool !! the parent's sortHybridTable is split up and recorded per aura:
|
|
||||||
-- nil, if the parent is not a dynamic group
|
|
||||||
-- false/true based on the sortHybridTable of the dynamic group
|
|
||||||
|
|
||||||
-- matchedUid: for "update", the matched uid. Is from a different domain!
|
|
||||||
-- diff, categories: for "update", the diff and the categories of that diff between the aura and its match
|
|
||||||
|
|
||||||
-- index, total, parentIsDynamicGroup: helpers that transport data between phase 1 and 2
|
|
||||||
},
|
},
|
||||||
type = type, -- Either old or new, only used for error checking
|
type = type, -- Either old or new, only used for error checking
|
||||||
root = data.uid, -- root: uid of the root
|
root = data.uid,
|
||||||
totalCount = #children + 1, -- totalCount: count of members
|
totalCount = #children + 1,
|
||||||
idToUid = {} -- idToUid maps from id to uid
|
idToUid = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Build helper map from id to uid
|
-- Build helper map from id to uid
|
||||||
@@ -356,7 +369,6 @@ local function BuildUidMap(data, children, type)
|
|||||||
uidMap.map[data.uid].anchorFrameFrame = idToUid[target]
|
uidMap.map[data.uid].anchorFrameFrame = idToUid[target]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local function handleSortHybridTable(data)
|
local function handleSortHybridTable(data)
|
||||||
@@ -1380,7 +1392,7 @@ local methods = {
|
|||||||
self:ReleaseChildren()
|
self:ReleaseChildren()
|
||||||
self:AddBasicInformationWidgets(data, sender)
|
self:AddBasicInformationWidgets(data, sender)
|
||||||
|
|
||||||
--[[
|
--[[ Let people install auras that are newer than their version of WeakAuras, even tho it is bad
|
||||||
do
|
do
|
||||||
local highestVersion = data.internalVersion or 0
|
local highestVersion = data.internalVersion or 0
|
||||||
if children then
|
if children then
|
||||||
@@ -1546,7 +1558,7 @@ local methods = {
|
|||||||
self:AddChild(linkedAurasText)
|
self:AddChild(linkedAurasText)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Let people install auras that are newer than their version of WeakAuras
|
-- Let people install auras that are newer than their version of WeakAuras, even tho it is bad
|
||||||
local highestVersion = data.internalVersion or 0
|
local highestVersion = data.internalVersion or 0
|
||||||
if children then
|
if children then
|
||||||
for _, child in ipairs(children) do
|
for _, child in ipairs(children) do
|
||||||
@@ -1670,6 +1682,7 @@ local methods = {
|
|||||||
self:AddBasicInformationWidgets(pendingData.data, pendingData.sender)
|
self:AddBasicInformationWidgets(pendingData.data, pendingData.sender)
|
||||||
self:AddProgressWidgets()
|
self:AddProgressWidgets()
|
||||||
|
|
||||||
|
---@type {uid: uid, data: auraData, source: string}[]
|
||||||
local copies = {}
|
local copies = {}
|
||||||
local pendingPickData
|
local pendingPickData
|
||||||
|
|
||||||
@@ -2234,6 +2247,7 @@ local methods = {
|
|||||||
|
|
||||||
local updateFrame
|
local updateFrame
|
||||||
local function ConstructUpdateFrame(frame)
|
local function ConstructUpdateFrame(frame)
|
||||||
|
---@class GroupUpdateFrame: AceGUIFrame
|
||||||
local group = AceGUI:Create("ScrollFrame");
|
local group = AceGUI:Create("ScrollFrame");
|
||||||
group.frame:SetParent(frame);
|
group.frame:SetParent(frame);
|
||||||
group.frame:SetPoint("TOPLEFT", frame, "TOPLEFT", 16, -63);
|
group.frame:SetPoint("TOPLEFT", frame, "TOPLEFT", 16, -63);
|
||||||
|
|||||||
Reference in New Issue
Block a user