Standardize some model access

This commit is contained in:
Matt Nadareski
2024-07-15 12:48:26 -04:00
parent 81c32ef08f
commit 651f771ffd
12 changed files with 479 additions and 333 deletions

View File

@@ -784,13 +784,14 @@ CREATE TABLE IF NOT EXISTS dat (
/// <param name="dbc">Database connection to use</param>
internal void AddDatToDatabase(Rom dat, SqliteConnection dbc)
{
// Get the dat full path
// Get the machine
var machine = dat.GetFieldValue<Machine>(DatItem.MachineKey);
string fullpath = Path.Combine(_dats!,
(machine!.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey) == "dats"
? string.Empty
: machine!.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey))!
, dat.GetName()!);
string? machineName = machine?.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey);
if (machine == null || machineName == null)
return;
// Get the dat full path
string fullpath = Path.Combine(_dats!, machineName == "dats" ? string.Empty : machineName, dat.GetName()!);
// Parse the Dat if possible
logger.User($"Adding from '{dat.GetName()}'");

View File

@@ -135,8 +135,9 @@ namespace SabreTools.DatFiles
#region Common
// Handle Machine fields
if (machineFieldNames.Any() && datItem.GetFieldValue<Machine>(DatItem.MachineKey) != null)
RemoveFields(datItem.GetFieldValue<Machine>(DatItem.MachineKey), machineFieldNames);
var machine = datItem.GetFieldValue<Machine>(DatItem.MachineKey);
if (machineFieldNames.Any() && machine != null)
RemoveFields(machine, machineFieldNames);
// If there are no field names, return
if (itemFieldNames == null || !itemFieldNames.Any())
@@ -195,10 +196,8 @@ namespace SabreTools.DatFiles
/// <param name="adjuster">Adjuster to remove fields from</param>
private static void RemoveFields(Adjuster adjuster, Dictionary<string, List<string>> itemFieldNames)
{
if (!adjuster.ConditionsSpecified)
return;
foreach (Condition subCondition in adjuster.GetFieldValue<Condition[]?>(Models.Metadata.Adjuster.ConditionKey)!)
var conditions = adjuster.GetFieldValue<Condition[]?>(Models.Metadata.Adjuster.ConditionKey) ?? [];
foreach (Condition subCondition in conditions)
{
RemoveFields(subCondition, [], itemFieldNames);
}
@@ -210,28 +209,22 @@ namespace SabreTools.DatFiles
/// <param name="configuration">Configuration to remove fields from</param>
private static void RemoveFields(Configuration configuration, Dictionary<string, List<string>> itemFieldNames)
{
if (configuration.ConditionsSpecified)
var conditions = configuration.GetFieldValue<Condition[]?>(Models.Metadata.Configuration.ConditionKey) ?? [];
foreach (Condition subCondition in conditions)
{
foreach (Condition subCondition in configuration.GetFieldValue<Condition[]?>(Models.Metadata.Configuration.ConditionKey)!)
{
RemoveFields(subCondition, [], itemFieldNames);
}
RemoveFields(subCondition, [], itemFieldNames);
}
if (configuration.LocationsSpecified)
var locations = configuration.GetFieldValue<ConfLocation[]?>(Models.Metadata.Configuration.ConfLocationKey) ?? [];
foreach (ConfLocation subLocation in locations)
{
foreach (ConfLocation subLocation in configuration.GetFieldValue<ConfLocation[]?>(Models.Metadata.Configuration.ConfLocationKey)!)
{
RemoveFields(subLocation, [], itemFieldNames);
}
RemoveFields(subLocation, [], itemFieldNames);
}
if (configuration.SettingsSpecified)
var settings = configuration.GetFieldValue<ConfSetting[]?>(Models.Metadata.Configuration.ConfSettingKey) ?? [];
foreach (ConfSetting subSetting in settings)
{
foreach (ConfSetting subSetting in configuration.GetFieldValue<ConfSetting[]?>(Models.Metadata.Configuration.ConfSettingKey)!)
{
RemoveFields(subSetting as DatItem, [], itemFieldNames);
}
RemoveFields(subSetting as DatItem, [], itemFieldNames);
}
}
@@ -241,12 +234,10 @@ namespace SabreTools.DatFiles
/// <param name="confsetting">ConfSetting to remove fields from</param>
private static void RemoveFields(ConfSetting confsetting, Dictionary<string, List<string>> itemFieldNames)
{
if (confsetting.ConditionsSpecified)
var conditions = confsetting.GetFieldValue<Condition[]?>(Models.Metadata.ConfSetting.ConditionKey) ?? [];
foreach (Condition subCondition in conditions)
{
foreach (Condition subCondition in confsetting.GetFieldValue<Condition[]?>(Models.Metadata.ConfSetting.ConditionKey)!)
{
RemoveFields(subCondition, [], itemFieldNames);
}
RemoveFields(subCondition, [], itemFieldNames);
}
}
@@ -256,20 +247,16 @@ namespace SabreTools.DatFiles
/// <param name="device">Device to remove fields from</param>
private static void RemoveFields(Device device, Dictionary<string, List<string>> itemFieldNames)
{
if (device.ExtensionsSpecified)
var extensions = device.GetFieldValue<Extension[]?>(Models.Metadata.Device.ExtensionKey) ?? [];
foreach (Extension subExtension in extensions)
{
foreach (Extension subExtension in device.GetFieldValue<Extension[]?>(Models.Metadata.Device.ExtensionKey)!)
{
RemoveFields(subExtension, [], itemFieldNames);
}
RemoveFields(subExtension, [], itemFieldNames);
}
if (device.InstancesSpecified)
var instances = device.GetFieldValue<Instance[]?>(Models.Metadata.Device.InstanceKey) ?? [];
foreach (Instance subInstance in instances)
{
foreach (Instance subInstance in device.GetFieldValue<Instance[]?>(Models.Metadata.Device.InstanceKey)!)
{
RemoveFields(subInstance, [], itemFieldNames);
}
RemoveFields(subInstance, [], itemFieldNames);
}
}
@@ -279,32 +266,27 @@ namespace SabreTools.DatFiles
/// <param name="dipSwitch">DipSwitch to remove fields from</param>
private static void RemoveFields(DipSwitch dipSwitch, Dictionary<string, List<string>> itemFieldNames)
{
if (dipSwitch.ConditionsSpecified)
var conditions = dipSwitch.GetFieldValue<Condition[]?>(Models.Metadata.DipSwitch.ConditionKey) ?? [];
foreach (Condition subCondition in conditions)
{
foreach (Condition subCondition in dipSwitch.GetFieldValue<Condition[]?>(Models.Metadata.DipSwitch.ConditionKey)!)
{
RemoveFields(subCondition, [], itemFieldNames);
}
RemoveFields(subCondition, [], itemFieldNames);
}
if (dipSwitch.LocationsSpecified)
var locations = dipSwitch.GetFieldValue<DipLocation[]?>(Models.Metadata.DipSwitch.DipLocationKey) ?? [];
foreach (DipLocation subLocation in locations)
{
foreach (DipLocation subLocation in dipSwitch.GetFieldValue<DipLocation[]?>(Models.Metadata.DipSwitch.DipLocationKey)!)
{
RemoveFields(subLocation, [], itemFieldNames);
}
RemoveFields(subLocation, [], itemFieldNames);
}
if (dipSwitch.ValuesSpecified)
var dipValues = dipSwitch.GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey) ?? [];
foreach (DipValue subValue in dipValues)
{
foreach (DipValue subValue in dipSwitch.GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey)!)
{
RemoveFields(subValue as DatItem, [], itemFieldNames);
}
RemoveFields(subValue as DatItem, [], itemFieldNames);
}
if (dipSwitch.PartSpecified)
RemoveFields(dipSwitch.GetFieldValue<Part?>(DipSwitch.PartKey)! as DatItem, [], itemFieldNames);
var part = dipSwitch.GetFieldValue<Part?>(DipSwitch.PartKey);
if (part != null)
RemoveFields(part as DatItem, [], itemFieldNames);
}
/// <summary>
@@ -313,12 +295,10 @@ namespace SabreTools.DatFiles
/// <param name="dipValue">DipValue to remove fields from</param>
private static void RemoveFields(DipValue dipValue, Dictionary<string, List<string>> itemFieldNames)
{
if (dipValue.ConditionsSpecified)
var conditions = dipValue.GetFieldValue<Condition[]?>(Models.Metadata.DipValue.ConditionKey) ?? [];
foreach (Condition subCondition in conditions)
{
foreach (Condition subCondition in dipValue.GetFieldValue<Condition[]?>(Models.Metadata.DipValue.ConditionKey)!)
{
RemoveFields(subCondition, [], itemFieldNames);
}
RemoveFields(subCondition, [], itemFieldNames);
}
}
@@ -328,11 +308,13 @@ namespace SabreTools.DatFiles
/// <param name="disk">Disk to remove fields from</param>
private static void RemoveFields(Disk disk, Dictionary<string, List<string>> itemFieldNames)
{
if (disk.DiskAreaSpecified)
RemoveFields(disk.GetFieldValue<DiskArea?>(Disk.DiskAreaKey)! as DatItem, [], itemFieldNames);
var diskArea = disk.GetFieldValue<DiskArea?>(Disk.DiskAreaKey);
if (diskArea != null)
RemoveFields(diskArea as DatItem, [], itemFieldNames);
if (disk.PartSpecified)
RemoveFields(disk.GetFieldValue<Part?>(Disk.PartKey)! as DatItem, [], itemFieldNames);
var part = disk.GetFieldValue<Part?>(Disk.PartKey);
if (part != null)
RemoveFields(part as DatItem, [], itemFieldNames);
}
/// <summary>
@@ -341,12 +323,10 @@ namespace SabreTools.DatFiles
/// <param name="input">Input to remove fields from</param>
private static void RemoveFields(Input input, Dictionary<string, List<string>> itemFieldNames)
{
if (input.ControlsSpecified)
var controls = input.GetFieldValue<Control[]?>(Models.Metadata.Input.ControlKey) ?? [];
foreach (Control subControl in controls)
{
foreach (Control subControl in input.GetFieldValue<Control[]?>(Models.Metadata.Input.ControlKey)!)
{
RemoveFields(subControl, [], itemFieldNames);
}
RemoveFields(subControl, [], itemFieldNames);
}
}
@@ -356,12 +336,10 @@ namespace SabreTools.DatFiles
/// <param name="part">Part to remove fields from</param>
private static void RemoveFields(Part part, Dictionary<string, List<string>> itemFieldNames)
{
if (part.FeaturesSpecified)
var features = part.GetFieldValue<PartFeature[]?>(Models.Metadata.Part.FeatureKey) ?? [];
foreach (PartFeature subPartFeature in features)
{
foreach (PartFeature subPartFeature in part.GetFieldValue<PartFeature[]?>(Models.Metadata.Part.FeatureKey)!)
{
RemoveFields(subPartFeature, [], itemFieldNames);
}
RemoveFields(subPartFeature, [], itemFieldNames);
}
}
@@ -371,12 +349,10 @@ namespace SabreTools.DatFiles
/// <param name="port">Port to remove fields from</param>
private static void RemoveFields(Port port, Dictionary<string, List<string>> itemFieldNames)
{
if (port.AnalogsSpecified)
var analogs = port.GetFieldValue<Analog[]?>(Models.Metadata.Port.AnalogKey) ?? [];
foreach (Analog subAnalog in analogs)
{
foreach (Analog subAnalog in port.GetFieldValue<Analog[]?>(Models.Metadata.Port.AnalogKey)!)
{
RemoveFields(subAnalog, [], itemFieldNames);
}
RemoveFields(subAnalog, [], itemFieldNames);
}
}
@@ -386,11 +362,13 @@ namespace SabreTools.DatFiles
/// <param name="rom">Rom to remove fields from</param>
private static void RemoveFields(Rom rom, Dictionary<string, List<string>> itemFieldNames)
{
if (rom.DataAreaSpecified)
RemoveFields(rom.GetFieldValue<DataArea?>(Rom.DataAreaKey)!, [], itemFieldNames);
var dataArea = rom.GetFieldValue<DataArea?>(Rom.DataAreaKey);
if (dataArea != null)
RemoveFields(dataArea as DatItem, [], itemFieldNames);
if (rom.PartSpecified)
RemoveFields(rom.GetFieldValue<Part?>(Rom.PartKey)! as DatItem, [], itemFieldNames);
var part = rom.GetFieldValue<Part?>(Rom.PartKey);
if (part != null)
RemoveFields(part as DatItem, [], itemFieldNames);
}
/// <summary>
@@ -399,12 +377,10 @@ namespace SabreTools.DatFiles
/// <param name="slot">Slot to remove fields from</param>
private static void RemoveFields(Slot slot, Dictionary<string, List<string>> itemFieldNames)
{
if (slot.SlotOptionsSpecified)
var slotOptions = slot.GetFieldValue<SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey) ?? [];
foreach (SlotOption subSlotOption in slotOptions)
{
foreach (SlotOption subSlotOption in slot.GetFieldValue<SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey)!)
{
RemoveFields(subSlotOption, [], itemFieldNames);
}
RemoveFields(subSlotOption, [], itemFieldNames);
}
}

