diff --git a/src/DynamoCore/Configuration/PreferenceSettings.cs b/src/DynamoCore/Configuration/PreferenceSettings.cs index bb493588e62..f341f5dc387 100644 --- a/src/DynamoCore/Configuration/PreferenceSettings.cs +++ b/src/DynamoCore/Configuration/PreferenceSettings.cs @@ -397,19 +397,8 @@ public bool IsBackgroundPreviewActive /// /// Persistence for Dynamo HomePage - /// - [XmlIgnore] - internal Dictionary HomePageSettings { get; set; } - - /// - /// A helper intermediary string to allow the serialization of the HomePageSettings dictionary - /// - public string HomePageSettingsSerialized - { - get => Newtonsoft.Json.JsonConvert.SerializeObject(HomePageSettings); - set => HomePageSettings = Newtonsoft.Json.JsonConvert.DeserializeObject>(value); - } - + /// + public List HomePageSettings { get; set; } #endregion #region Dynamo application settings @@ -997,6 +986,7 @@ public PreferenceSettings() backupLocation = string.Empty; GraphChecksumItemsList = new List(); isMLAutocompleteTOUApproved = true; + HomePageSettings = new List(); } /// @@ -1114,7 +1104,7 @@ public static PreferenceSettings LoadContent(string content) return new PreferenceSettings() { isCreatedFromValidFile = false }; } } - + settings.CustomPackageFolders = settings.CustomPackageFolders.Distinct().ToList(); settings.GroupStyleItemsList = settings.GroupStyleItemsList.GroupBy(entry => entry.Name).Select(result => result.First()).ToList(); MigrateStdLibTokenToBuiltInToken(settings); diff --git a/src/DynamoCore/PublicAPI.Unshipped.txt b/src/DynamoCore/PublicAPI.Unshipped.txt index 9866b58ae7b..7a74b2752ec 100644 --- a/src/DynamoCore/PublicAPI.Unshipped.txt +++ b/src/DynamoCore/PublicAPI.Unshipped.txt @@ -171,8 +171,8 @@ Dynamo.Configuration.PreferenceSettings.HideAutocompleteMethodOptions.get -> boo Dynamo.Configuration.PreferenceSettings.HideAutocompleteMethodOptions.set -> void Dynamo.Configuration.PreferenceSettings.HideNodesBelowSpecificConfidenceLevel.get -> bool Dynamo.Configuration.PreferenceSettings.HideNodesBelowSpecificConfidenceLevel.set -> void -Dynamo.Configuration.PreferenceSettings.HomePageSettingsSerialized.get -> string -Dynamo.Configuration.PreferenceSettings.HomePageSettingsSerialized.set -> void +Dynamo.Configuration.PreferenceSettings.HomePageSettings.get -> System.Collections.Generic.List +Dynamo.Configuration.PreferenceSettings.HomePageSettings.set -> void Dynamo.Configuration.PreferenceSettings.IronPythonResolveTargetVersion.get -> string Dynamo.Configuration.PreferenceSettings.IronPythonResolveTargetVersion.set -> void Dynamo.Configuration.PreferenceSettings.IsADPAnalyticsReportingApproved.get -> bool diff --git a/src/DynamoCoreWpf/Views/HomePage/HomePage.xaml.cs b/src/DynamoCoreWpf/Views/HomePage/HomePage.xaml.cs index cace7300fff..40bee217b4a 100644 --- a/src/DynamoCoreWpf/Views/HomePage/HomePage.xaml.cs +++ b/src/DynamoCoreWpf/Views/HomePage/HomePage.xaml.cs @@ -299,7 +299,8 @@ private async void SendRecentGraphsData() { if (startPage.DynamoViewModel.PreferenceSettings.HomePageSettings != null) { - var settingsJson = Newtonsoft.Json.JsonConvert.SerializeObject(startPage.DynamoViewModel.PreferenceSettings.HomePageSettings); + var dict = GetDictFromListStrings(startPage.DynamoViewModel.PreferenceSettings.HomePageSettings); + var settingsJson = Newtonsoft.Json.JsonConvert.SerializeObject(dict); settingsJson = System.Web.HttpUtility.JavaScriptStringEncode(settingsJson); await dynWebView.CoreWebView2.ExecuteScriptAsync(@$"window.setHomePageSettings('{settingsJson}');"); @@ -442,30 +443,62 @@ internal void SaveSettings(string settingsJson) { if (!string.IsNullOrEmpty(settingsJson) && this.startPage != null) { - var settingsDict = Newtonsoft.Json.JsonConvert.DeserializeObject>(settingsJson); + var settingsDict = Newtonsoft.Json.JsonConvert.DeserializeObject>(settingsJson); // If the HomePageSettings have not been previously created, initialize it now if (startPage.DynamoViewModel.PreferenceSettings.HomePageSettings == null) { - startPage.DynamoViewModel.PreferenceSettings.HomePageSettings = new Dictionary(); - } + startPage.DynamoViewModel.PreferenceSettings.HomePageSettings = new List(); + } + + var dict = GetDictFromListStrings(startPage.DynamoViewModel.PreferenceSettings.HomePageSettings); // Change existing values, or add new ones foreach (var setting in settingsDict) { - if (startPage.DynamoViewModel.PreferenceSettings.HomePageSettings.ContainsKey(setting.Key) - && startPage.DynamoViewModel.PreferenceSettings.HomePageSettings[setting.Key] != setting.Value) + if (dict.ContainsKey(setting.Key)) { - startPage.DynamoViewModel.PreferenceSettings.HomePageSettings[setting.Key] = setting.Value; + if (dict[setting.Key] == setting.Value) continue; + dict[setting.Key] = setting.Value; } else { - startPage.DynamoViewModel.PreferenceSettings.HomePageSettings.Add(setting.Key, setting.Value); - } + dict.Add(setting.Key, setting.Value); + } } + + SetListStringsFromDict(dict, startPage.DynamoViewModel.PreferenceSettings.HomePageSettings); + } + } + + private void SetListStringsFromDict(Dictionary dict, List homePageSettings) + { + homePageSettings.Clear(); + foreach (var kvp in dict) + { + homePageSettings.Add($"{kvp.Key}:{kvp.Value}"); + } + } + + private Dictionary GetDictFromListStrings(List homePageSettings) + { + var dict = new Dictionary(); + if (!homePageSettings.Any()) return dict; + + try + { + dict = homePageSettings.Select(item => item.Split(':')) + .Where(parts => parts.Length == 2) + .ToDictionary(parts => parts[0], parts => parts[1]); + } + catch(Exception ex) + { + this.startPage.DynamoViewModel.Model.Logger.Log("Failed to load HomePageSettings: " + ex.Message); } + + return dict; } - + internal void NewWorkspace() { this.startPage?.DynamoViewModel?.NewHomeWorkspaceCommand.Execute(null); diff --git a/test/DynamoCoreTests/Configuration/PreferenceSettingsTests.cs b/test/DynamoCoreTests/Configuration/PreferenceSettingsTests.cs index e92b1e4c408..40a116ecb0a 100644 --- a/test/DynamoCoreTests/Configuration/PreferenceSettingsTests.cs +++ b/test/DynamoCoreTests/Configuration/PreferenceSettingsTests.cs @@ -490,16 +490,15 @@ public void TestSerializingHomePageSettings() PreferenceSettings settings = new PreferenceSettings(); // Assert defaults - Assert.AreEqual(settings.HomePageSettings, null); - Assert.AreEqual(settings.HomePageSettingsSerialized, "null"); + Assert.IsEmpty(settings.HomePageSettings); - settings.HomePageSettings = new Dictionary { { "greeting", "Hello World" } }; + settings.HomePageSettings = new List { { String.Concat("greeting", "Hello World") } }; // Save settings.Save(tempPath); settings = PreferenceSettings.Load(tempPath); - Assert.AreEqual(settings.HomePageSettings["greeting"], "Hello World"); + Assert.IsTrue(settings.HomePageSettings.Contains(String.Concat("greeting", "Hello World"))); } } } diff --git a/test/DynamoCoreWpfTests/HomePageTests.cs b/test/DynamoCoreWpfTests/HomePageTests.cs index 072a8da8983..2bfa3e36291 100644 --- a/test/DynamoCoreWpfTests/HomePageTests.cs +++ b/test/DynamoCoreWpfTests/HomePageTests.cs @@ -65,7 +65,7 @@ public void HomePage_NewSettingsAreAddedCorrectly() homePage.DataContext = startPage; - Assert.IsNull(preferences.HomePageSettings); + Assert.IsEmpty(preferences.HomePageSettings); // Act var pair1 = @"{""Name"": ""Alice""}"; diff --git a/test/settings/DynamoSettings-NewSettings.xml b/test/settings/DynamoSettings-NewSettings.xml index 63940d89790..a9b3802e249 100644 --- a/test/settings/DynamoSettings-NewSettings.xml +++ b/test/settings/DynamoSettings-NewSettings.xml @@ -32,7 +32,10 @@ 1936 1056 false - {"recentPageViewMode":"grid","samplesViewMode":"list"} + + recentPageViewMode:list + samplesViewMode:list + f4 12