Remove DatHeaderField enum

This commit is contained in:
Matt Nadareski
2024-03-10 21:03:53 -04:00
parent 49b7a5b273
commit 9735a178c5
7 changed files with 35 additions and 335 deletions

View File

@@ -736,170 +736,6 @@ namespace SabreTools.Core
#endregion #endregion
#region Fields
// TODO: This should move to Models like the rest
/// <summary>
/// List of valid field types within a DatHeader
/// </summary>
public enum DatHeaderField
{
/// <summary>
/// This is a fake flag that is used for filter only
/// </summary>
NULL = 0,
/// <remarks>Used in ClrMamePro, DOSCenter, Logiqx, and RomCenter</remarks>
[Mapping("author")]
Author,
/// <remarks>Used in Logiqx</remarks>
[Mapping("biosmode", "bios_mode")]
BiosMode,
/// <remarks>Used in Logiqx</remarks>
[Mapping("build")]
Build,
/// <remarks>Used with OfflineList</remarks>
[Mapping("canopen", "can_open")]
CanOpen,
/// <remarks>Used in ClrMamePro and Logiqx</remarks>
[Mapping("category")]
Category,
/// <remarks>Used in ClrMamePro, DOSCenter, Logiqx, and RomCenter</remarks>
[Mapping("comment")]
Comment,
/// <remarks>Used in ClrMamePro, DOSCenter, Logiqx, OpenMSX, and RomCenter</remarks>
[Mapping("date", "timestamp", "time_stamp")]
Date,
/// <remarks>Used in Logiqx and ListXML</remarks>
[Mapping("debug")]
Debug,
/// <remarks>Used in ClrMamePro, DOSCenter, ListXML, Logiqx, OpenMSX, RomCenter, Separated Value, and Software List</remarks>
[Mapping("desc", "description")]
Description,
/// <remarks>Used in ClrMamePro, Logiqx, and RomCenter</remarks>
[Mapping("email", "e_mail")]
Email,
/// <remarks>Used in AttractMode, OfflineList, and Separated Value</remarks>
[Mapping("file", "filename", "file_name")]
FileName,
/// <remarks>Used in ClrMamePro, Logiqx, and RomCenter</remarks>
[Mapping("forcemerging", "force_merging")]
ForceMerging,
/// <remarks>Used in Logiqx</remarks>
[Mapping("forcenodump", "force_nodump")]
ForceNodump,
/// <remarks>Used in ClrMamePro and Logiqx</remarks>
[Mapping("forcepacking", "force_packing")]
ForcePacking,
/// <remarks>Used in ClrMamePro and Logiqx</remarks>
[Mapping("header", "headerskipper", "header_skipper", "skipper")]
HeaderSkipper,
/// <remarks>Used in ClrMamePro, DOSCenter, Logiqx, and RomCenter</remarks>
[Mapping("homepage", "home_page")]
Homepage,
/// <remarks>Used in Logiqx</remarks>
[Mapping("id", "nointroid", "no_intro_id")]
ID,
/// <remarks>Used with OfflineList; Part of "Info" object</remarks>
[Mapping("info_default", "infos_default")]
Info_Default,
/// <remarks>Used with OfflineList; Part of "Info" object</remarks>
[Mapping("info_isnamingoption", "info_is_naming_option", "infos_isnamingoption", "infos_is_naming_option")]
Info_IsNamingOption,
/// <remarks>Used with OfflineList; Part of "Info" object</remarks>
[Mapping("info_name", "infos_name")]
Info_Name,
/// <remarks>Used with OfflineList; Part of "Info" object</remarks>
[Mapping("info_visible", "infos_visible")]
Info_Visible,
/// <remarks>Used in Logiqx</remarks>
[Mapping("lockbiosmode", "lockbios_mode", "lock_biosmode", "lock_bios_mode")]
LockBiosMode,
/// <remarks>Used in Logiqx</remarks>
[Mapping("lockrommode", "lockrom_mode", "lock_rommode", "lock_rom_mode")]
LockRomMode,
/// <remarks>Used in Logiqx</remarks>
[Mapping("locksamplemode", "locksample_mode", "lock_samplemode", "lock_sample_mode")]
LockSampleMode,
/// <remarks>Used in ListXML</remarks>
[Mapping("mameconfig", "mame_config")]
MameConfig,
/// <remarks>Used in ClrMamePro, DOSCenter, ListXML, Logiqx, OfflineList, OpenMSX, RomCenter, Separated Value, and Software List</remarks>
[Mapping("dat", "datname", "dat_name", "internalname", "internal_name")]
Name,
/// <remarks>Used with RomCenter</remarks>
[Mapping("rcversion", "rc_version", "romcenterversion", "romcenter_version", "rom_center_version")]
RomCenterVersion,
/// <remarks>Used in Logiqx</remarks>
[Mapping("rommode", "rom_mode")]
RomMode,
/// <remarks>Used with OfflineList</remarks>
[Mapping("romtitle", "rom_title")]
RomTitle,
/// <remarks>Used with ClrMamePro and Logiqx</remarks>
[Mapping("root", "rootdir", "root_dir", "rootdirectory", "root_directory")]
RootDir,
/// <remarks>Used in Logiqx</remarks>
[Mapping("samplemode", "sample_mode")]
SampleMode,
/// <remarks>Used with OfflineList</remarks>
[Mapping("screenshotheight", "screenshotsheight", "screenshot_height", "screenshots_height")]
ScreenshotsHeight,
/// <remarks>Used with OfflineList</remarks>
[Mapping("screenshotwidth", "screenshotswidth", "screenshot_width", "screenshots_width")]
ScreenshotsWidth,
/// <remarks>Used with Logiqx, OfflineList, and RomCenter; "plugin" is used for RomCenter</remarks>
[Mapping("system", "plugin")]
System,
/// <remarks>Used with ClrMamePro, Logiqx, and OfflineList</remarks>
[Mapping("dattype", "type", "superdat")]
Type,
/// <remarks>Used with ClrMamePro, Logiqx, OfflineList, and RomCenter</remarks>
[Mapping("url")]
Url,
/// <remarks>Used with ClrMamePro, DOSCenter, ListXML, Logiqx, OfflineList, and RomCenter</remarks>
[Mapping("version")]
Version,
}
#endregion
#region Logging #region Logging
/// <summary> /// <summary>