View File

@@ -119,7 +119,8 @@ namespace SabreTools.DatFiles
/// <param name="datHeader">DatHeader to get the values from</param>
public static DatFile Create(DatHeader datHeader)
{
DatFile datFile = Create(datHeader.GetFieldValue<DatFormat>(DatHeader.DatFormatKey));
DatFormat format = datHeader.GetFieldValue<DatFormat>(DatHeader.DatFormatKey);
DatFile datFile = Create(format);
datFile.Header = (DatHeader)datHeader.Clone();
return datFile;
}
@@ -131,24 +132,29 @@ namespace SabreTools.DatFiles
/// <param name="bare">True if the date should be omitted from name and description, false otherwise</param>
public void FillHeaderFromPath(string path, bool bare)
{
// Get the header strings
string? name = Header.GetStringFieldValue(Models.Metadata.Header.NameKey);
string? description = Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey);
string? date = Header.GetStringFieldValue(Models.Metadata.Header.DateKey);
// If the description is defined but not the name, set the name from the description
if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.NameKey)) && !string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)))
if (string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(description))
{
Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey));
Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, description);
}
// If the name is defined but not the description, set the description from the name
else if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)))
else if (!string.IsNullOrEmpty(name) && string.IsNullOrEmpty(description))
{
Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + (bare ? string.Empty : $" ({Header.GetStringFieldValue(Models.Metadata.Header.DateKey)})"));
Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, name + (bare ? string.Empty : $" ({date})"));
}
// If neither the name or description are defined, set them from the automatic values
else if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)))
else if (string.IsNullOrEmpty(name) && string.IsNullOrEmpty(description))
{
string[] splitpath = path.TrimEnd(Path.DirectorySeparatorChar).Split(Path.DirectorySeparatorChar);
Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, splitpath.Last());
Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + (bare ? string.Empty : $" ({Header.GetStringFieldValue(Models.Metadata.Header.DateKey)})"));
Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, splitpath.Last() + (bare ? string.Empty : $" ({date})"));
}
}
@@ -245,14 +251,17 @@ namespace SabreTools.DatFiles
{
// Get machine for the item
var machine = item.GetFieldValue<Machine>(DatItem.MachineKey);
if (machine == null)
return string.Empty;
// Initialize strings
string? type = item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey);
string fix,
game = item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty,
manufacturer = machine!.GetStringFieldValue(Models.Metadata.Machine.ManufacturerKey) ?? string.Empty,
publisher = machine!.GetStringFieldValue(Models.Metadata.Machine.PublisherKey) ?? string.Empty,
category = machine!.GetStringFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty,
name = item.GetName() ?? item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue<ItemType>().AsStringValue() ?? string.Empty,
game = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty,
manufacturer = machine.GetStringFieldValue(Models.Metadata.Machine.ManufacturerKey) ?? string.Empty,
publisher = machine.GetStringFieldValue(Models.Metadata.Machine.PublisherKey) ?? string.Empty,
category = machine.GetStringFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty,
name = item.GetName() ?? type.AsEnumValue<ItemType>().AsStringValue() ?? string.Empty,
crc = string.Empty,
md5 = string.Empty,
sha1 = string.Empty,
@@ -262,13 +271,22 @@ namespace SabreTools.DatFiles
size = string.Empty,
spamsum = string.Empty;
// Check for quotes
bool? quotes = Header.GetBoolFieldValue(DatHeader.QuotesKey);
// If we have a prefix
if (prefix)
fix = Header.GetStringFieldValue(DatHeader.PrefixKey) + (Header.GetBoolFieldValue(DatHeader.QuotesKey) == true ? "\"" : string.Empty);
{
string? prefixString = Header.GetStringFieldValue(DatHeader.PrefixKey);
fix = prefixString + (quotes == true ? "\"" : string.Empty);
}
// If we have a postfix
else
fix = (Header.GetBoolFieldValue(DatHeader.QuotesKey) == true ? "\"" : string.Empty) + Header.GetStringFieldValue(DatHeader.PostfixKey);
{
string? postfixString = Header.GetStringFieldValue(DatHeader.PostfixKey);
fix = (quotes == true ? "\"" : string.Empty) + postfixString;
}
// Ensure we have the proper values for replacement
if (item is Disk disk)
@@ -325,14 +343,17 @@ namespace SabreTools.DatFiles
{
// Get machine for the item
var machine = ItemsDB.GetMachineForItem(item.Item1);
if (machine.Item2 == null)
return string.Empty;
// Initialize strings
string? type = item.Item2.GetStringFieldValue(Models.Metadata.DatItem.TypeKey);
string fix,
game = machine.Item2!.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty,
manufacturer = machine.Item2!.GetStringFieldValue(Models.Metadata.Machine.ManufacturerKey) ?? string.Empty,
publisher = machine.Item2!.GetStringFieldValue(Models.Metadata.Machine.PublisherKey) ?? string.Empty,
category = machine.Item2!.GetStringFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty,
name = item.Item2.GetName() ?? item.Item2.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue<ItemType>().AsStringValue() ?? string.Empty,
game = machine.Item2.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty,
manufacturer = machine.Item2.GetStringFieldValue(Models.Metadata.Machine.ManufacturerKey) ?? string.Empty,
publisher = machine.Item2.GetStringFieldValue(Models.Metadata.Machine.PublisherKey) ?? string.Empty,
category = machine.Item2.GetStringFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty,
name = item.Item2.GetName() ?? type.AsEnumValue<ItemType>().AsStringValue() ?? string.Empty,
crc = string.Empty,
md5 = string.Empty,
sha1 = string.Empty,
@@ -342,13 +363,22 @@ namespace SabreTools.DatFiles
size = string.Empty,
spamsum = string.Empty;
// Check for quotes
bool? quotes = Header.GetBoolFieldValue(DatHeader.QuotesKey);
// If we have a prefix
if (prefix)
fix = Header.GetStringFieldValue(DatHeader.PrefixKey) + (Header.GetBoolFieldValue(DatHeader.QuotesKey) == true ? "\"" : string.Empty);
{
string? prefixString = Header.GetStringFieldValue(DatHeader.PrefixKey);
fix = prefixString + (quotes == true ? "\"" : string.Empty);
}
// If we have a postfix
else
fix = (Header.GetBoolFieldValue(DatHeader.QuotesKey) == true ? "\"" : string.Empty) + Header.GetStringFieldValue(DatHeader.PostfixKey);
{
string? postfixString = Header.GetStringFieldValue(DatHeader.PostfixKey);
fix = (quotes == true ? "\"" : string.Empty) + postfixString;
}
// Ensure we have the proper values for replacement
if (item.Item2 is Disk disk)
@@ -411,24 +441,30 @@ namespace SabreTools.DatFiles
if (forceRomName)
Header.SetFieldValue<bool>(DatHeader.UseRomNameKey, true);
// Get the machine
var machine = item.GetFieldValue<Machine>(DatItem.MachineKey);
if (machine == null)
return;
// Get the name to update
string? name = (Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true
? item.GetName()
: item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)) ?? string.Empty;
: machine.GetStringFieldValue(Models.Metadata.Machine.NameKey)) ?? string.Empty;
// Create the proper Prefix and Postfix
string pre = CreatePrefixPostfix(item, true);
string post = CreatePrefixPostfix(item, false);
// If we're in Depot mode, take care of that instead
if (Header.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)?.IsActive == true)
var outputDepot = Header.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey);
if (outputDepot?.IsActive == true)
{
if (item is Disk disk)
{
// We can only write out if there's a SHA-1
if (!string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key)))
{
name = Utilities.GetDepotPath(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key), Header.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)!.Depth)?.Replace('\\', '/');
name = Utilities.GetDepotPath(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key), outputDepot.Depth)?.Replace('\\', '/');
item.SetName($"{pre}{name}{post}");
}
}
@@ -437,7 +473,7 @@ namespace SabreTools.DatFiles
// We can only write out if there's a SHA-1
if (!string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key)))
{
name = Utilities.GetDepotPath(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key), Header.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)!.Depth)?.Replace('\\', '/');
name = Utilities.GetDepotPath(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key), outputDepot.Depth)?.Replace('\\', '/');
item.SetName($"{pre}{name}{post}");
}
}
@@ -446,7 +482,7 @@ namespace SabreTools.DatFiles
// We can only write out if there's a SHA-1
if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)))
{
name = Utilities.GetDepotPath(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key), Header.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)!.Depth)?.Replace('\\', '/');
name = Utilities.GetDepotPath(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key), outputDepot.Depth)?.Replace('\\', '/');
item.SetName($"{pre}{name}{post}");
}
}
@@ -454,31 +490,34 @@ namespace SabreTools.DatFiles
return;
}
if (!string.IsNullOrEmpty(Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey)) || Header.GetBoolFieldValue(DatHeader.RemoveExtensionKey) == true)
string? replaceExtension = Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey);
bool? removeExtension = Header.GetBoolFieldValue(DatHeader.RemoveExtensionKey);
if (!string.IsNullOrEmpty(replaceExtension) || removeExtension == true)
{
if (Header.GetBoolFieldValue(DatHeader.RemoveExtensionKey) == true)
if (removeExtension == true)
Header.SetFieldValue<string?>(DatHeader.ReplaceExtensionKey, string.Empty);
string? dir = Path.GetDirectoryName(name);
if (dir != null)
{
dir = dir.TrimStart(Path.DirectorySeparatorChar);
name = Path.Combine(dir, Path.GetFileNameWithoutExtension(name) + Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey));
name = Path.Combine(dir, Path.GetFileNameWithoutExtension(name) + replaceExtension);
}
}
if (!string.IsNullOrEmpty(Header.GetStringFieldValue(DatHeader.AddExtensionKey)))
name += Header.GetStringFieldValue(DatHeader.AddExtensionKey);
string? addExtension = Header.GetStringFieldValue(DatHeader.AddExtensionKey);
if (!string.IsNullOrEmpty(addExtension))
name += addExtension;
if (Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true && Header.GetBoolFieldValue(DatHeader.GameNameKey) == true)
name = Path.Combine(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, name);
name = Path.Combine(machine.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, name);
// Now assign back the formatted name
name = $"{pre}{name}{post}";
if (Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true)
item.SetName(name);
else if (item.GetFieldValue<Machine>(DatItem.MachineKey) != null)
item.GetFieldValue<Machine>(DatItem.MachineKey)!.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, name);
else
machine.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, name);
// Restore all relevant values
if (forceRemoveQuotes)
@@ -517,14 +556,15 @@ namespace SabreTools.DatFiles
string post = CreatePrefixPostfixDB(item, false);
// If we're in Depot mode, take care of that instead
if (Header.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)?.IsActive == true)
var outputDepot = Header.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey);
if (outputDepot?.IsActive == true)
{
if (item.Item2 is Disk disk)
{
// We can only write out if there's a SHA-1
if (!string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key)))
{
name = Utilities.GetDepotPath(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key), Header.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)!.Depth)?.Replace('\\', '/');
name = Utilities.GetDepotPath(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key), outputDepot.Depth)?.Replace('\\', '/');
item.Item2.SetName($"{pre}{name}{post}");
}
}
@@ -533,7 +573,7 @@ namespace SabreTools.DatFiles
// We can only write out if there's a SHA-1
if (!string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key)))
{
name = Utilities.GetDepotPath(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key), Header.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)!.Depth)?.Replace('\\', '/');
name = Utilities.GetDepotPath(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key), outputDepot.Depth)?.Replace('\\', '/');
item.Item2.SetName($"{pre}{name}{post}");
}
}
@@ -542,7 +582,7 @@ namespace SabreTools.DatFiles
// We can only write out if there's a SHA-1
if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)))
{
name = Utilities.GetDepotPath(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key), Header.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)!.Depth)?.Replace('\\', '/');
name = Utilities.GetDepotPath(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key), outputDepot.Depth)?.Replace('\\', '/');
item.Item2.SetName($"{pre}{name}{post}");
}
}
@@ -550,21 +590,24 @@ namespace SabreTools.DatFiles
return;
}
if (!string.IsNullOrEmpty(Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey)) || Header.GetBoolFieldValue(DatHeader.RemoveExtensionKey) == true)
string? replaceExtension = Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey);
bool? removeExtension = Header.GetBoolFieldValue(DatHeader.RemoveExtensionKey);
if (!string.IsNullOrEmpty(replaceExtension) || removeExtension == true)
{
if (Header.GetBoolFieldValue(DatHeader.RemoveExtensionKey) == true)
if (removeExtension == true)
Header.SetFieldValue<string?>(DatHeader.ReplaceExtensionKey, string.Empty);
string? dir = Path.GetDirectoryName(name);
if (dir != null)
{
dir = dir.TrimStart(Path.DirectorySeparatorChar);
name = Path.Combine(dir, Path.GetFileNameWithoutExtension(name) + Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey));
name = Path.Combine(dir, Path.GetFileNameWithoutExtension(name) + replaceExtension);
}
}
if (!string.IsNullOrEmpty(Header.GetStringFieldValue(DatHeader.AddExtensionKey)))
name += Header.GetStringFieldValue(DatHeader.AddExtensionKey);
string? addExtension = Header.GetStringFieldValue(DatHeader.AddExtensionKey);
if (!string.IsNullOrEmpty(addExtension))
name += addExtension;
if (Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true && Header.GetBoolFieldValue(DatHeader.GameNameKey) == true)
name = Path.Combine(machine.Item2!.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, name);
@@ -595,20 +638,33 @@ namespace SabreTools.DatFiles
if (item is not Rom rom)
return item;
// Get machine for the item
var machine = item.GetFieldValue<Machine>(DatItem.MachineKey);
if (machine == null)
return item;
// If the Rom has "null" characteristics, ensure all fields
if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null && rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null")
if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null
&& rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null")
{
logger.Verbose($"Empty folder found: {item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)}");
logger.Verbose($"Empty folder found: {machine.GetStringFieldValue(Models.Metadata.Machine.NameKey)}");
rom.SetName(rom.GetName() == "null" ? "-" : rom.GetName());
rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString());
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null" ? Constants.CRCZero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? Constants.MD5Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) == "null" ? Constants.SHA1Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) == "null" ? Constants.SHA256Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key) == "null" ? Constants.SHA384Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key) == "null" ? Constants.SHA512Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey) == "null" ? Constants.SpamSumZero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey,
rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null" ? Constants.CRCZero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key,
rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? Constants.MD5Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key,
rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) == "null" ? Constants.SHA1Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key,
rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) == "null" ? Constants.SHA256Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key,
rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key) == "null" ? Constants.SHA384Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key,
rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key) == "null" ? Constants.SHA512Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey,
rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey) == "null" ? Constants.SpamSumZero : null);
}
return rom;
@@ -627,21 +683,32 @@ namespace SabreTools.DatFiles
// Get machine for the item
var machine = ItemsDB.GetMachineForItem(item.Item1);
var machineObj = machine.Item2;
if (machineObj == null)
return item;
// If the Rom has "null" characteristics, ensure all fields
if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null && rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null")
if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null
&& rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null")
{
logger.Verbose($"Empty folder found: {machine.Item2!.GetStringFieldValue(Models.Metadata.Machine.NameKey)}");
logger.Verbose($"Empty folder found: {machineObj.GetStringFieldValue(Models.Metadata.Machine.NameKey)}");
rom.SetName(rom.GetName() == "null" ? "-" : rom.GetName());
rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString());
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null" ? Constants.CRCZero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? Constants.MD5Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) == "null" ? Constants.SHA1Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) == "null" ? Constants.SHA256Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key) == "null" ? Constants.SHA384Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key) == "null" ? Constants.SHA512Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey) == "null" ? Constants.SpamSumZero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey,
rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null" ? Constants.CRCZero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key,
rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? Constants.MD5Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key,
rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) == "null" ? Constants.SHA1Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key,
rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) == "null" ? Constants.SHA256Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key,
rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key) == "null" ? Constants.SHA384Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key,
rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key) == "null" ? Constants.SHA512Zero : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey,
rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey) == "null" ? Constants.SpamSumZero : null);
}
return (item.Item1, rom);
@@ -676,7 +743,8 @@ namespace SabreTools.DatFiles
foreach (DatItem datItem in datItems)
{
if (GetSupportedTypes().Contains(datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue<ItemType>()))
ItemType itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue<ItemType>();
if (GetSupportedTypes().Contains(itemType))
return true;
}
@@ -697,7 +765,8 @@ namespace SabreTools.DatFiles
foreach ((long, DatItem) datItem in datItems)
{
if (GetSupportedTypes().Contains(datItem.Item2.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue<ItemType>()))
ItemType itemType = datItem.Item2.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue<ItemType>();
if (GetSupportedTypes().Contains(itemType))
return true;
}
@@ -749,10 +818,11 @@ namespace SabreTools.DatFiles
}
// If we have an item type not in the list of supported values
string datFormat = Header?.GetFieldValue<DatFormat>(DatHeader.DatFormatKey).ToString() ?? "Unknown Format";
if (!GetSupportedTypes().Contains(datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue<ItemType>()))
{
string itemString = JsonConvert.SerializeObject(datItem, Formatting.None);
logger?.Verbose($"Item '{itemString}' was skipped because it was not supported in {Header?.GetFieldValue<DatFormat>(DatHeader.DatFormatKey)}");
logger?.Verbose($"Item '{itemString}' was skipped because it was not supported in {datFormat}");
return true;
}
@@ -762,9 +832,9 @@ namespace SabreTools.DatFiles
{
string itemString = JsonConvert.SerializeObject(datItem, Formatting.None);
#if NET20 || NET35
logger?.Verbose($"Item '{itemString}' was skipped because it was missing required fields for {Header?.GetFieldValue<DatFormat>(DatHeader.DatFormatKey)}: {string.Join(", ", [.. missingFields])}");
logger?.Verbose($"Item '{itemString}' was skipped because it was missing required fields for {datFormat}: {string.Join(", ", [.. missingFields])}");
#else
logger?.Verbose($"Item '{itemString}' was skipped because it was missing required fields for {Header?.GetFieldValue<DatFormat>(DatHeader.DatFormatKey)}: {string.Join(", ", missingFields)}");
logger?.Verbose($"Item '{itemString}' was skipped because it was missing required fields for {datFormat}: {string.Join(", ", missingFields)}");
#endif
return true;
}
@@ -817,10 +887,11 @@ namespace SabreTools.DatFiles
}
// If we have an item type not in the list of supported values
string datFormat = Header?.GetFieldValue<DatFormat>(DatHeader.DatFormatKey).ToString() ?? "Unknown Format";
if (!GetSupportedTypes().Contains(datItem.Item2.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue<ItemType>()))
{
string itemString = JsonConvert.SerializeObject(datItem, Formatting.None);
logger?.Verbose($"Item '{itemString}' was skipped because it was not supported in {Header?.GetFieldValue<DatFormat>(DatHeader.DatFormatKey)}");
logger?.Verbose($"Item '{itemString}' was skipped because it was not supported in {datFormat}");
return true;
}
@@ -830,9 +901,9 @@ namespace SabreTools.DatFiles
{
string itemString = JsonConvert.SerializeObject(datItem, Formatting.None);
#if NET20 || NET35
logger?.Verbose($"Item '{itemString}' was skipped because it was missing required fields for {Header?.GetFieldValue<DatFormat>(DatHeader.DatFormatKey)}: {string.Join(", ", [.. missingFields])}");
logger?.Verbose($"Item '{itemString}' was skipped because it was missing required fields for {datFormat}: {string.Join(", ", [.. missingFields])}");
#else
logger?.Verbose($"Item '{itemString}' was skipped because it was missing required fields for {Header?.GetFieldValue<DatFormat>(DatHeader.DatFormatKey)}: {string.Join(", ", missingFields)}");
logger?.Verbose($"Item '{itemString}' was skipped because it was missing required fields for {datFormat}: {string.Join(", ", missingFields)}");
#endif
return true;
}

