mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Remove DatHeaderField enum
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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)]
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user