Use DictionaryBase for removal

This commit is contained in:
Matt Nadareski
2024-03-05 01:42:42 -05:00
parent 8f594f09a6
commit 539e4367e0
48 changed files with 1044 additions and 813 deletions

View File

@@ -4,6 +4,7 @@ using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using SabreTools.Core;
using SabreTools.Core.Tools;
using SabreTools.Filter;
namespace SabreTools.DatItems
{
@@ -538,5 +539,82 @@ namespace SabreTools.DatItems
}
#endregion
#region Manipulation
/// <summary>
/// Remove a field from the Machine
/// </summary>
/// <param name="machineField">Machine field to remove</param>
/// <returns>True if the removal was successful, false otherwise</returns>
public bool RemoveField(MachineField machineField)
{
// Get the correct internal field name
string? fieldName = machineField switch
{
MachineField.Board => Models.Metadata.Machine.BoardKey,
MachineField.Buttons => Models.Metadata.Machine.ButtonsKey,
MachineField.Category => Models.Metadata.Machine.CategoryKey,
MachineField.CloneOf => Models.Metadata.Machine.CloneOfKey,
MachineField.CloneOfID => Models.Metadata.Machine.CloneOfIdKey,
MachineField.Comment => Models.Metadata.Machine.CommentKey,
MachineField.Control => Models.Metadata.Machine.ControlKey,
MachineField.Country => Models.Metadata.Machine.CountryKey,
//MachineField.CRC => Models.Metadata.Machine.CRCKey,
MachineField.Description => Models.Metadata.Machine.DescriptionKey,
//MachineField.Developer => Models.Metadata.Machine.DeveloperKey,
MachineField.DisplayCount => Models.Metadata.Machine.DisplayCountKey,
MachineField.DisplayType => Models.Metadata.Machine.DisplayTypeKey,
//MachineField.Enabled => Models.Metadata.Machine.EnabledKey,
MachineField.GenMSXID => Models.Metadata.Machine.GenMSXIDKey,
//MachineField.Genre => Models.Metadata.Machine.GenreKey,
MachineField.History => Models.Metadata.Machine.HistoryKey,
MachineField.ID => Models.Metadata.Machine.IdKey,
MachineField.Manufacturer => Models.Metadata.Machine.ManufacturerKey,
MachineField.Name => Models.Metadata.Machine.NameKey,
MachineField.Players => Models.Metadata.Machine.PlayersKey,
MachineField.Publisher => Models.Metadata.Machine.PublisherKey,
//MachineField.Ratings => Models.Metadata.Machine.RatingsKey,
MachineField.RebuildTo => Models.Metadata.Machine.RebuildToKey,
//MachineField.RelatedTo => Models.Metadata.Machine.RelatedToKey,
MachineField.RomOf => Models.Metadata.Machine.RomOfKey,
MachineField.Rotation => Models.Metadata.Machine.RotationKey,
MachineField.Runnable => Models.Metadata.Machine.RunnableKey,
MachineField.SampleOf => Models.Metadata.Machine.SampleOfKey,
//MachineField.Score => Models.Metadata.Machine.ScoreKey,
MachineField.SourceFile => Models.Metadata.Machine.SourceFileKey,
MachineField.Status => Models.Metadata.Machine.StatusKey,
//MachineField.Subgenre => Models.Metadata.Machine.SubgenreKey,
MachineField.Supported => Models.Metadata.Machine.SupportedKey,
MachineField.System => Models.Metadata.Machine.SystemKey,
//MachineField.TitleID => Models.Metadata.Machine.TitleIDKey,
//MachineField.Type => Models.Metadata.Machine.TypeKey,
MachineField.Year => Models.Metadata.Machine.YearKey,
_ => null,
};
// A null value means special handling is needed
if (fieldName == null)
{
switch (machineField)
{
case MachineField.CRC: Crc = null; return true;
case MachineField.Developer: Developer = null; return true;
case MachineField.Enabled: Enabled = null; return true;
case MachineField.Genre: Genre = null; return true;
case MachineField.Ratings: Ratings = null; return true;
case MachineField.RelatedTo: RelatedTo = null; return true;
case MachineField.Score: Score = null; return true;
case MachineField.Subgenre: Subgenre = null; return true;
case MachineField.TitleID: TitleID = null; return true;
case MachineField.Type: MachineType = MachineType.None; return true;
}
}
// Remove the field and return
return FieldManipulator.RemoveField(_machine, fieldName);
}
#endregion
}
}