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..64a6f9fc 100644 --- a/Source/AppScaffolding/LibationScaffolding.cs +++ b/Source/AppScaffolding/LibationScaffolding.cs @@ -1,21 +1,21 @@ -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.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 +87,8 @@ namespace AppScaffolding // 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 +405,53 @@ namespace AppScaffolding UNSAFE_MigrationHelper.Settings_AddUniqueToArray("Serilog.Enrich", "WithExceptionDetails"); } } - } + + public static void migrate_to_v11_5_0(Configuration config) + { + var writeToPath = "Serilog.WriteTo"; + + //QuickFilters.FilterState? inMemoryState; + + // 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 QuickFilters.OldFilterState 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 (Exception ex) + { + // Eat + } + } + } } diff --git a/Source/LibationFileManager/QuickFilters.cs b/Source/LibationFileManager/QuickFilters.cs index 1d761f93..1964c602 100644 --- a/Source/LibationFileManager/QuickFilters.cs +++ b/Source/LibationFileManager/QuickFilters.cs @@ -2,7 +2,6 @@ using Newtonsoft.Json; using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Linq; @@ -11,56 +10,6 @@ namespace LibationFileManager { public static class QuickFilters { - static QuickFilters() - { - // Read file, but convert old format to new (with Name field) as necessary. - if (!File.Exists(JsonFile)) - { - inMemoryState = new(); - return; - } - - try - { - if (JsonConvert.DeserializeObject(File.ReadAllText(JsonFile)) - is FilterState inMemState) - { - inMemoryState = inMemState; - return; - } - } - catch - { - Serilog.Log.Logger.Information("QuickFilters.json needs upgrade"); - } - - try - { - if (JsonConvert.DeserializeObject(File.ReadAllText(JsonFile)) - is OldFilterState inMemState) - { - Serilog.Log.Logger.Error("Old format detected, upgrading QuickFilters.json"); - - // Copy old structure to new. - inMemoryState = new(); - inMemoryState.UseDefault = inMemState.UseDefault; - foreach (var oldFilter in inMemState.Filters) - inMemoryState.Filters.Add(new NamedFilter(oldFilter, null)); - - Serilog.Log.Logger.Error($"QuickFilters.json upgraded, {inMemState.Filters?.Count ?? 0} filter(s) converted"); - - return; - } - Debug.Assert(false, "Should not get here, QuickFilters.json deserialization issue"); - } - catch (Exception ex) - { - Serilog.Log.Logger.Error(ex, "QuickFilters.json could not be upgraded, recreating"); - } - - inMemoryState = new FilterState(); - } - public static event EventHandler? Updated; public static event EventHandler? UseDefaultChanged; @@ -81,11 +30,11 @@ namespace LibationFileManager // load json into memory. if file doesn't exist, nothing to do. save() will create if needed - static FilterState inMemoryState { get; } + public static FilterState InMemoryState { get; set; } public static bool UseDefault { - get => inMemoryState.UseDefault; + get => InMemoryState.UseDefault; set { if (UseDefault == value) @@ -93,7 +42,7 @@ namespace LibationFileManager lock (locker) { - inMemoryState.UseDefault = value; + InMemoryState.UseDefault = value; save(false); } @@ -109,7 +58,7 @@ namespace LibationFileManager public string Name { get; set; } = Name; } - public static IEnumerable Filters => inMemoryState.Filters.AsReadOnly(); + public static IEnumerable Filters => InMemoryState.Filters.AsReadOnly(); public static void Add(NamedFilter namedFilter) { @@ -121,10 +70,10 @@ namespace LibationFileManager lock (locker) { // check for duplicates - if (inMemoryState.Filters.Select(x => x.Filter).ContainsInsensative(namedFilter.Filter)) + if (InMemoryState.Filters.Select(x => x.Filter).ContainsInsensative(namedFilter.Filter)) return; - inMemoryState.Filters.Add(namedFilter); + InMemoryState.Filters.Add(namedFilter); save(); } } @@ -133,7 +82,7 @@ namespace LibationFileManager { lock (locker) { - inMemoryState.Filters.Remove(filter); + InMemoryState.Filters.Remove(filter); save(); } } @@ -142,11 +91,11 @@ namespace LibationFileManager { lock (locker) { - var index = inMemoryState.Filters.IndexOf(oldFilter); + var index = InMemoryState.Filters.IndexOf(oldFilter); if (index < 0) return; - inMemoryState.Filters = inMemoryState.Filters.Select(f => f == oldFilter ? newFilter : f).ToList(); + InMemoryState.Filters = InMemoryState.Filters.Select(f => f == oldFilter ? newFilter : f).ToList(); save(); } @@ -161,7 +110,7 @@ namespace LibationFileManager filter.Filter = filter.Filter.Trim(); lock (locker) { - inMemoryState.Filters = new List(filters); + InMemoryState.Filters = new List(filters); save(); } } @@ -172,7 +121,7 @@ namespace LibationFileManager private static void save(bool invokeUpdatedEvent = true) { // create json if not exists - void resave() => File.WriteAllText(JsonFile, JsonConvert.SerializeObject(inMemoryState, Formatting.Indented)); + void resave() => File.WriteAllText(JsonFile, JsonConvert.SerializeObject(InMemoryState, Formatting.Indented)); try { resave(); } catch (IOException) {