diff --git a/Source/AppScaffolding/AppScaffolding.csproj b/Source/AppScaffolding/AppScaffolding.csproj index 83a43433..9c4ad61a 100644 --- a/Source/AppScaffolding/AppScaffolding.csproj +++ b/Source/AppScaffolding/AppScaffolding.csproj @@ -2,7 +2,7 @@ net8.0 - 11.4.1.1 + 11.5 diff --git a/Source/AppScaffolding/LibationScaffolding.cs b/Source/AppScaffolding/LibationScaffolding.cs index 9cf704a6..917ac9d7 100644 --- a/Source/AppScaffolding/LibationScaffolding.cs +++ b/Source/AppScaffolding/LibationScaffolding.cs @@ -1,21 +1,22 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using ApplicationServices; +using ApplicationServices; using AudibleUtilities; -using Dinah.Core; using Dinah.Core.IO; using Dinah.Core.Logging; using LibationFileManager; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Serilog; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Reflection; using System.Runtime.InteropServices; namespace AppScaffolding { - public enum ReleaseIdentifier + public enum ReleaseIdentifier { None, WindowsClassic = OS.Windows | Variety.Classic | Architecture.X64, @@ -87,7 +88,8 @@ public static void RunPostConfigMigrations(Configuration config) // Migrations.migrate_to_v6_6_9(config); - } + Migrations.migrate_to_v11_5_0(config); + } /// Initialize logging. Wire-up events. Run after migration public static void RunPostMigrationScaffolding(Variety variety, Configuration config) @@ -404,5 +406,55 @@ public static void migrate_to_v6_6_9(Configuration config) UNSAFE_MigrationHelper.Settings_AddUniqueToArray("Serilog.Enrich", "WithExceptionDetails"); } } - } + + class FilterState_6_6_9 + { + public bool UseDefault { get; set; } + public List Filters { get; set; } = new(); + } + + public static void migrate_to_v11_5_0(Configuration config) + { + // Read file, but convert old format to new (with Name field) as necessary. + if (!File.Exists(QuickFilters.JsonFile)) + { + QuickFilters.InMemoryState = new(); + return; + } + + try + { + if (JsonConvert.DeserializeObject(File.ReadAllText(QuickFilters.JsonFile)) + is QuickFilters.FilterState inMemState) + { + QuickFilters.InMemoryState = inMemState; + return; + } + } + catch + { + // Eat + } + + try + { + if (JsonConvert.DeserializeObject(File.ReadAllText(QuickFilters.JsonFile)) + is FilterState_6_6_9 inMemState) + { + // Copy old structure to new. + QuickFilters.InMemoryState = new(); + QuickFilters.InMemoryState.UseDefault = inMemState.UseDefault; + foreach (var oldFilter in inMemState.Filters) + QuickFilters.InMemoryState.Filters.Add(new QuickFilters.NamedFilter(oldFilter, null)); + + return; + } + Debug.Assert(false, "Should not get here, QuickFilters.json deserialization issue"); + } + catch + { + // Eat + } + } + } } diff --git a/Source/LibationAvalonia/Dialogs/EditQuickFilters.axaml b/Source/LibationAvalonia/Dialogs/EditQuickFilters.axaml index 54aad592..4fef0328 100644 --- a/Source/LibationAvalonia/Dialogs/EditQuickFilters.axaml +++ b/Source/LibationAvalonia/Dialogs/EditQuickFilters.axaml @@ -2,11 +2,13 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:dialogs="clr-namespace:LibationAvalonia.Dialogs" mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="350" Width="800" Height="450" x:Class="LibationAvalonia.Dialogs.EditQuickFilters" Title="Audible Accounts" - Icon="/Assets/libation.ico"> + Icon="/Assets/libation.ico" + x:DataType="dialogs:EditQuickFilters"> @@ -43,7 +45,14 @@ - + + + + Filters { get; } = new(); public class Filter : ViewModels.ViewModelBase - { - private string _filterString; + { + private string _name; + public string Name + { + get => _name; + set + { + this.RaiseAndSetIfChanged(ref _name, value); + } + } + + private string _filterString; public string FilterString { get => _filterString; @@ -25,6 +35,9 @@ public string FilterString } } public bool IsDefault { get; private set; } = true; + + public QuickFilters.NamedFilter AsNamedFilter() => new(FilterString, Name); + } public EditQuickFilters() { @@ -40,7 +53,7 @@ public EditQuickFilters() ControlToFocusOnShow = this.FindControl