View File

@@ -177,24 +177,42 @@ namespace SabreTools.DatFiles
public DatHeader CloneStandard()
{
var header = new DatHeader();
header.SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, GetStringFieldValue(Models.Metadata.Header.AuthorKey));
header.SetFieldValue<string?>(Models.Metadata.Header.CategoryKey, GetStringFieldValue(Models.Metadata.Header.CategoryKey));
header.SetFieldValue<string?>(Models.Metadata.Header.CommentKey, GetStringFieldValue(Models.Metadata.Header.CommentKey));
header.SetFieldValue<string?>(Models.Metadata.Header.DateKey, GetStringFieldValue(Models.Metadata.Header.DateKey));
header.SetFieldValue<DatFormat>(DatHeader.DatFormatKey, GetFieldValue<DatFormat>(DatHeader.DatFormatKey));
header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, GetStringFieldValue(Models.Metadata.Header.DescriptionKey));
header.SetFieldValue<string?>(Models.Metadata.Header.EmailKey, GetStringFieldValue(Models.Metadata.Header.EmailKey));
header.SetFieldValue<string?>(DatHeader.FileNameKey, GetStringFieldValue(DatHeader.FileNameKey));
header.SetFieldValue<string?>(Models.Metadata.Header.ForceMergingKey, GetStringFieldValue(Models.Metadata.Header.ForceMergingKey).AsEnumValue<MergingFlag>().AsStringValue());
header.SetFieldValue<string?>(Models.Metadata.Header.ForceNodumpKey, GetStringFieldValue(Models.Metadata.Header.ForceNodumpKey).AsEnumValue<NodumpFlag>().AsStringValue());
header.SetFieldValue<string?>(Models.Metadata.Header.ForcePackingKey, GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>().AsStringValue());
header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, GetStringFieldValue(Models.Metadata.Header.HeaderKey));
header.SetFieldValue<string?>(Models.Metadata.Header.HomepageKey, GetStringFieldValue(Models.Metadata.Header.HomepageKey));
header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, GetStringFieldValue(Models.Metadata.Header.NameKey));
header.SetFieldValue<string?>(Models.Metadata.Header.RootDirKey, GetStringFieldValue(Models.Metadata.Header.RootDirKey));
header.SetFieldValue<string?>(Models.Metadata.Header.TypeKey, GetStringFieldValue(Models.Metadata.Header.TypeKey));
header.SetFieldValue<string?>(Models.Metadata.Header.UrlKey, GetStringFieldValue(Models.Metadata.Header.UrlKey));
header.SetFieldValue<string?>(Models.Metadata.Header.VersionKey, GetStringFieldValue(Models.Metadata.Header.VersionKey));
header.SetFieldValue<string?>(Models.Metadata.Header.AuthorKey,
GetStringFieldValue(Models.Metadata.Header.AuthorKey));
header.SetFieldValue<string?>(Models.Metadata.Header.CategoryKey,
GetStringFieldValue(Models.Metadata.Header.CategoryKey));
header.SetFieldValue<string?>(Models.Metadata.Header.CommentKey,
GetStringFieldValue(Models.Metadata.Header.CommentKey));
header.SetFieldValue<string?>(Models.Metadata.Header.DateKey,
GetStringFieldValue(Models.Metadata.Header.DateKey));
header.SetFieldValue<DatFormat>(DatHeader.DatFormatKey,
GetFieldValue<DatFormat>(DatHeader.DatFormatKey));
header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey,
GetStringFieldValue(Models.Metadata.Header.DescriptionKey));
header.SetFieldValue<string?>(Models.Metadata.Header.EmailKey,
GetStringFieldValue(Models.Metadata.Header.EmailKey));
header.SetFieldValue<string?>(DatHeader.FileNameKey,
GetStringFieldValue(DatHeader.FileNameKey));
header.SetFieldValue<string?>(Models.Metadata.Header.ForceMergingKey,
GetStringFieldValue(Models.Metadata.Header.ForceMergingKey).AsEnumValue<MergingFlag>().AsStringValue());
header.SetFieldValue<string?>(Models.Metadata.Header.ForceNodumpKey,
GetStringFieldValue(Models.Metadata.Header.ForceNodumpKey).AsEnumValue<NodumpFlag>().AsStringValue());
header.SetFieldValue<string?>(Models.Metadata.Header.ForcePackingKey,
GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>().AsStringValue());
header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey,
GetStringFieldValue(Models.Metadata.Header.HeaderKey));
header.SetFieldValue<string?>(Models.Metadata.Header.HomepageKey,
GetStringFieldValue(Models.Metadata.Header.HomepageKey));
header.SetFieldValue<string?>(Models.Metadata.Header.NameKey,
GetStringFieldValue(Models.Metadata.Header.NameKey));
header.SetFieldValue<string?>(Models.Metadata.Header.RootDirKey,
GetStringFieldValue(Models.Metadata.Header.RootDirKey));
header.SetFieldValue<string?>(Models.Metadata.Header.TypeKey,
GetStringFieldValue(Models.Metadata.Header.TypeKey));
header.SetFieldValue<string?>(Models.Metadata.Header.UrlKey,
GetStringFieldValue(Models.Metadata.Header.UrlKey));
header.SetFieldValue<string?>(Models.Metadata.Header.VersionKey,
GetStringFieldValue(Models.Metadata.Header.VersionKey));
return header;
}
@@ -205,17 +223,28 @@ namespace SabreTools.DatFiles
public DatHeader CloneFiltering()
{
var header = new DatHeader();
header.SetFieldValue<string?>(DatHeader.AddExtensionKey, GetStringFieldValue(DatHeader.AddExtensionKey));
header.SetFieldValue<DatFormat>(DatHeader.DatFormatKey, GetFieldValue<DatFormat>(DatHeader.DatFormatKey));
header.SetFieldValue<bool?>(DatHeader.GameNameKey, GetBoolFieldValue(DatHeader.GameNameKey));
header.SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey, GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.Clone() as DepotInformation);
header.SetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey, GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)?.Clone() as DepotInformation);
header.SetFieldValue<string?>(DatHeader.PostfixKey, GetStringFieldValue(DatHeader.PostfixKey));
header.SetFieldValue<string?>(DatHeader.PrefixKey, GetStringFieldValue(DatHeader.PrefixKey));
header.SetFieldValue<bool?>(DatHeader.RemoveExtensionKey, GetBoolFieldValue(DatHeader.RemoveExtensionKey));
header.SetFieldValue<string?>(DatHeader.ReplaceExtensionKey, GetStringFieldValue(DatHeader.ReplaceExtensionKey));
header.SetFieldValue<bool?>(DatHeader.QuotesKey, GetBoolFieldValue(DatHeader.QuotesKey));
header.SetFieldValue<bool?>(DatHeader.UseRomNameKey, GetBoolFieldValue(DatHeader.UseRomNameKey));
header.SetFieldValue<string?>(DatHeader.AddExtensionKey,
GetStringFieldValue(DatHeader.AddExtensionKey));
header.SetFieldValue<DatFormat>(DatHeader.DatFormatKey,
GetFieldValue<DatFormat>(DatHeader.DatFormatKey));
header.SetFieldValue<bool?>(DatHeader.GameNameKey,
GetBoolFieldValue(DatHeader.GameNameKey));
header.SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey,
GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.Clone() as DepotInformation);
header.SetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey,
GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)?.Clone() as DepotInformation);
header.SetFieldValue<string?>(DatHeader.PostfixKey,
GetStringFieldValue(DatHeader.PostfixKey));
header.SetFieldValue<string?>(DatHeader.PrefixKey,
GetStringFieldValue(DatHeader.PrefixKey));
header.SetFieldValue<bool?>(DatHeader.RemoveExtensionKey,
GetBoolFieldValue(DatHeader.RemoveExtensionKey));
header.SetFieldValue<string?>(DatHeader.ReplaceExtensionKey,
GetStringFieldValue(DatHeader.ReplaceExtensionKey));
header.SetFieldValue<bool?>(DatHeader.QuotesKey,
GetBoolFieldValue(DatHeader.QuotesKey));
header.SetFieldValue<bool?>(DatHeader.UseRomNameKey,
GetBoolFieldValue(DatHeader.UseRomNameKey));
return header;
}
@@ -230,77 +259,105 @@ namespace SabreTools.DatFiles
return;
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(DatHeader.FileNameKey)))
SetFieldValue<string?>(DatHeader.FileNameKey, datHeader.GetStringFieldValue(DatHeader.FileNameKey));
SetFieldValue<string?>(DatHeader.FileNameKey,
datHeader.GetStringFieldValue(DatHeader.FileNameKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.NameKey)))
SetFieldValue<string?>(Models.Metadata.Header.NameKey, datHeader.GetStringFieldValue(Models.Metadata.Header.NameKey));
SetFieldValue<string?>(Models.Metadata.Header.NameKey,
datHeader.GetStringFieldValue(Models.Metadata.Header.NameKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)))
SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, datHeader.GetStringFieldValue(Models.Metadata.Header.DescriptionKey));
SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey,
datHeader.GetStringFieldValue(Models.Metadata.Header.DescriptionKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.RootDirKey)))
SetFieldValue<string?>(Models.Metadata.Header.RootDirKey, datHeader.GetStringFieldValue(Models.Metadata.Header.RootDirKey));
SetFieldValue<string?>(Models.Metadata.Header.RootDirKey,
datHeader.GetStringFieldValue(Models.Metadata.Header.RootDirKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.CategoryKey)))
SetFieldValue<string?>(Models.Metadata.Header.CategoryKey, datHeader.GetStringFieldValue(Models.Metadata.Header.CategoryKey));
SetFieldValue<string?>(Models.Metadata.Header.CategoryKey,
datHeader.GetStringFieldValue(Models.Metadata.Header.CategoryKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.VersionKey)))
SetFieldValue<string?>(Models.Metadata.Header.VersionKey, datHeader.GetStringFieldValue(Models.Metadata.Header.VersionKey));
SetFieldValue<string?>(Models.Metadata.Header.VersionKey,
datHeader.GetStringFieldValue(Models.Metadata.Header.VersionKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.DateKey)))
SetFieldValue<string?>(Models.Metadata.Header.DateKey, datHeader.GetStringFieldValue(Models.Metadata.Header.DateKey));
SetFieldValue<string?>(Models.Metadata.Header.DateKey,
datHeader.GetStringFieldValue(Models.Metadata.Header.DateKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.AuthorKey)))
SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, datHeader.GetStringFieldValue(Models.Metadata.Header.AuthorKey));
SetFieldValue<string?>(Models.Metadata.Header.AuthorKey,
datHeader.GetStringFieldValue(Models.Metadata.Header.AuthorKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.EmailKey)))
SetFieldValue<string?>(Models.Metadata.Header.EmailKey, datHeader.GetStringFieldValue(Models.Metadata.Header.EmailKey));
SetFieldValue<string?>(Models.Metadata.Header.EmailKey,
datHeader.GetStringFieldValue(Models.Metadata.Header.EmailKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.HomepageKey)))
SetFieldValue<string?>(Models.Metadata.Header.HomepageKey, datHeader.GetStringFieldValue(Models.Metadata.Header.HomepageKey));
SetFieldValue<string?>(Models.Metadata.Header.HomepageKey,
datHeader.GetStringFieldValue(Models.Metadata.Header.HomepageKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.UrlKey)))
SetFieldValue<string?>(Models.Metadata.Header.UrlKey, datHeader.GetStringFieldValue(Models.Metadata.Header.UrlKey));
SetFieldValue<string?>(Models.Metadata.Header.UrlKey,
datHeader.GetStringFieldValue(Models.Metadata.Header.UrlKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.CommentKey)))
SetFieldValue<string?>(Models.Metadata.Header.CommentKey, datHeader.GetStringFieldValue(Models.Metadata.Header.CommentKey));
SetFieldValue<string?>(Models.Metadata.Header.CommentKey,
datHeader.GetStringFieldValue(Models.Metadata.Header.CommentKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.HeaderKey)))
SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, datHeader.GetStringFieldValue(Models.Metadata.Header.HeaderKey));
SetFieldValue<string?>(Models.Metadata.Header.HeaderKey,
datHeader.GetStringFieldValue(Models.Metadata.Header.HeaderKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.TypeKey)))
SetFieldValue<string?>(Models.Metadata.Header.TypeKey, datHeader.GetStringFieldValue(Models.Metadata.Header.TypeKey));
SetFieldValue<string?>(Models.Metadata.Header.TypeKey,
datHeader.GetStringFieldValue(Models.Metadata.Header.TypeKey));
if (datHeader.GetStringFieldValue(Models.Metadata.Header.ForceMergingKey).AsEnumValue<MergingFlag>() != MergingFlag.None)
SetFieldValue<string?>(Models.Metadata.Header.ForceMergingKey, datHeader.GetStringFieldValue(Models.Metadata.Header.ForceMergingKey).AsEnumValue<MergingFlag>().AsStringValue());
SetFieldValue<string?>(Models.Metadata.Header.ForceMergingKey,
datHeader.GetStringFieldValue(Models.Metadata.Header.ForceMergingKey).AsEnumValue<MergingFlag>().AsStringValue());
if (datHeader.GetStringFieldValue(Models.Metadata.Header.ForceNodumpKey).AsEnumValue<NodumpFlag>() != NodumpFlag.None)
SetFieldValue<string?>(Models.Metadata.Header.ForceNodumpKey, datHeader.GetStringFieldValue(Models.Metadata.Header.ForceNodumpKey).AsEnumValue<NodumpFlag>().AsStringValue());
SetFieldValue<string?>(Models.Metadata.Header.ForceNodumpKey,
datHeader.GetStringFieldValue(Models.Metadata.Header.ForceNodumpKey).AsEnumValue<NodumpFlag>().AsStringValue());
if (datHeader.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>() != PackingFlag.None)
SetFieldValue<string?>(Models.Metadata.Header.ForcePackingKey, datHeader.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>().AsStringValue());
SetFieldValue<string?>(Models.Metadata.Header.ForcePackingKey,
datHeader.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>().AsStringValue());
if (datHeader.GetFieldValue<DatFormat>(DatHeader.DatFormatKey) != 0x00)
SetFieldValue<DatFormat>(DatHeader.DatFormatKey, datHeader.GetFieldValue<DatFormat>(DatHeader.DatFormatKey));
SetFieldValue<DatFormat>(DatHeader.DatFormatKey,
datHeader.GetFieldValue<DatFormat>(DatHeader.DatFormatKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(DatHeader.PrefixKey)))
SetFieldValue<string?>(DatHeader.PrefixKey, datHeader.GetStringFieldValue(DatHeader.PrefixKey));
SetFieldValue<string?>(DatHeader.PrefixKey,
datHeader.GetStringFieldValue(DatHeader.PrefixKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(DatHeader.PostfixKey)))
SetFieldValue<string?>(DatHeader.PostfixKey, datHeader.GetStringFieldValue(DatHeader.PostfixKey));
SetFieldValue<string?>(DatHeader.PostfixKey,
datHeader.GetStringFieldValue(DatHeader.PostfixKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(DatHeader.AddExtensionKey)))
SetFieldValue<string?>(DatHeader.AddExtensionKey, datHeader.GetStringFieldValue(DatHeader.AddExtensionKey));
SetFieldValue<string?>(DatHeader.AddExtensionKey,
datHeader.GetStringFieldValue(DatHeader.AddExtensionKey));
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(DatHeader.ReplaceExtensionKey)))
SetFieldValue<string?>(DatHeader.ReplaceExtensionKey, datHeader.GetStringFieldValue(DatHeader.ReplaceExtensionKey));
SetFieldValue<string?>(DatHeader.ReplaceExtensionKey,
datHeader.GetStringFieldValue(DatHeader.ReplaceExtensionKey));
SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey, datHeader.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.Clone() as DepotInformation);
SetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey, datHeader.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)?.Clone() as DepotInformation);
SetFieldValue<bool?>(DatHeader.GameNameKey, datHeader.GetBoolFieldValue(DatHeader.GameNameKey));
SetFieldValue<bool?>(DatHeader.QuotesKey, datHeader.GetBoolFieldValue(DatHeader.QuotesKey));
SetFieldValue<bool?>(DatHeader.RemoveExtensionKey, datHeader.GetBoolFieldValue(DatHeader.RemoveExtensionKey));
SetFieldValue<bool?>(DatHeader.UseRomNameKey, datHeader.GetBoolFieldValue(DatHeader.UseRomNameKey));
SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey,
datHeader.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.Clone() as DepotInformation);
SetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey,
datHeader.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)?.Clone() as DepotInformation);
SetFieldValue<bool?>(DatHeader.GameNameKey,
datHeader.GetBoolFieldValue(DatHeader.GameNameKey));
SetFieldValue<bool?>(DatHeader.QuotesKey,
datHeader.GetBoolFieldValue(DatHeader.QuotesKey));
SetFieldValue<bool?>(DatHeader.RemoveExtensionKey,
datHeader.GetBoolFieldValue(DatHeader.RemoveExtensionKey));
SetFieldValue<bool?>(DatHeader.UseRomNameKey,
datHeader.GetBoolFieldValue(DatHeader.UseRomNameKey));
}
#endregion
@@ -363,15 +420,18 @@ namespace SabreTools.DatFiles
// Get all used extensions
List<string> usedExtensions = [];
// Get the current format type
DatFormat datFormat = GetFieldValue<DatFormat>(DatHeader.DatFormatKey);
// Get the extensions from the output type
#region .csv
// CSV
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.CSV) != 0)
if ((datFormat & DatFormat.CSV) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.CSV))
if (datFormat.HasFlag(DatFormat.CSV))
#endif
{
outfileNames.Add(DatFormat.CSV, CreateOutFileNamesHelper(outDir, ".csv", overwrite));
@@ -384,9 +444,9 @@ namespace SabreTools.DatFiles
// ClrMamePro
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.ClrMamePro) != 0)
if ((datFormat & DatFormat.ClrMamePro) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.ClrMamePro))
if (datFormat.HasFlag(DatFormat.ClrMamePro))
#endif
{
outfileNames.Add(DatFormat.ClrMamePro, CreateOutFileNamesHelper(outDir, ".dat", overwrite));
@@ -395,9 +455,9 @@ namespace SabreTools.DatFiles
// RomCenter
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.RomCenter) != 0)
if ((datFormat & DatFormat.RomCenter) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.RomCenter))
if (datFormat.HasFlag(DatFormat.RomCenter))
#endif
{
if (usedExtensions.Contains(".dat"))
@@ -414,9 +474,9 @@ namespace SabreTools.DatFiles
// DOSCenter
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.DOSCenter) != 0)
if ((datFormat & DatFormat.DOSCenter) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.DOSCenter))
if (datFormat.HasFlag(DatFormat.DOSCenter))
#endif
{
if (usedExtensions.Contains(".dat"))
@@ -437,9 +497,9 @@ namespace SabreTools.DatFiles
// JSON
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.SabreJSON) != 0)
if ((datFormat & DatFormat.SabreJSON) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.SabreJSON))
if (datFormat.HasFlag(DatFormat.SabreJSON))
#endif
{
outfileNames.Add(DatFormat.SabreJSON, CreateOutFileNamesHelper(outDir, ".json", overwrite));
@@ -452,9 +512,9 @@ namespace SabreTools.DatFiles
// Redump MD5
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.RedumpMD5) != 0)
if ((datFormat & DatFormat.RedumpMD5) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.RedumpMD5))
if (datFormat.HasFlag(DatFormat.RedumpMD5))
#endif
{
outfileNames.Add(DatFormat.RedumpMD5, CreateOutFileNamesHelper(outDir, ".md5", overwrite));
@@ -467,9 +527,9 @@ namespace SabreTools.DatFiles
// Redump SFV
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.RedumpSFV) != 0)
if ((datFormat & DatFormat.RedumpSFV) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.RedumpSFV))
if (datFormat.HasFlag(DatFormat.RedumpSFV))
#endif
{
outfileNames.Add(DatFormat.RedumpSFV, CreateOutFileNamesHelper(outDir, ".sfv", overwrite));
@@ -482,9 +542,9 @@ namespace SabreTools.DatFiles
// Redump SHA-1
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.RedumpSHA1) != 0)
if ((datFormat & DatFormat.RedumpSHA1) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.RedumpSHA1))
if (datFormat.HasFlag(DatFormat.RedumpSHA1))
#endif
{
outfileNames.Add(DatFormat.RedumpSHA1, CreateOutFileNamesHelper(outDir, ".sha1", overwrite));
@@ -497,9 +557,9 @@ namespace SabreTools.DatFiles
// Redump SHA-256
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.RedumpSHA256) != 0)
if ((datFormat & DatFormat.RedumpSHA256) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.RedumpSHA256))
if (datFormat.HasFlag(DatFormat.RedumpSHA256))
#endif
{
outfileNames.Add(DatFormat.RedumpSHA256, CreateOutFileNamesHelper(outDir, ".sha256", overwrite));
@@ -512,9 +572,9 @@ namespace SabreTools.DatFiles
// Redump SHA-384
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.RedumpSHA384) != 0)
if ((datFormat & DatFormat.RedumpSHA384) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.RedumpSHA384))
if (datFormat.HasFlag(DatFormat.RedumpSHA384))
#endif
{
outfileNames.Add(DatFormat.RedumpSHA384, CreateOutFileNamesHelper(outDir, ".sha384", overwrite));
@@ -527,9 +587,9 @@ namespace SabreTools.DatFiles
// Redump SHA-512
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.RedumpSHA512) != 0)
if ((datFormat & DatFormat.RedumpSHA512) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.RedumpSHA512))
if (datFormat.HasFlag(DatFormat.RedumpSHA512))
#endif
{
outfileNames.Add(DatFormat.RedumpSHA512, CreateOutFileNamesHelper(outDir, ".sha512", overwrite));
@@ -542,9 +602,9 @@ namespace SabreTools.DatFiles
// Redump SpamSum
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.RedumpSpamSum) != 0)
if ((datFormat & DatFormat.RedumpSpamSum) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.RedumpSpamSum))
if (datFormat.HasFlag(DatFormat.RedumpSpamSum))
#endif
{
outfileNames.Add(DatFormat.RedumpSpamSum, CreateOutFileNamesHelper(outDir, ".spamsum", overwrite));
@@ -557,9 +617,9 @@ namespace SabreTools.DatFiles
// SSV
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.SSV) != 0)
if ((datFormat & DatFormat.SSV) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.SSV))
if (datFormat.HasFlag(DatFormat.SSV))
#endif
{
outfileNames.Add(DatFormat.SSV, CreateOutFileNamesHelper(outDir, ".ssv", overwrite));
@@ -572,9 +632,9 @@ namespace SabreTools.DatFiles
// TSV
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.TSV) != 0)
if ((datFormat & DatFormat.TSV) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.TSV))
if (datFormat.HasFlag(DatFormat.TSV))
#endif
{
outfileNames.Add(DatFormat.TSV, CreateOutFileNamesHelper(outDir, ".tsv", overwrite));
@@ -587,9 +647,9 @@ namespace SabreTools.DatFiles
// AttractMode
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.AttractMode) != 0)
if ((datFormat & DatFormat.AttractMode) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.AttractMode))
if (datFormat.HasFlag(DatFormat.AttractMode))
#endif
{
outfileNames.Add(DatFormat.AttractMode, CreateOutFileNamesHelper(outDir, ".txt", overwrite));
@@ -598,9 +658,9 @@ namespace SabreTools.DatFiles
// MAME Listroms
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.Listrom) != 0)
if ((datFormat & DatFormat.Listrom) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.Listrom))
if (datFormat.HasFlag(DatFormat.Listrom))
#endif
{
if (usedExtensions.Contains(".txt"))
@@ -617,9 +677,9 @@ namespace SabreTools.DatFiles
// Missfile
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.MissFile) != 0)
if ((datFormat & DatFormat.MissFile) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.MissFile))
if (datFormat.HasFlag(DatFormat.MissFile))
#endif
{
if (usedExtensions.Contains(".txt"))
@@ -636,9 +696,9 @@ namespace SabreTools.DatFiles
// Everdrive SMDB
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.EverdriveSMDB) != 0)
if ((datFormat & DatFormat.EverdriveSMDB) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.EverdriveSMDB))
if (datFormat.HasFlag(DatFormat.EverdriveSMDB))
#endif
{
if (usedExtensions.Contains(".txt"))
@@ -659,18 +719,18 @@ namespace SabreTools.DatFiles
// Logiqx XML
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.Logiqx) != 0)
if ((datFormat & DatFormat.Logiqx) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.Logiqx))
if (datFormat.HasFlag(DatFormat.Logiqx))
#endif
{
outfileNames.Add(DatFormat.Logiqx, CreateOutFileNamesHelper(outDir, ".xml", overwrite));
usedExtensions.Add(".xml");
}
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.LogiqxDeprecated) != 0)
if ((datFormat & DatFormat.LogiqxDeprecated) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.LogiqxDeprecated))
if (datFormat.HasFlag(DatFormat.LogiqxDeprecated))
#endif
{
outfileNames.Add(DatFormat.LogiqxDeprecated, CreateOutFileNamesHelper(outDir, ".xml", overwrite));
@@ -679,9 +739,9 @@ namespace SabreTools.DatFiles
// SabreDAT
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.SabreXML) != 0)
if ((datFormat & DatFormat.SabreXML) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.SabreXML))
if (datFormat.HasFlag(DatFormat.SabreXML))
#endif
{
if (usedExtensions.Contains(".xml"))
@@ -698,9 +758,9 @@ namespace SabreTools.DatFiles
// Software List
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.SoftwareList) != 0)
if ((datFormat & DatFormat.SoftwareList) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.SoftwareList))
if (datFormat.HasFlag(DatFormat.SoftwareList))
#endif
{
if (usedExtensions.Contains(".xml"))
@@ -717,9 +777,9 @@ namespace SabreTools.DatFiles
// MAME Listxml
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.Listxml) != 0)
if ((datFormat & DatFormat.Listxml) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.Listxml))
if (datFormat.HasFlag(DatFormat.Listxml))
#endif
{
if (usedExtensions.Contains(".xml"))
@@ -736,9 +796,9 @@ namespace SabreTools.DatFiles
// OfflineList
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.OfflineList) != 0)
if ((datFormat & DatFormat.OfflineList) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.OfflineList))
if (datFormat.HasFlag(DatFormat.OfflineList))
#endif
{
if (usedExtensions.Contains(".xml"))
@@ -755,9 +815,9 @@ namespace SabreTools.DatFiles
// openMSX
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.OpenMSX) != 0)
if ((datFormat & DatFormat.OpenMSX) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.OpenMSX))
if (datFormat.HasFlag(DatFormat.OpenMSX))
#endif
{
if (usedExtensions.Contains(".xml"))
@@ -774,9 +834,9 @@ namespace SabreTools.DatFiles
// Archive.org
#if NETFRAMEWORK
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.ArchiveDotOrg) != 0)
if ((datFormat & DatFormat.ArchiveDotOrg) != 0)
#else
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.ArchiveDotOrg))
if (datFormat.HasFlag(DatFormat.ArchiveDotOrg))
#endif
{
if (usedExtensions.Contains(".xml"))

View File

@@ -909,31 +909,41 @@ namespace SabreTools.DatFiles
{
DatItem item = this[key]![0];
// Match on CloneOf first
if (!string.IsNullOrEmpty(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)))
{
if (!parents.ContainsKey(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant()))
parents.Add(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant(), []);
// Get machine information
Machine? machine = item.GetFieldValue<Machine>(DatItem.MachineKey);
string? machineName = machine?.GetStringFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant();
if (machine == null || machineName == null)
continue;
parents[item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant()].Add(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant());
// Get the string values
string? cloneOf = machine.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)?.ToLowerInvariant();
string? romOf = machine.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)?.ToLowerInvariant();
// Match on CloneOf first
if (!string.IsNullOrEmpty(cloneOf))
{
if (!parents.ContainsKey(cloneOf!))
parents.Add(cloneOf!, []);
parents[cloneOf!].Add(machineName);
}
// Then by RomOf
else if (!string.IsNullOrEmpty(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)))
else if (!string.IsNullOrEmpty(romOf))
{
if (!parents.ContainsKey(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant()))
parents.Add(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant(), []);
if (!parents.ContainsKey(romOf!))
parents.Add(romOf!, []);
parents[item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant()].Add(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant());
parents[romOf!].Add(machineName);
}
// Otherwise, treat it as a parent
else
{
if (!parents.ContainsKey(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()))
parents.Add(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant(), []);
if (!parents.ContainsKey(machineName))
parents.Add(machineName, []);
parents[item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()].Add(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant());
parents[machineName].Add(machineName);
}
}

