mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Add log if filter field doesn't match anything
This commit is contained in:
@@ -4,8 +4,10 @@ using System.Linq;
|
|||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
using SabreTools.Core;
|
using SabreTools.Core;
|
||||||
|
using SabreTools.Core.Tools;
|
||||||
using SabreTools.DatFiles;
|
using SabreTools.DatFiles;
|
||||||
using SabreTools.DatItems;
|
using SabreTools.DatItems;
|
||||||
|
using SabreTools.Logging;
|
||||||
|
|
||||||
namespace SabreTools.Filtering
|
namespace SabreTools.Filtering
|
||||||
{
|
{
|
||||||
@@ -114,6 +116,15 @@ namespace SabreTools.Filtering
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool Trim { get; set; }
|
public bool Trim { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Logging
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Logging object
|
||||||
|
/// </summary>
|
||||||
|
private Logger logger = new Logger();
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Cleaning
|
#region Cleaning
|
||||||
@@ -331,6 +342,80 @@ namespace SabreTools.Filtering
|
|||||||
|
|
||||||
#region 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>
|
/// <summary>
|
||||||
/// Check to see if a DatItem passes the filters
|
/// Check to see if a DatItem passes the filters
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -25,25 +25,6 @@ namespace SabreTools.Filtering
|
|||||||
|
|
||||||
#region Filter Population
|
#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>
|
/// <summary>
|
||||||
/// Set multiple filters from key
|
/// Set multiple filters from key
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -208,25 +208,6 @@ namespace SabreTools.Filtering
|
|||||||
|
|
||||||
#region Filter Population
|
#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>
|
/// <summary>
|
||||||
/// Set multiple filters from key
|
/// Set multiple filters from key
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -33,12 +33,6 @@ namespace SabreTools.Filtering
|
|||||||
|
|
||||||
#region Filter Population
|
#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>
|
/// <summary>
|
||||||
/// Split the parts of a filter statement
|
/// Split the parts of a filter statement
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -112,25 +112,6 @@ namespace SabreTools.Filtering
|
|||||||
|
|
||||||
#region Filter Population
|
#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>
|
/// <summary>
|
||||||
/// Set multiple filters from key
|
/// Set multiple filters from key
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -2698,9 +2698,7 @@ Some special strings that can be used:
|
|||||||
|
|
||||||
// Populate filters
|
// Populate filters
|
||||||
List<string> filterPairs = GetList(features, FilterListValue);
|
List<string> filterPairs = GetList(features, FilterListValue);
|
||||||
cleaner.DatHeaderFilter.PopulateFromList(filterPairs);
|
cleaner.PopulateFromList(filterPairs);
|
||||||
cleaner.DatItemFilter.PopulateFromList(filterPairs);
|
|
||||||
cleaner.MachineFilter.PopulateFromList(filterPairs);
|
|
||||||
|
|
||||||
// Include 'of" in game filters
|
// Include 'of" in game filters
|
||||||
cleaner.MachineFilter.IncludeOfInGame = GetBoolean(features, MatchOfTagsValue);
|
cleaner.MachineFilter.IncludeOfInGame = GetBoolean(features, MatchOfTagsValue);
|
||||||
|
|||||||
Reference in New Issue
Block a user