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 @@ - +