View File

@@ -1294,31 +1294,41 @@ namespace SabreTools.DatFiles
if (machine.Item2 == null)
continue;
// Match on CloneOf first
if (!string.IsNullOrEmpty(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)))
{
if (!parents.ContainsKey(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant()))
parents.Add(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant(), []);
// Get machine information
Machine? machineObj = machine.Item2.GetFieldValue<Machine>(DatItem.MachineKey);
string? machineName = machineObj?.GetStringFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant();
if (machineObj == null || machineName == null)
continue;
parents[machine.Item2.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant()].Add(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant());
// Get the string values
string? cloneOf = machineObj.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)?.ToLowerInvariant();
string? romOf = machineObj.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)?.ToLowerInvariant();
// Match on CloneOf first
if (!string.IsNullOrEmpty(cloneOf))
{
if (!parents.ContainsKey(cloneOf!))
parents.Add(cloneOf!, []);
parents[cloneOf!].Add(machineName);
}
// Then by RomOf
else if (!string.IsNullOrEmpty(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)))
else if (!string.IsNullOrEmpty(romOf))
{
if (!parents.ContainsKey(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant()))
parents.Add(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant(), []);
if (!parents.ContainsKey(romOf!))
parents.Add(romOf!, []);
parents[machine.Item2.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant()].Add(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant());
parents[romOf!].Add(machineName);
}
// Otherwise, treat it as a parent
else
{
if (!parents.ContainsKey(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()))
parents.Add(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant(), []);
if (!parents.ContainsKey(machineName))
parents.Add(machineName, []);
parents[machine.Item2.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()].Add(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant());
parents[machineName].Add(machineName);
}
}

