From e03c8dc7df740f5f22f3d4a4438a708ea94ebe0d Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Wed, 10 Jul 2024 10:35:40 +0200 Subject: [PATCH] User-Filter Settings now on a per-user basis, saved as a dictionary in user space. This is for the case of people using the same windows account but with several different BC users. --- src/BreCalClient/App.config | 3 ++ src/BreCalClient/MainWindow.xaml.cs | 31 +++++++++++++++---- .../Properties/Settings.Designer.cs | 14 ++++++++- src/BreCalClient/Properties/Settings.settings | 3 ++ src/BreCalClient/SearchFilterModel.cs | 11 ++++--- 5 files changed, 51 insertions(+), 11 deletions(-) diff --git a/src/BreCalClient/App.config b/src/BreCalClient/App.config index cab52d2..335a433 100644 --- a/src/BreCalClient/App.config +++ b/src/BreCalClient/App.config @@ -83,6 +83,9 @@ 0 + + + \ No newline at end of file diff --git a/src/BreCalClient/MainWindow.xaml.cs b/src/BreCalClient/MainWindow.xaml.cs index 6a8b171..734408d 100644 --- a/src/BreCalClient/MainWindow.xaml.cs +++ b/src/BreCalClient/MainWindow.xaml.cs @@ -143,7 +143,7 @@ namespace BreCalClient private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { // serialize filter settings - Properties.Settings.Default.FilterCriteria = this.searchFilterControl.SearchFilter.Serialize(); + Properties.Settings.Default.FilterCriteriaMap = SearchFilterModel.Serialize(); Properties.Settings.Default.Save(); _tokenSource.Cancel(); } @@ -405,6 +405,8 @@ namespace BreCalClient private async void LoadStaticLists() { + if (_loginResult == null) return; + BreCalLists.InitializeBerths(await _staticApi.BerthsGetAsync()); BreCalLists.InitializeShips(await _shipApi.ShipsGetAsync()); BreCalLists.InitializeParticipants(await _staticApi.ParticipantsGetAsync()); @@ -422,16 +424,33 @@ namespace BreCalClient this.searchFilterControl.SetAgencies(BreCalLists.Participants_Agent); - if (!string.IsNullOrEmpty(Properties.Settings.Default.FilterCriteria)) + if (!string.IsNullOrEmpty(Properties.Settings.Default.FilterCriteriaMap)) { - SearchFilterModel? sfm = SearchFilterModel.Deserialize(Properties.Settings.Default.FilterCriteria); - if (sfm != null) - this.searchFilterControl.SetFilterFromModel(sfm); + SearchFilterModel.Deserialize(Properties.Settings.Default.FilterCriteriaMap); + SearchFilterModel? currentFilter = null; + if (SearchFilterModel.filterMap != null) + { + if((_loginResult != null) && SearchFilterModel.filterMap.ContainsKey(_loginResult.Id)) + { + currentFilter = SearchFilterModel.filterMap[_loginResult.Id]; + } + } + else + { + SearchFilterModel.filterMap = new(); + } + if (currentFilter == null) + { + currentFilter = new(); + if(_loginResult != null) + SearchFilterModel.filterMap[_loginResult.Id] = currentFilter; + } + this.searchFilterControl.SetFilterFromModel(currentFilter); } _ = Task.Run(() => RefreshShipcalls()); - _ = Task.Run(() => RefreshShips()); + } diff --git a/src/BreCalClient/Properties/Settings.Designer.cs b/src/BreCalClient/Properties/Settings.Designer.cs index 2e8d6de..fd85a6b 100644 --- a/src/BreCalClient/Properties/Settings.Designer.cs +++ b/src/BreCalClient/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace BreCalClient.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.10.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); @@ -214,5 +214,17 @@ namespace BreCalClient.Properties { this["W4Top"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string FilterCriteriaMap { + get { + return ((string)(this["FilterCriteriaMap"])); + } + set { + this["FilterCriteriaMap"] = value; + } + } } } diff --git a/src/BreCalClient/Properties/Settings.settings b/src/BreCalClient/Properties/Settings.settings index 7903ee0..b10fd5b 100644 --- a/src/BreCalClient/Properties/Settings.settings +++ b/src/BreCalClient/Properties/Settings.settings @@ -53,5 +53,8 @@ 0 + + + \ No newline at end of file diff --git a/src/BreCalClient/SearchFilterModel.cs b/src/BreCalClient/SearchFilterModel.cs index 478295e..a827ea3 100644 --- a/src/BreCalClient/SearchFilterModel.cs +++ b/src/BreCalClient/SearchFilterModel.cs @@ -33,18 +33,21 @@ namespace BreCalClient public bool? MineOnly { get; set; } + public static Dictionary? filterMap = new(); + #endregion #region Serialisation - public static SearchFilterModel? Deserialize(string json) + public static bool Deserialize(string json) { - return (SearchFilterModel?) JsonConvert.DeserializeObject(json, typeof(SearchFilterModel)); + filterMap = (Dictionary?) JsonConvert.DeserializeObject(json, typeof(Dictionary)); + return (filterMap != null); } - public string Serialize() + public static string Serialize() { - return JsonConvert.SerializeObject(this, Formatting.Indented); + return JsonConvert.SerializeObject(filterMap, Formatting.Indented); } #endregion