Add log if filter field doesn't match anything

This commit is contained in:
Matt Nadareski
2020-12-16 10:49:38 -08:00
parent c3753b13c1
commit e59c9fa0e4
6 changed files with 86 additions and 66 deletions

View File

@@ -4,8 +4,10 @@ using System.Linq;
using System.Text.RegularExpressions;
using SabreTools.Core;
using SabreTools.Core.Tools;
using SabreTools.DatFiles;
using SabreTools.DatItems;
using SabreTools.Logging;
namespace SabreTools.Filtering
{
@@ -116,6 +118,15 @@ namespace SabreTools.Filtering
#endregion
#region Logging
/// <summary>
/// Logging object
/// </summary>
private Logger logger = new Logger();
#endregion
#region Cleaning
/// <summary>
@@ -331,6 +342,80 @@ namespace SabreTools.Filtering
#region Filtering
/// <summary>
/// Populate the filters objects using a set of key:value filters
/// </summary>
/// <param name="filters">List of key:value where ~key/!key is negated</param>
public void PopulateFromList(List<string> filters)
{
// Instantiate the filters, if necessary
DatHeaderFilter ??= new DatHeaderFilter();
MachineFilter ??= new MachineFilter();
DatItemFilter ??= new DatItemFilter();
foreach (string filterPair in filters)
{
(string field, string value, bool negate) = ProcessFilterPair(filterPair);
// If we don't even have a possible filter pair
if (field == null && value == null)
continue;
// DatHeader fields
DatHeaderField datHeaderField = field.AsDatHeaderField();
if (datHeaderField != DatHeaderField.NULL)
{
DatHeaderFilter.SetFilter(datHeaderField, value, negate);
continue;
}
// Machine fields
MachineField machineField = field.AsMachineField();
if (machineField != MachineField.NULL)
{
MachineFilter.SetFilter(machineField, value, negate);
continue;
}
// DatItem fields
DatItemField datItemField = field.AsDatItemField();
if (datItemField != DatItemField.NULL)
{
DatItemFilter.SetFilter(datItemField, value, negate);
continue;
}
// If we didn't match anything, log an error
logger.Warning($"The value {field} did not match any known field names. Please check the wiki for more details on supported field names.");
}
}
/// <summary>
/// Split the parts of a filter statement
/// </summary>
/// <param name="filter">key:value where ~key/!key is negated</param>
private (string field, string value, bool negate) ProcessFilterPair(string filter)
{
// If we don't even have a possible filter pair
if (!filter.Contains(":"))
{
logger.Warning($"'{filter}` is not a valid filter string. Valid filter strings are of the form 'key:value'. Please refer to README.1ST or the help feature for more details.");
return (null, null, false);
}
string filterTrimmed = filter.Trim('"', ' ', '\t');
bool negate = filterTrimmed.StartsWith("!")
|| filterTrimmed.StartsWith("~")
|| filterTrimmed.StartsWith("not-");
filterTrimmed = filterTrimmed.TrimStart('!', '~');
filterTrimmed = filterTrimmed.StartsWith("not-") ? filterTrimmed[4..] : filterTrimmed;
string filterFieldString = filterTrimmed.Split(':')[0].ToLowerInvariant().Trim('"', ' ', '\t');
string filterValue = filterTrimmed[(filterFieldString.Length + 1)..].Trim('"', ' ', '\t');
return (filterFieldString, filterValue, negate);
}
/// <summary>
/// Check to see if a DatItem passes the filters
/// </summary>

View File

@@ -25,25 +25,6 @@ namespace SabreTools.Filtering
#region Filter Population
/// <summary>
/// Populate the filters object using a set of key:value filters
/// </summary>
/// <param name="filters">List of key:value where ~key/!key is negated</param>
public override void PopulateFromList(List<string> filters)
{
foreach (string filterPair in filters)
{
(string field, string value, bool negate) = ProcessFilterPair(filterPair);
// If we don't even have a possible filter pair
if (field == null && value == null)
continue;
DatHeaderField filterField = field.AsDatHeaderField();
SetFilter(filterField, value, negate);
}
}
/// <summary>
/// Set multiple filters from key
/// </summary>

View File

@@ -208,25 +208,6 @@ namespace SabreTools.Filtering
#region Filter Population
/// <summary>
/// Populate the filters object using a set of key:value filters
/// </summary>
/// <param name="filters">List of key:value where ~key/!key is negated</param>
public override void PopulateFromList(List<string> filters)
{
foreach (string filterPair in filters)
{
(string field, string value, bool negate) = ProcessFilterPair(filterPair);
// If we don't even have a possible filter pair
if (field == null && value == null)
continue;
DatItemField filterField = field.AsDatItemField();
SetFilter(filterField, value, negate);
}
}
/// <summary>
/// Set multiple filters from key
/// </summary>

View File

@@ -33,12 +33,6 @@ namespace SabreTools.Filtering
#region Filter Population
/// <summary>
/// Populate the filters object using a set of key:value filters
/// </summary>
/// <param name="filters">List of key:value where ~key/!key is negated</param>
public abstract void PopulateFromList(List<string> filters);
/// <summary>
/// Split the parts of a filter statement
/// </summary>

View File

@@ -112,25 +112,6 @@ namespace SabreTools.Filtering
#region Filter Population
/// <summary>
/// Populate the filters object using a set of key:value filters
/// </summary>
/// <param name="filters">List of key:value where ~key/!key is negated</param>
public override void PopulateFromList(List<string> filters)
{
foreach (string filterPair in filters)
{
(string field, string value, bool negate) = ProcessFilterPair(filterPair);
// If we don't even have a possible filter pair
if (field == null && value == null)
continue;
MachineField filterField = field.AsMachineField();
SetFilter(filterField, value, negate);
}
}
/// <summary>
/// Set multiple filters from key
/// </summary>

View File

@@ -2698,9 +2698,7 @@ Some special strings that can be used:
// Populate filters
List<string> filterPairs = GetList(features, FilterListValue);
cleaner.DatHeaderFilter.PopulateFromList(filterPairs);
cleaner.DatItemFilter.PopulateFromList(filterPairs);
cleaner.MachineFilter.PopulateFromList(filterPairs);
cleaner.PopulateFromList(filterPairs);
// Include 'of" in game filters
cleaner.MachineFilter.IncludeOfInGame = GetBoolean(features, MatchOfTagsValue);