View File

@@ -1,7 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions;
namespace SabreTools.Core.Tools namespace SabreTools.Core.Tools
{ {
@@ -9,36 +8,6 @@ namespace SabreTools.Core.Tools
{ {
#region String to Enum #region String to Enum
/// <summary>
/// Get DatHeaderField value from input string
/// </summary>
/// <param name="DatHeaderField">String to get value from</param>
/// <returns>DatHeaderField value corresponding to the string</returns>
public static DatHeaderField AsDatHeaderField(this string? input)
{
// If the input is empty, we return null
if (string.IsNullOrEmpty(input))
return DatHeaderField.NULL;
// Normalize the input
input = input!.ToLowerInvariant();
// Create regex
string headerRegex = @"^(dat|header|datheader)[.\-_\s]";
// If we don't have a header field, skip
if (!Regex.IsMatch(input, headerRegex))
return DatHeaderField.NULL;
// Replace the match and re-normalize
string headerInput = Regex.Replace(input, headerRegex, string.Empty)
.Replace(' ', '_')
.Replace('-', '_')
.Replace('.', '_');
return AsEnumValue<DatHeaderField>(headerInput);
}
/// <summary> /// <summary>
/// Get bool? value from input string /// Get bool? value from input string
/// </summary> /// </summary>

View File

@@ -6,6 +6,7 @@ using Newtonsoft.Json;
using SabreTools.Core; using SabreTools.Core;
using SabreTools.Core.Tools; using SabreTools.Core.Tools;
using SabreTools.DatFiles.Formats; using SabreTools.DatFiles.Formats;
using SabreTools.Filter;
namespace SabreTools.DatFiles namespace SabreTools.DatFiles
{ {
@@ -360,58 +361,29 @@ namespace SabreTools.DatFiles
#region Manipulation #region Manipulation
/// <summary>
/// Runs a filter and determines if it passes or not
/// </summary>
/// <param name="filterRunner">Filter runner to use for checking</param>
/// <returns>True if the Machine passes the filter, false otherwise</returns>
public bool PassesFilter(FilterRunner filterRunner) => filterRunner.Run(_header);
/// <summary> /// <summary>
/// Remove a field from the header /// Remove a field from the header
/// </summary> /// </summary>
/// <param name="fieldName">Field to remove</param> /// <param name="fieldName">Field to remove</param>
/// <returns>True if the removal was successful, false otherwise</returns> /// <returns>True if the removal was successful, false otherwise</returns>
public bool RemoveField(string fieldName) public bool RemoveField(string fieldName)
{ => FieldManipulator.RemoveField(_header, fieldName);
DatHeaderField datHeaderField = fieldName.AsDatHeaderField();
switch (datHeaderField)
{
case DatHeaderField.Author: SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, null); break;
case DatHeaderField.BiosMode: SetFieldValue<MergingFlag>(Models.Metadata.Header.BiosModeKey, MergingFlag.None); break;
case DatHeaderField.Build: SetFieldValue<string?>(Models.Metadata.Header.BuildKey, null); break;
case DatHeaderField.CanOpen: SetFieldValue<string[]?>(Models.Metadata.Header.CanOpenKey, null); break;
case DatHeaderField.Category: SetFieldValue<string?>(Models.Metadata.Header.CategoryKey, null); break;
case DatHeaderField.Comment: SetFieldValue<string?>(Models.Metadata.Header.CommentKey, null); break;
case DatHeaderField.Date: SetFieldValue<string?>(Models.Metadata.Header.DateKey, null); break;
case DatHeaderField.Debug: SetFieldValue<bool?>(Models.Metadata.Header.DebugKey, null); break;
case DatHeaderField.Description: SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, null); break;
case DatHeaderField.Email: SetFieldValue<string?>(Models.Metadata.Header.EmailKey, null); break;
case DatHeaderField.FileName: FileName = null; break;
case DatHeaderField.ForceMerging: SetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey, MergingFlag.None); break;
case DatHeaderField.ForceNodump: SetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey, NodumpFlag.None); break;
case DatHeaderField.ForcePacking: SetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey, PackingFlag.None); break;
case DatHeaderField.HeaderSkipper: SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, null); break;
case DatHeaderField.Homepage: SetFieldValue<string?>(Models.Metadata.Header.HomepageKey, null); break;
case DatHeaderField.ID: SetFieldValue<string?>(Models.Metadata.Header.IdKey, null); break;
// case DatHeaderField.Info_Default: Info_Default = null; break;
// case DatHeaderField.Info_IsNamingOption: Info_IsNamingOption = null; break;
// case DatHeaderField.Info_Name: Info_Name = null; break;
// case DatHeaderField.Info_Visible: Info_Visible = null; break;
case DatHeaderField.LockBiosMode: SetFieldValue<bool?>(Models.Metadata.Header.LockBiosModeKey, null); break;
case DatHeaderField.LockRomMode: SetFieldValue<bool?>(Models.Metadata.Header.LockRomModeKey, null); break;
case DatHeaderField.LockSampleMode: SetFieldValue<bool?>(Models.Metadata.Header.LockSampleModeKey, null); break;
case DatHeaderField.MameConfig: SetFieldValue<string?>(Models.Metadata.Header.MameConfigKey, null); break;
case DatHeaderField.Name: SetFieldValue<string?>(Models.Metadata.Header.NameKey, null); break;
case DatHeaderField.RomCenterVersion: SetFieldValue<string?>(Models.Metadata.Header.DatVersionKey, null); break;
case DatHeaderField.RomMode: SetFieldValue<MergingFlag>(Models.Metadata.Header.RomModeKey, MergingFlag.None); break;
case DatHeaderField.RomTitle: SetFieldValue<string?>(Models.Metadata.Header.RomTitleKey, null); break;
case DatHeaderField.RootDir: SetFieldValue<string?>(Models.Metadata.Header.RootDirKey, null); break;
case DatHeaderField.SampleMode: SetFieldValue<MergingFlag>(Models.Metadata.Header.SampleModeKey, MergingFlag.None); break;
case DatHeaderField.ScreenshotsHeight: SetFieldValue<string?>(Models.Metadata.Header.ScreenshotsHeightKey, null); break;
case DatHeaderField.ScreenshotsWidth: SetFieldValue<string?>(Models.Metadata.Header.ScreenshotsWidthKey, null); break;
case DatHeaderField.System: SetFieldValue<string?>(Models.Metadata.Header.SystemKey, null); break;
case DatHeaderField.Type: SetFieldValue<string?>(Models.Metadata.Header.TypeKey, null); break;
case DatHeaderField.Url: SetFieldValue<string?>(Models.Metadata.Header.UrlKey, null); break;
case DatHeaderField.Version: SetFieldValue<string?>(Models.Metadata.Header.VersionKey, null); break;
default: return false;
}
return true; /// <summary>
} /// Replace a field from another DatHeader
/// </summary>
/// <param name="other">DatHeader to replace field from</param>
/// <param name="fieldName">Field to replace</param>
/// <returns>True if the replacement was successful, false otherwise</returns>
public bool ReplaceField(DatHeader? other, string? fieldName)
=> FieldManipulator.ReplaceField(other?._header, _header, fieldName);
/// <summary> /// <summary>
/// Set a field in the header from a mapping string /// Set a field in the header from a mapping string
@@ -421,52 +393,7 @@ namespace SabreTools.DatFiles
/// <returns>True if the setting was successful, false otherwise</returns> /// <returns>True if the setting was successful, false otherwise</returns>
/// <remarks>This only performs minimal validation before setting</remarks> /// <remarks>This only performs minimal validation before setting</remarks>
public bool SetField(string? fieldName, string value) public bool SetField(string? fieldName, string value)
{ => FieldManipulator.SetField(_header, fieldName, value);
DatHeaderField datHeaderField = fieldName.AsDatHeaderField();
switch (datHeaderField)
{
case DatHeaderField.Author: SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, value); break;
case DatHeaderField.BiosMode: SetFieldValue<MergingFlag>(Models.Metadata.Header.BiosModeKey, value.AsEnumValue<MergingFlag>()); break;
case DatHeaderField.Build: SetFieldValue<string?>(Models.Metadata.Header.BuildKey, value); break;
case DatHeaderField.CanOpen: SetFieldValue<string[]?>(Models.Metadata.Header.CanOpenKey,[.. value.Split(',')]); break;
case DatHeaderField.Category: SetFieldValue<string?>(Models.Metadata.Header.CategoryKey, value); break;
case DatHeaderField.Comment: SetFieldValue<string?>(Models.Metadata.Header.CommentKey, value); break;
case DatHeaderField.Date: SetFieldValue<string?>(Models.Metadata.Header.DateKey, value); break;
case DatHeaderField.Debug: SetFieldValue<bool?>(Models.Metadata.Header.DebugKey, value.AsYesNo()); break;
case DatHeaderField.Description: SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, value); break;
case DatHeaderField.Email: SetFieldValue<string?>(Models.Metadata.Header.EmailKey, value); break;
case DatHeaderField.FileName: FileName = value; break;
case DatHeaderField.ForceMerging: SetFieldValue<MergingFlag>(Models.Metadata.Header.ForceMergingKey, value.AsEnumValue<MergingFlag>()); break;
case DatHeaderField.ForceNodump: SetFieldValue<NodumpFlag>(Models.Metadata.Header.ForceNodumpKey, value.AsEnumValue<NodumpFlag>()); break;
case DatHeaderField.ForcePacking: SetFieldValue<PackingFlag>(Models.Metadata.Header.ForcePackingKey, value.AsEnumValue<PackingFlag>()); break;
case DatHeaderField.HeaderSkipper: SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, value); break;
case DatHeaderField.Homepage: SetFieldValue<string?>(Models.Metadata.Header.HomepageKey, value); break;
case DatHeaderField.ID: SetFieldValue<string?>(Models.Metadata.Header.IdKey, value); break;
// case DatHeaderField.Info_Default: Info_Default = value; break;
// case DatHeaderField.Info_IsNamingOption: Info_IsNamingOption = value; break;
// case DatHeaderField.Info_Name: Info_Name = value; break;
// case DatHeaderField.Info_Visible: Info_Visible = value; break;
case DatHeaderField.LockBiosMode: SetFieldValue<bool?>(Models.Metadata.Header.LockBiosModeKey, value.AsYesNo()); break;
case DatHeaderField.LockRomMode: SetFieldValue<bool?>(Models.Metadata.Header.LockRomModeKey, value.AsYesNo()); break;
case DatHeaderField.LockSampleMode: SetFieldValue<bool?>(Models.Metadata.Header.LockSampleModeKey, value.AsYesNo()); break;
case DatHeaderField.MameConfig: SetFieldValue<string?>(Models.Metadata.Header.MameConfigKey, value); break;
case DatHeaderField.Name: SetFieldValue<string?>(Models.Metadata.Header.NameKey, value); break;
case DatHeaderField.RomCenterVersion: SetFieldValue<string?>(Models.Metadata.Header.DatVersionKey, value); break;
case DatHeaderField.RomMode: SetFieldValue<MergingFlag>(Models.Metadata.Header.RomModeKey, value.AsEnumValue<MergingFlag>()); break;
case DatHeaderField.RomTitle: SetFieldValue<string?>(Models.Metadata.Header.RomTitleKey, value); break;
case DatHeaderField.RootDir: SetFieldValue<string?>(Models.Metadata.Header.RootDirKey, value); break;
case DatHeaderField.SampleMode: SetFieldValue<MergingFlag>(Models.Metadata.Header.SampleModeKey, value.AsEnumValue<MergingFlag>()); break;
case DatHeaderField.ScreenshotsHeight: SetFieldValue<string?>(Models.Metadata.Header.ScreenshotsHeightKey, value); break;
case DatHeaderField.ScreenshotsWidth: SetFieldValue<string?>(Models.Metadata.Header.ScreenshotsWidthKey, value); break;
case DatHeaderField.System: SetFieldValue<string?>(Models.Metadata.Header.SystemKey, value); break;
case DatHeaderField.Type: SetFieldValue<string?>(Models.Metadata.Header.TypeKey, value); break;
case DatHeaderField.Url: SetFieldValue<string?>(Models.Metadata.Header.UrlKey, value); break;
case DatHeaderField.Version: SetFieldValue<string?>(Models.Metadata.Header.VersionKey, value); break;
default: return false;
}
return true;
}
#endregion #endregion

