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
public static FilterState InMemoryState { get; set; } = null!;
public static FilterState? InMemoryState { get; set; }
public static bool UseDefault
{
get => InMemoryState.UseDefault;
get => InMemoryState?.UseDefault ?? false;
set
{
if (UseDefault == value)
if (InMemoryState is null || UseDefault == value)
return;
lock (locker)
@ -52,7 +52,8 @@ namespace LibationFileManager
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)
{
@ -66,6 +67,7 @@ namespace LibationFileManager
lock (locker)
{
InMemoryState ??= new();
// check for duplicates
if (InMemoryState.Filters.Select(x => x.Filter).ContainsInsensative(namedFilter.Filter))
return;
@ -79,6 +81,8 @@ namespace LibationFileManager
{
lock (locker)
{
if (InMemoryState is null)
return;
InMemoryState.Filters.Remove(filter);
save();
}
@ -88,8 +92,7 @@ namespace LibationFileManager
{
lock (locker)
{
var index = InMemoryState.Filters.IndexOf(oldFilter);
if (index < 0)
if (InMemoryState is null || InMemoryState.Filters.IndexOf(oldFilter) < 0)
return;
InMemoryState.Filters = InMemoryState.Filters.Select(f => f == oldFilter ? newFilter : f).ToList();
@ -107,6 +110,7 @@ namespace LibationFileManager
filter.Filter = filter.Filter.Trim();
lock (locker)
{
InMemoryState ??= new();
InMemoryState.Filters = new List<NamedFilter>(filters);
save();
}