From 3a7924f4bf30191f7e9ede97b7f02a5b49cb4736 Mon Sep 17 00:00:00 2001
From: "Aaron (Qilong)" <173288704@qq.com>
Date: Fri, 9 Feb 2024 11:50:44 -0500
Subject: [PATCH] DYN-6602 Make Dynamo TSpline nodes OOTB and hide experiment
toggle under feature flag (#14923)
* first commit
* Add feature flag based list initial value manipulation
* Comments
* Updates
* Update
* Add event based TSplineNodes show/hide
* regressions
---
.../Configuration/PreferenceSettings.cs | 18 ++++++++++++++++++
src/DynamoCore/Models/DynamoModel.cs | 14 +++++++++++++-
.../ViewModels/Menu/PreferencesViewModel.cs | 11 +++++++++++
.../Views/Menu/PreferencesView.xaml | 5 ++++-
.../NodeAutoCompleteSearchTests.cs | 8 ++++----
5 files changed, 50 insertions(+), 6 deletions(-)
diff --git a/src/DynamoCore/Configuration/PreferenceSettings.cs b/src/DynamoCore/Configuration/PreferenceSettings.cs
index a07ec1fd5e3..aa1e3e8b8d1 100644
--- a/src/DynamoCore/Configuration/PreferenceSettings.cs
+++ b/src/DynamoCore/Configuration/PreferenceSettings.cs
@@ -1141,6 +1141,9 @@ internal static string GetDefaultPythonEngine()
return defaultPythonEngine;
}
+ ///
+ /// Initialize namespaces to exclude from Library based on conditions
+ ///
internal void InitializeNamespacesToExcludeFromLibrary()
{
if (!NamespacesToExcludeFromLibrarySpecified)
@@ -1152,6 +1155,21 @@ internal void InitializeNamespacesToExcludeFromLibrary()
}
}
+ ///
+ /// Update namespaces to exclude from Library based on feature flags
+ ///
+ internal void UpdateNamespacesToExcludeFromLibrary()
+ {
+ // When the experiment toggle is disabled by feature flag, include the TSpline namespace from the library OOTB.
+ if (!DynamoModel.FeatureFlags?.CheckFeatureFlag("IsTSplineNodesExperimentToggleVisible", false) ?? false)
+ {
+ NamespacesToExcludeFromLibrary.Remove(
+ "ProtoGeometry.dll:Autodesk.DesignScript.Geometry.TSpline"
+ );
+ return;
+ }
+ }
+
//migrate old path token to new path token
private static void MigrateStdLibTokenToBuiltInToken(PreferenceSettings settings)
{
diff --git a/src/DynamoCore/Models/DynamoModel.cs b/src/DynamoCore/Models/DynamoModel.cs
index 59049486ebc..04daed12487 100644
--- a/src/DynamoCore/Models/DynamoModel.cs
+++ b/src/DynamoCore/Models/DynamoModel.cs
@@ -36,6 +36,7 @@
using Dynamo.Selection;
using Dynamo.Utilities;
using DynamoServices;
+using DynamoUtilities;
using Greg;
using Lucene.Net.Documents;
using Lucene.Net.Index;
@@ -718,7 +719,7 @@ protected DynamoModel(IStartConfiguration config)
{
//this will kill the CLI process after cacheing the flags in Dynamo process.
using (FeatureFlags =
- new DynamoUtilities.DynamoFeatureFlagsManager(
+ new DynamoFeatureFlagsManager(
AnalyticsService.GetUserIDForSession(),
mainThreadSyncContext,
IsTestMode))
@@ -730,6 +731,7 @@ protected DynamoModel(IStartConfiguration config)
}
catch (Exception e) { Logger.LogError($"could not start feature flags manager {e}"); };
});
+ DynamoFeatureFlagsManager.FlagsRetrieved += HandleFeatureFlags;
}
// TBD: Do we need settings migrator for service mode? If we config the docker correctly, this could be skipped I think
@@ -977,6 +979,15 @@ protected DynamoModel(IStartConfiguration config)
DynamoReady(new ReadyParams(this));
}
+ ///
+ /// When feature flags received, handle them and make changes
+ ///
+ private void HandleFeatureFlags()
+ {
+ PreferenceSettings.UpdateNamespacesToExcludeFromLibrary();
+ return;
+ }
+
private void HandleAnalytics()
{
if (IsTestMode)
@@ -1369,6 +1380,7 @@ public void Dispose()
LibraryServices.LibraryLoaded -= LibraryLoaded;
EngineController.VMLibrariesReset -= ReloadDummyNodes;
+ DynamoFeatureFlagsManager.FlagsRetrieved -= HandleFeatureFlags;
Logger.Dispose();
diff --git a/src/DynamoCoreWpf/ViewModels/Menu/PreferencesViewModel.cs b/src/DynamoCoreWpf/ViewModels/Menu/PreferencesViewModel.cs
index 9e74bb37fdd..7dcf38a58f5 100644
--- a/src/DynamoCoreWpf/ViewModels/Menu/PreferencesViewModel.cs
+++ b/src/DynamoCoreWpf/ViewModels/Menu/PreferencesViewModel.cs
@@ -1121,6 +1121,17 @@ public bool NodeAutocompleteMachineLearningIsBeta
}
}
+ ///
+ /// Controls if the TSpline nodes experiment toggle is visible from feature flag
+ ///
+ public bool IsTSplineNodesExperimentToggleVisible
+ {
+ get
+ {
+ return DynamoModel.FeatureFlags?.CheckFeatureFlag("IsTSplineNodesExperimentToggleVisible", false) ?? false;
+ }
+ }
+
///
/// Contains the numbers of result of the ML recommendation
///
diff --git a/src/DynamoCoreWpf/Views/Menu/PreferencesView.xaml b/src/DynamoCoreWpf/Views/Menu/PreferencesView.xaml
index 4d058c95b7d..2a30adf8421 100644
--- a/src/DynamoCoreWpf/Views/Menu/PreferencesView.xaml
+++ b/src/DynamoCoreWpf/Views/Menu/PreferencesView.xaml
@@ -1023,7 +1023,10 @@
-
+