View File

@@ -273,12 +273,16 @@ namespace SabreTools.DatItems
// If the duplicate is external already or should be, set it // If the duplicate is external already or should be, set it
#if NETFRAMEWORK #if NETFRAMEWORK
if ((lastItem.GetFieldValue<DupeType>(DatItem.DupeTypeKey) & DupeType.External) != 0 || lastItem?.GetFieldValue<Source?>(DatItem.SourceKey)?.Index != GetFieldValue<Source?>(DatItem.SourceKey)?.Index) if ((lastItem.GetFieldValue<DupeType>(DatItem.DupeTypeKey) & DupeType.External) != 0
|| lastItem?.GetFieldValue<Source?>(DatItem.SourceKey)?.Index != GetFieldValue<Source?>(DatItem.SourceKey)?.Index)
#else #else
if (lastItem.GetFieldValue<DupeType>(DatItem.DupeTypeKey).HasFlag(DupeType.External) || lastItem?.GetFieldValue<Source?>(DatItem.SourceKey)?.Index != GetFieldValue<Source?>(DatItem.SourceKey)?.Index) if (lastItem.GetFieldValue<DupeType>(DatItem.DupeTypeKey).HasFlag(DupeType.External)
|| lastItem?.GetFieldValue<Source?>(DatItem.SourceKey)?.Index != GetFieldValue<Source?>(DatItem.SourceKey)?.Index)
#endif #endif
{ {
if (lastItem?.GetFieldValue<Machine>(DatItem.MachineKey)?.GetFieldValue<string?>(Models.Metadata.Machine.NameKey) == GetFieldValue<Machine>(DatItem.MachineKey)?.GetFieldValue<string?>(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName()) var currentMachine = GetFieldValue<Machine>(DatItem.MachineKey);
var lastMachine = lastItem?.GetFieldValue<Machine>(DatItem.MachineKey);
if (lastMachine?.GetFieldValue<string?>(Models.Metadata.Machine.NameKey) == currentMachine?.GetFieldValue<string?>(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName())
output = DupeType.External | DupeType.All; output = DupeType.External | DupeType.All;
else else
output = DupeType.External | DupeType.Hash; output = DupeType.External | DupeType.Hash;
@@ -287,7 +291,9 @@ namespace SabreTools.DatItems
// Otherwise, it's considered an internal dupe // Otherwise, it's considered an internal dupe
else else
{ {
if (lastItem?.GetFieldValue<Machine>(DatItem.MachineKey)?.GetFieldValue<string?>(Models.Metadata.Machine.NameKey) == GetFieldValue<Machine>(DatItem.MachineKey)?.GetFieldValue<string?>(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName()) var currentMachine = GetFieldValue<Machine>(DatItem.MachineKey);
var lastMachine = lastItem?.GetFieldValue<Machine>(DatItem.MachineKey);
if (lastMachine?.GetFieldValue<string?>(Models.Metadata.Machine.NameKey) == currentMachine?.GetFieldValue<string?>(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName())
output = DupeType.Internal | DupeType.All; output = DupeType.Internal | DupeType.All;
else else
output = DupeType.Internal | DupeType.Hash; output = DupeType.Internal | DupeType.Hash;

View File

@@ -152,17 +152,8 @@ namespace SabreTools.DatItems
#region Constructors #region Constructors
/// <summary> public Machine() { }
/// Create a new Machine object
/// </summary>
public Machine()
{
}
/// <summary>
/// Create a new Machine object from an existing metadata model
/// </summary>
/// <param name="machine">Machine metadata model</param>
public Machine(Models.Metadata.Machine machine) public Machine(Models.Metadata.Machine machine)
{ {
// Get all fields to automatically copy without processing // Get all fields to automatically copy without processing
@@ -179,11 +170,6 @@ namespace SabreTools.DatItems
} }
} }
/// <summary>
/// Create a new Machine object with the included information
/// </summary>
/// <param name="name">Name of the machine</param>
/// <param name="description">Description of the machine</param>
public Machine(string name, string description) public Machine(string name, string description)
{ {
SetFieldValue<string?>(Models.Metadata.Machine.NameKey, name); SetFieldValue<string?>(Models.Metadata.Machine.NameKey, name);

View File

@@ -41,30 +41,6 @@ namespace SabreTools.Test.Core
Assert.Equal(expected, actual); Assert.Equal(expected, actual);
} }
[Theory]
[InlineData(null, DatHeaderField.NULL)]
[InlineData("datname", DatHeaderField.NULL)]
[InlineData("dat-datname", DatHeaderField.Name)]
[InlineData("dat.datname", DatHeaderField.Name)]
[InlineData("dat_datname", DatHeaderField.Name)]
[InlineData("dat datname", DatHeaderField.Name)]
[InlineData("datheader-datname", DatHeaderField.Name)]
[InlineData("datheader.datname", DatHeaderField.Name)]
[InlineData("datheader_datname", DatHeaderField.Name)]
[InlineData("datheader datname", DatHeaderField.Name)]
[InlineData("header-datname", DatHeaderField.Name)]
[InlineData("header.datname", DatHeaderField.Name)]
[InlineData("header_datname", DatHeaderField.Name)]
[InlineData("header datname", DatHeaderField.Name)]
[InlineData("DAT.DATNAME", DatHeaderField.Name)]
[InlineData("dAt.DAtnamE", DatHeaderField.Name)]
public void AsDatHeaderFieldProcessingTest(string? field, DatHeaderField expected)
{
// TODO: Write new test for all supported fields
DatHeaderField actual = field.AsDatHeaderField();
Assert.Equal(expected, actual);
}
[Theory] [Theory]
[InlineData(null, DeviceType.NULL)] [InlineData(null, DeviceType.NULL)]
[InlineData("unknown", DeviceType.Unknown)] [InlineData("unknown", DeviceType.Unknown)]
@@ -749,7 +725,6 @@ namespace SabreTools.Test.Core
[Theory] [Theory]
[InlineData(ChipType.NULL, 2)] [InlineData(ChipType.NULL, 2)]
[InlineData(ControlType.NULL, 15)] [InlineData(ControlType.NULL, 15)]
[InlineData(DatHeaderField.NULL, 94)]
[InlineData(DeviceType.NULL, 21)] [InlineData(DeviceType.NULL, 21)]
[InlineData(DisplayType.NULL, 5)] [InlineData(DisplayType.NULL, 5)]
[InlineData(Endianness.NULL, 2)] [InlineData(Endianness.NULL, 2)]

View File

@@ -706,7 +706,7 @@ Reset the internal state: reset();";
/// <inheritdoc/> /// <inheritdoc/>
public override void Process(BatchState batchState) public override void Process(BatchState batchState)
{ {
Remover remover = new(); var remover = new Remover();
remover.PopulateExclusionsFromList(Arguments); remover.PopulateExclusionsFromList(Arguments);
remover.ApplyRemovals(batchState.DatFile); remover.ApplyRemovals(batchState.DatFile);
} }
@@ -802,10 +802,11 @@ Reset the internal state: reset();";
return (false, message); return (false, message);
} }
DatHeaderField field = Arguments[0].AsDatHeaderField(); // Read in the individual arguments
(string? type, string? key) = FilterParser.ParseFilterId(Arguments[0]);
// If we had an invalid input, log and continue // If we had an invalid input, log and continue
if (field == DatHeaderField.NULL) if ((type == null || !string.Equals(type, Models.Metadata.MetadataFile.HeaderKey, StringComparison.OrdinalIgnoreCase)) && key == null)
{ {
string message = $"{Arguments[0]} was an invalid field name"; string message = $"{Arguments[0]} was an invalid field name";
return (false, message); return (false, message);