From 9ee8b2d3f03709e2196ba43c5972d350b0aadb6c Mon Sep 17 00:00:00 2001 From: glopesdev Date: Fri, 11 Nov 2022 11:42:25 +0000 Subject: [PATCH] Ensure upgrading does not re-enable disabled nodes --- Bonsai.Editor/GraphModel/UpgradeHelper.cs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Bonsai.Editor/GraphModel/UpgradeHelper.cs b/Bonsai.Editor/GraphModel/UpgradeHelper.cs index 2688d76a6..66fc6eb1c 100644 --- a/Bonsai.Editor/GraphModel/UpgradeHelper.cs +++ b/Bonsai.Editor/GraphModel/UpgradeHelper.cs @@ -63,6 +63,14 @@ static bool IsEmbeddedResourcePath(string path) return separatorIndex >= 0 && !Path.IsPathRooted(path); } + static ExpressionBuilder ConvertBuilder(ExpressionBuilder builder, Func selector) + { + //TODO: Remove this workaround for ensuring workflow node order (refactor core conversion API) + var set = new[] { new Node(builder) }; + var result = set.Convert(selector, recurse: false); + return result.First().Value; + } + internal static bool TryUpgradeWorkflow(ExpressionBuilderGraph workflow, string fileName, out ExpressionBuilderGraph upgradedWorkflow) { if (!IsEmbeddedResourcePath(fileName) && File.Exists(fileName)) @@ -95,6 +103,18 @@ static bool TryUpgradeBuilderNodes(ExpressionBuilderGraph workflow, SemanticVers GetArgumentCount(workflow, argumentCount); ExpressionBuilder UpgradeBuilder(ExpressionBuilder builder) { + if (builder is DisableBuilder disableBuilder) + { + var upgradedBuilder = UpgradeBuilder(disableBuilder.Builder); + if (upgradedBuilder != disableBuilder.Builder) + { + upgradedBuilder = ConvertBuilder(disableBuilder, builder => upgradedBuilder); + return new DisableBuilder(upgradedBuilder); + } + + return builder; + } + #pragma warning disable CS0612 // Type or member is obsolete if (builder is SourceBuilder sourceBuilder) {