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