View File

@@ -65,8 +65,9 @@ namespace SabreTools.DatTools
outDir = outDir.Ensure(create: true);
// Now we want to get forcepack flag if it's not overridden
if (outputFormat == OutputFormat.Folder && datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>() != PackingFlag.None)
outputFormat = GetOutputFormat(datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>());
PackingFlag forcePacking = datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>();
if (outputFormat == OutputFormat.Folder && forcePacking != PackingFlag.None)
outputFormat = GetOutputFormat(forcePacking);
#endregion
@@ -219,8 +220,9 @@ namespace SabreTools.DatTools
}
// Now we want to get forcepack flag if it's not overridden
if (outputFormat == OutputFormat.Folder && datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>() != PackingFlag.None)
outputFormat = GetOutputFormat(datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>());
PackingFlag forcePacking = datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>();
if (outputFormat == OutputFormat.Folder && forcePacking != PackingFlag.None)
outputFormat = GetOutputFormat(forcePacking);
#endregion

View File

@@ -2195,14 +2195,13 @@ Some special strings that can be used:
logger.Error($"{ot} is not a recognized DAT format");
return null;
}
else if (dftemp == DatFormat.Logiqx && deprecated)
{
datHeader.SetFieldValue<DatFormat>(DatHeader.DatFormatKey, datHeader.GetFieldValue<DatFormat>(DatHeader.DatFormatKey) | DatFormat.LogiqxDeprecated);
}
// Handle deprecated Logiqx
DatFormat currentFormat = datHeader.GetFieldValue<DatFormat>(DatHeader.DatFormatKey);
if (dftemp == DatFormat.Logiqx && deprecated)
datHeader.SetFieldValue(DatHeader.DatFormatKey, currentFormat | DatFormat.LogiqxDeprecated);
else
{
datHeader.SetFieldValue<DatFormat>(DatHeader.DatFormatKey, datHeader.GetFieldValue<DatFormat>(DatHeader.DatFormatKey) | dftemp);
}
datHeader.SetFieldValue(DatHeader.DatFormatKey, currentFormat | dftemp);
}
return datHeader;

