Improve NRE safety for quick filters

This commit is contained in:
Michael Bucari-Tovo 2025-02-27 10:10:26 -07:00
parent d195dd07dc
commit 4766ea7372

View File

@ -24,14 +24,14 @@ namespace LibationFileManager
// load json into memory. if file doesn't exist, nothing to do. save() will create if needed // load json into memory. if file doesn't exist, nothing to do. save() will create if needed
public static FilterState InMemoryState { get; set; } = null!; public static FilterState? InMemoryState { get; set; }
public static bool UseDefault public static bool UseDefault
{ {
get => InMemoryState.UseDefault; get => InMemoryState?.UseDefault ?? false;
set set
{ {
if (UseDefault == value) if (InMemoryState is null || UseDefault == value)
return; return;
lock (locker) lock (locker)
@ -52,7 +52,8 @@ namespace LibationFileManager
public string? Name { get; set; } = Name; public string? Name { get; set; } = Name;
} }
public static IEnumerable<NamedFilter> Filters => InMemoryState.Filters.AsReadOnly(); public static IEnumerable<NamedFilter> Filters
=> InMemoryState?.Filters.AsReadOnly() ?? Enumerable.Empty<NamedFilter>();
public static void Add(NamedFilter namedFilter) public static void Add(NamedFilter namedFilter)
{ {
@ -66,6 +67,7 @@ namespace LibationFileManager
lock (locker) lock (locker)
{ {
InMemoryState ??= new();
// check for duplicates // check for duplicates
if (InMemoryState.Filters.Select(x => x.Filter).ContainsInsensative(namedFilter.Filter)) if (InMemoryState.Filters.Select(x => x.Filter).ContainsInsensative(namedFilter.Filter))
return; return;
@ -79,6 +81,8 @@ namespace LibationFileManager
{ {
lock (locker) lock (locker)
{ {
if (InMemoryState is null)
return;
InMemoryState.Filters.Remove(filter); InMemoryState.Filters.Remove(filter);
save(); save();
} }
@ -88,8 +92,7 @@ namespace LibationFileManager
{ {
lock (locker) lock (locker)
{ {
var index = InMemoryState.Filters.IndexOf(oldFilter); if (InMemoryState is null || InMemoryState.Filters.IndexOf(oldFilter) < 0)
if (index < 0)
return; return;
InMemoryState.Filters = InMemoryState.Filters.Select(f => f == oldFilter ? newFilter : f).ToList(); InMemoryState.Filters = InMemoryState.Filters.Select(f => f == oldFilter ? newFilter : f).ToList();
@ -107,6 +110,7 @@ namespace LibationFileManager
filter.Filter = filter.Filter.Trim(); filter.Filter = filter.Filter.Trim();
lock (locker) lock (locker)
{ {
InMemoryState ??= new();
InMemoryState.Filters = new List<NamedFilter>(filters); InMemoryState.Filters = new List<NamedFilter>(filters);
save(); save();
} }