Moved QuickFilters migration to AppScaffolding.

This commit is contained in:
Chris Bordeman 2024-10-14 23:59:05 -04:00
parent f92b2b65b2
commit 4801f37e7c
3 changed files with 71 additions and 73 deletions

View file

@ -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<FilterState>(File.ReadAllText(JsonFile))
is FilterState inMemState)
{
inMemoryState = inMemState;
return;
}
}
catch
{
Serilog.Log.Logger.Information("QuickFilters.json needs upgrade");
}
try
{
if (JsonConvert.DeserializeObject<OldFilterState>(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<NamedFilter> Filters => inMemoryState.Filters.AsReadOnly();
public static IEnumerable<NamedFilter> 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<NamedFilter>(filters);
InMemoryState.Filters = new List<NamedFilter>(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)
{