View File

@@ -486,7 +486,8 @@ Reset the internal state: reset();";
batchState.DatFile.Header.SetFieldValue<DatFormat>(DatHeader.DatFormatKey, 0x00);
foreach (string format in Arguments)
{
batchState.DatFile.Header.SetFieldValue<DatFormat>(DatHeader.DatFormatKey, batchState.DatFile.Header.GetFieldValue<DatFormat>(DatHeader.DatFormatKey) | GetDatFormat(format));
DatFormat currentFormat = batchState.DatFile.Header.GetFieldValue<DatFormat>(DatHeader.DatFormatKey);
batchState.DatFile.Header.SetFieldValue(DatHeader.DatFormatKey, currentFormat | GetDatFormat(format));
}
}
}

View File

@@ -6,7 +6,6 @@ using SabreTools.FileTypes;
using SabreTools.Help;
using SabreTools.IO;
using SabreTools.Logging;
using SabreTools.Models.InstallShieldCabinet;
namespace SabreTools.Features
{
@@ -73,8 +72,12 @@ namespace SabreTools.Features
bool updateDat = GetBoolean(features, UpdateDatValue);
var outputFormat = GetOutputFormat(features);
// Get the depots
var inputDepot = Header!.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey);
var outputDepot = Header!.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey);
// If we have the romba flag
if (Header!.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)?.IsActive == true)
if (outputDepot?.IsActive == true)
{
// Update TorrentGzip output
if (outputFormat == OutputFormat.TorrentGzip)
@@ -98,8 +101,8 @@ namespace SabreTools.Features
Parser.ParseInto(datdata, datfile, int.MaxValue, keep: true);
// Set depot information
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey, Header.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.Clone() as DepotInformation);
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey, Header.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)?.Clone() as DepotInformation);
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey, inputDepot?.Clone() as DepotInformation);
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey, outputDepot?.Clone() as DepotInformation);
// If we have overridden the header skipper, set it now
if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey)))
@@ -107,7 +110,7 @@ namespace SabreTools.Features
// If we have the depot flag, respect it
bool success;
if (Header.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.IsActive ?? false)
if (inputDepot?.IsActive ?? false)
success = Rebuilder.RebuildDepot(datdata, Inputs, Path.Combine(OutputDir!, datdata.Header.GetStringFieldValue(DatHeader.FileNameKey)!), date, delete, inverse, outputFormat);
else
success = Rebuilder.RebuildGeneric(datdata, Inputs, Path.Combine(OutputDir!, datdata.Header.GetStringFieldValue(DatHeader.FileNameKey)!), quickScan, date, delete, inverse, outputFormat, asFiles);
@@ -138,18 +141,19 @@ namespace SabreTools.Features
}
// Set depot information
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey, Header.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.Clone() as DepotInformation);
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey, Header.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)?.Clone() as DepotInformation);
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey, inputDepot?.Clone() as DepotInformation);
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey, outputDepot?.Clone() as DepotInformation);
// If we have overridden the header skipper, set it now
if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey)))
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey));
string? headerSkpper = Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey);
if (!string.IsNullOrEmpty(headerSkpper))
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, headerSkpper);
watch.Stop();
// If we have the depot flag, respect it
bool success;
if (Header.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.IsActive ?? false)
if (inputDepot?.IsActive ?? false)
success = Rebuilder.RebuildDepot(datdata, Inputs, OutputDir!, date, delete, inverse, outputFormat);
else
success = Rebuilder.RebuildGeneric(datdata, Inputs, OutputDir!, quickScan, date, delete, inverse, outputFormat, asFiles);
@@ -157,9 +161,13 @@ namespace SabreTools.Features
// If we have a success and we're updating the DAT, write it out
if (success && updateDat)
{
datdata.Header.SetFieldValue<string?>(DatHeader.FileNameKey, $"fixDAT_{Header.GetStringFieldValue(DatHeader.FileNameKey)}");
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, $"fixDAT_{Header.GetStringFieldValue(Models.Metadata.Header.NameKey)}");
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, $"fixDAT_{Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)}");
datdata.Header.SetFieldValue<string?>(DatHeader.FileNameKey,
$"fixDAT_{Header.GetStringFieldValue(DatHeader.FileNameKey)}");
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey,
$"fixDAT_{Header.GetStringFieldValue(Models.Metadata.Header.NameKey)}");
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey,
$"fixDAT_{Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)}");
datdata.Items.ClearMarked();
datdata.ItemsDB.ClearMarked();
Writer.Write(datdata, OutputDir);

View File

@@ -167,10 +167,14 @@ namespace SabreTools.Features
// Create a new base DatFile
DatFile datFile = DatFile.Create(Header);
logger.User($"Processing '{Path.GetFileName(inputPath.CurrentPath)}'");
Parser.ParseInto(datFile, inputPath, keep: true,
keepext: datFile.Header.GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.TSV)
|| datFile.Header.GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.CSV)
|| datFile.Header.GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.SSV));
// Check the current format
DatFormat currentFormat = datFile.Header.GetFieldValue<DatFormat>(DatHeader.DatFormatKey);
bool isSeparatedFile = currentFormat.HasFlag(DatFormat.CSV)
|| currentFormat.HasFlag(DatFormat.SSV)
|| currentFormat.HasFlag(DatFormat.TSV);
Parser.ParseInto(datFile, inputPath, keep: true, keepext: isSeparatedFile);
// Perform additional processing steps
Extras!.ApplyExtras(datFile);

View File

@@ -73,14 +73,16 @@ namespace SabreTools.Features
Remover!.ApplyRemovals(datdata);
// Set depot information
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey, Header!.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.Clone() as DepotInformation);
var inputDepot = Header!.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey);
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey, inputDepot?.Clone() as DepotInformation);
// If we have overridden the header skipper, set it now
if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey)))
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey));
string? headerSkipper = Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey);
if (!string.IsNullOrEmpty(headerSkipper))
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, headerSkipper);
// If we have the depot flag, respect it
if (Header.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.IsActive ?? false)
if (inputDepot?.IsActive ?? false)
{
Verification.VerifyDepot(datdata, Inputs);
}
@@ -123,16 +125,18 @@ namespace SabreTools.Features
Remover!.ApplyRemovals(datdata);
// Set depot information
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey, Header!.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.Clone() as DepotInformation);
var inputDepot = Header!.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey);
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey, inputDepot?.Clone() as DepotInformation);
// If we have overridden the header skipper, set it now
if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey)))
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey));
string? headerSkipper = Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey);
if (!string.IsNullOrEmpty(headerSkipper))
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, headerSkipper);
watch.Stop();
// If we have the depot flag, respect it
if (Header.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.IsActive ?? false)
if (inputDepot?.IsActive ?? false)
{
Verification.VerifyDepot(datdata, Inputs);
}