mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Standardize some model access
This commit is contained in:
@@ -784,13 +784,14 @@ CREATE TABLE IF NOT EXISTS dat (
|
|||||||
/// <param name="dbc">Database connection to use</param>
|
/// <param name="dbc">Database connection to use</param>
|
||||||
internal void AddDatToDatabase(Rom dat, SqliteConnection dbc)
|
internal void AddDatToDatabase(Rom dat, SqliteConnection dbc)
|
||||||
{
|
{
|
||||||
// Get the dat full path
|
// Get the machine
|
||||||
var machine = dat.GetFieldValue<Machine>(DatItem.MachineKey);
|
var machine = dat.GetFieldValue<Machine>(DatItem.MachineKey);
|
||||||
string fullpath = Path.Combine(_dats!,
|
string? machineName = machine?.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey);
|
||||||
(machine!.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey) == "dats"
|
if (machine == null || machineName == null)
|
||||||
? string.Empty
|
return;
|
||||||
: machine!.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey))!
|
|
||||||
, dat.GetName()!);
|
// Get the dat full path
|
||||||
|
string fullpath = Path.Combine(_dats!, machineName == "dats" ? string.Empty : machineName, dat.GetName()!);
|
||||||
|
|
||||||
// Parse the Dat if possible
|
// Parse the Dat if possible
|
||||||
logger.User($"Adding from '{dat.GetName()}'");
|
logger.User($"Adding from '{dat.GetName()}'");
|
||||||
|
|||||||
@@ -135,8 +135,9 @@ namespace SabreTools.DatFiles
|
|||||||
#region Common
|
#region Common
|
||||||
|
|
||||||
// Handle Machine fields
|
// Handle Machine fields
|
||||||
if (machineFieldNames.Any() && datItem.GetFieldValue<Machine>(DatItem.MachineKey) != null)
|
var machine = datItem.GetFieldValue<Machine>(DatItem.MachineKey);
|
||||||
RemoveFields(datItem.GetFieldValue<Machine>(DatItem.MachineKey), machineFieldNames);
|
if (machineFieldNames.Any() && machine != null)
|
||||||
|
RemoveFields(machine, machineFieldNames);
|
||||||
|
|
||||||
// If there are no field names, return
|
// If there are no field names, return
|
||||||
if (itemFieldNames == null || !itemFieldNames.Any())
|
if (itemFieldNames == null || !itemFieldNames.Any())
|
||||||
@@ -195,10 +196,8 @@ namespace SabreTools.DatFiles
|
|||||||
/// <param name="adjuster">Adjuster to remove fields from</param>
|
/// <param name="adjuster">Adjuster to remove fields from</param>
|
||||||
private static void RemoveFields(Adjuster adjuster, Dictionary<string, List<string>> itemFieldNames)
|
private static void RemoveFields(Adjuster adjuster, Dictionary<string, List<string>> itemFieldNames)
|
||||||
{
|
{
|
||||||
if (!adjuster.ConditionsSpecified)
|
var conditions = adjuster.GetFieldValue<Condition[]?>(Models.Metadata.Adjuster.ConditionKey) ?? [];
|
||||||
return;
|
foreach (Condition subCondition in conditions)
|
||||||
|
|
||||||
foreach (Condition subCondition in adjuster.GetFieldValue<Condition[]?>(Models.Metadata.Adjuster.ConditionKey)!)
|
|
||||||
{
|
{
|
||||||
RemoveFields(subCondition, [], itemFieldNames);
|
RemoveFields(subCondition, [], itemFieldNames);
|
||||||
}
|
}
|
||||||
@@ -210,28 +209,22 @@ namespace SabreTools.DatFiles
|
|||||||
/// <param name="configuration">Configuration to remove fields from</param>
|
/// <param name="configuration">Configuration to remove fields from</param>
|
||||||
private static void RemoveFields(Configuration configuration, Dictionary<string, List<string>> itemFieldNames)
|
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>
|
/// <param name="confsetting">ConfSetting to remove fields from</param>
|
||||||
private static void RemoveFields(ConfSetting confsetting, Dictionary<string, List<string>> itemFieldNames)
|
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>
|
/// <param name="device">Device to remove fields from</param>
|
||||||
private static void RemoveFields(Device device, Dictionary<string, List<string>> itemFieldNames)
|
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>
|
/// <param name="dipSwitch">DipSwitch to remove fields from</param>
|
||||||
private static void RemoveFields(DipSwitch dipSwitch, Dictionary<string, List<string>> itemFieldNames)
|
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)
|
var part = dipSwitch.GetFieldValue<Part?>(DipSwitch.PartKey);
|
||||||
RemoveFields(dipSwitch.GetFieldValue<Part?>(DipSwitch.PartKey)! as DatItem, [], itemFieldNames);
|
if (part != null)
|
||||||
|
RemoveFields(part as DatItem, [], itemFieldNames);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -313,12 +295,10 @@ namespace SabreTools.DatFiles
|
|||||||
/// <param name="dipValue">DipValue to remove fields from</param>
|
/// <param name="dipValue">DipValue to remove fields from</param>
|
||||||
private static void RemoveFields(DipValue dipValue, Dictionary<string, List<string>> itemFieldNames)
|
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>
|
/// <param name="disk">Disk to remove fields from</param>
|
||||||
private static void RemoveFields(Disk disk, Dictionary<string, List<string>> itemFieldNames)
|
private static void RemoveFields(Disk disk, Dictionary<string, List<string>> itemFieldNames)
|
||||||
{
|
{
|
||||||
if (disk.DiskAreaSpecified)
|
var diskArea = disk.GetFieldValue<DiskArea?>(Disk.DiskAreaKey);
|
||||||
RemoveFields(disk.GetFieldValue<DiskArea?>(Disk.DiskAreaKey)! as DatItem, [], itemFieldNames);
|
if (diskArea != null)
|
||||||
|
RemoveFields(diskArea as DatItem, [], itemFieldNames);
|
||||||
|
|
||||||
if (disk.PartSpecified)
|
var part = disk.GetFieldValue<Part?>(Disk.PartKey);
|
||||||
RemoveFields(disk.GetFieldValue<Part?>(Disk.PartKey)! as DatItem, [], itemFieldNames);
|
if (part != null)
|
||||||
|
RemoveFields(part as DatItem, [], itemFieldNames);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -341,12 +323,10 @@ namespace SabreTools.DatFiles
|
|||||||
/// <param name="input">Input to remove fields from</param>
|
/// <param name="input">Input to remove fields from</param>
|
||||||
private static void RemoveFields(Input input, Dictionary<string, List<string>> itemFieldNames)
|
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>
|
/// <param name="part">Part to remove fields from</param>
|
||||||
private static void RemoveFields(Part part, Dictionary<string, List<string>> itemFieldNames)
|
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>
|
/// <param name="port">Port to remove fields from</param>
|
||||||
private static void RemoveFields(Port port, Dictionary<string, List<string>> itemFieldNames)
|
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>
|
/// <param name="rom">Rom to remove fields from</param>
|
||||||
private static void RemoveFields(Rom rom, Dictionary<string, List<string>> itemFieldNames)
|
private static void RemoveFields(Rom rom, Dictionary<string, List<string>> itemFieldNames)
|
||||||
{
|
{
|
||||||
if (rom.DataAreaSpecified)
|
var dataArea = rom.GetFieldValue<DataArea?>(Rom.DataAreaKey);
|
||||||
RemoveFields(rom.GetFieldValue<DataArea?>(Rom.DataAreaKey)!, [], itemFieldNames);
|
if (dataArea != null)
|
||||||
|
RemoveFields(dataArea as DatItem, [], itemFieldNames);
|
||||||
|
|
||||||
if (rom.PartSpecified)
|
var part = rom.GetFieldValue<Part?>(Rom.PartKey);
|
||||||
RemoveFields(rom.GetFieldValue<Part?>(Rom.PartKey)! as DatItem, [], itemFieldNames);
|
if (part != null)
|
||||||
|
RemoveFields(part as DatItem, [], itemFieldNames);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -399,12 +377,10 @@ namespace SabreTools.DatFiles
|
|||||||
/// <param name="slot">Slot to remove fields from</param>
|
/// <param name="slot">Slot to remove fields from</param>
|
||||||
private static void RemoveFields(Slot slot, Dictionary<string, List<string>> itemFieldNames)
|
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -119,7 +119,8 @@ namespace SabreTools.DatFiles
|
|||||||
/// <param name="datHeader">DatHeader to get the values from</param>
|
/// <param name="datHeader">DatHeader to get the values from</param>
|
||||||
public static DatFile Create(DatHeader datHeader)
|
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();
|
datFile.Header = (DatHeader)datHeader.Clone();
|
||||||
return datFile;
|
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>
|
/// <param name="bare">True if the date should be omitted from name and description, false otherwise</param>
|
||||||
public void FillHeaderFromPath(string path, bool bare)
|
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 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
|
// 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
|
// 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);
|
string[] splitpath = path.TrimEnd(Path.DirectorySeparatorChar).Split(Path.DirectorySeparatorChar);
|
||||||
Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, splitpath.Last());
|
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
|
// Get machine for the item
|
||||||
var machine = item.GetFieldValue<Machine>(DatItem.MachineKey);
|
var machine = item.GetFieldValue<Machine>(DatItem.MachineKey);
|
||||||
|
if (machine == null)
|
||||||
|
return string.Empty;
|
||||||
|
|
||||||
// Initialize strings
|
// Initialize strings
|
||||||
|
string? type = item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey);
|
||||||
string fix,
|
string fix,
|
||||||
game = item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty,
|
game = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty,
|
||||||
manufacturer = machine!.GetStringFieldValue(Models.Metadata.Machine.ManufacturerKey) ?? string.Empty,
|
manufacturer = machine.GetStringFieldValue(Models.Metadata.Machine.ManufacturerKey) ?? string.Empty,
|
||||||
publisher = machine!.GetStringFieldValue(Models.Metadata.Machine.PublisherKey) ?? string.Empty,
|
publisher = machine.GetStringFieldValue(Models.Metadata.Machine.PublisherKey) ?? string.Empty,
|
||||||
category = machine!.GetStringFieldValue(Models.Metadata.Machine.CategoryKey) ?? 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,
|
name = item.GetName() ?? type.AsEnumValue<ItemType>().AsStringValue() ?? string.Empty,
|
||||||
crc = string.Empty,
|
crc = string.Empty,
|
||||||
md5 = string.Empty,
|
md5 = string.Empty,
|
||||||
sha1 = string.Empty,
|
sha1 = string.Empty,
|
||||||
@@ -262,13 +271,22 @@ namespace SabreTools.DatFiles
|
|||||||
size = string.Empty,
|
size = string.Empty,
|
||||||
spamsum = string.Empty;
|
spamsum = string.Empty;
|
||||||
|
|
||||||
|
// Check for quotes
|
||||||
|
bool? quotes = Header.GetBoolFieldValue(DatHeader.QuotesKey);
|
||||||
|
|
||||||
// If we have a prefix
|
// If we have a prefix
|
||||||
if (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
|
// If we have a postfix
|
||||||
else
|
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
|
// Ensure we have the proper values for replacement
|
||||||
if (item is Disk disk)
|
if (item is Disk disk)
|
||||||
@@ -325,14 +343,17 @@ namespace SabreTools.DatFiles
|
|||||||
{
|
{
|
||||||
// Get machine for the item
|
// Get machine for the item
|
||||||
var machine = ItemsDB.GetMachineForItem(item.Item1);
|
var machine = ItemsDB.GetMachineForItem(item.Item1);
|
||||||
|
if (machine.Item2 == null)
|
||||||
|
return string.Empty;
|
||||||
|
|
||||||
// Initialize strings
|
// Initialize strings
|
||||||
|
string? type = item.Item2.GetStringFieldValue(Models.Metadata.DatItem.TypeKey);
|
||||||
string fix,
|
string fix,
|
||||||
game = machine.Item2!.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty,
|
game = machine.Item2.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty,
|
||||||
manufacturer = machine.Item2!.GetStringFieldValue(Models.Metadata.Machine.ManufacturerKey) ?? string.Empty,
|
manufacturer = machine.Item2.GetStringFieldValue(Models.Metadata.Machine.ManufacturerKey) ?? string.Empty,
|
||||||
publisher = machine.Item2!.GetStringFieldValue(Models.Metadata.Machine.PublisherKey) ?? string.Empty,
|
publisher = machine.Item2.GetStringFieldValue(Models.Metadata.Machine.PublisherKey) ?? string.Empty,
|
||||||
category = machine.Item2!.GetStringFieldValue(Models.Metadata.Machine.CategoryKey) ?? 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,
|
name = item.Item2.GetName() ?? type.AsEnumValue<ItemType>().AsStringValue() ?? string.Empty,
|
||||||
crc = string.Empty,
|
crc = string.Empty,
|
||||||
md5 = string.Empty,
|
md5 = string.Empty,
|
||||||
sha1 = string.Empty,
|
sha1 = string.Empty,
|
||||||
@@ -342,13 +363,22 @@ namespace SabreTools.DatFiles
|
|||||||
size = string.Empty,
|
size = string.Empty,
|
||||||
spamsum = string.Empty;
|
spamsum = string.Empty;
|
||||||
|
|
||||||
|
// Check for quotes
|
||||||
|
bool? quotes = Header.GetBoolFieldValue(DatHeader.QuotesKey);
|
||||||
|
|
||||||
// If we have a prefix
|
// If we have a prefix
|
||||||
if (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
|
// If we have a postfix
|
||||||
else
|
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
|
// Ensure we have the proper values for replacement
|
||||||
if (item.Item2 is Disk disk)
|
if (item.Item2 is Disk disk)
|
||||||
@@ -411,24 +441,30 @@ namespace SabreTools.DatFiles
|
|||||||
if (forceRomName)
|
if (forceRomName)
|
||||||
Header.SetFieldValue<bool>(DatHeader.UseRomNameKey, true);
|
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
|
// Get the name to update
|
||||||
string? name = (Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true
|
string? name = (Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true
|
||||||
? item.GetName()
|
? 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
|
// Create the proper Prefix and Postfix
|
||||||
string pre = CreatePrefixPostfix(item, true);
|
string pre = CreatePrefixPostfix(item, true);
|
||||||
string post = CreatePrefixPostfix(item, false);
|
string post = CreatePrefixPostfix(item, false);
|
||||||
|
|
||||||
// If we're in Depot mode, take care of that instead
|
// 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)
|
if (item is Disk disk)
|
||||||
{
|
{
|
||||||
// We can only write out if there's a SHA-1
|
// We can only write out if there's a SHA-1
|
||||||
if (!string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key)))
|
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}");
|
item.SetName($"{pre}{name}{post}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -437,7 +473,7 @@ namespace SabreTools.DatFiles
|
|||||||
// We can only write out if there's a SHA-1
|
// We can only write out if there's a SHA-1
|
||||||
if (!string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key)))
|
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}");
|
item.SetName($"{pre}{name}{post}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -446,7 +482,7 @@ namespace SabreTools.DatFiles
|
|||||||
// We can only write out if there's a SHA-1
|
// We can only write out if there's a SHA-1
|
||||||
if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)))
|
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}");
|
item.SetName($"{pre}{name}{post}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -454,31 +490,34 @@ namespace SabreTools.DatFiles
|
|||||||
return;
|
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);
|
Header.SetFieldValue<string?>(DatHeader.ReplaceExtensionKey, string.Empty);
|
||||||
|
|
||||||
string? dir = Path.GetDirectoryName(name);
|
string? dir = Path.GetDirectoryName(name);
|
||||||
if (dir != null)
|
if (dir != null)
|
||||||
{
|
{
|
||||||
dir = dir.TrimStart(Path.DirectorySeparatorChar);
|
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)))
|
string? addExtension = Header.GetStringFieldValue(DatHeader.AddExtensionKey);
|
||||||
name += Header.GetStringFieldValue(DatHeader.AddExtensionKey);
|
if (!string.IsNullOrEmpty(addExtension))
|
||||||
|
name += addExtension;
|
||||||
|
|
||||||
if (Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true && Header.GetBoolFieldValue(DatHeader.GameNameKey) == true)
|
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
|
// Now assign back the formatted name
|
||||||
name = $"{pre}{name}{post}";
|
name = $"{pre}{name}{post}";
|
||||||
if (Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true)
|
if (Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true)
|
||||||
item.SetName(name);
|
item.SetName(name);
|
||||||
else if (item.GetFieldValue<Machine>(DatItem.MachineKey) != null)
|
else
|
||||||
item.GetFieldValue<Machine>(DatItem.MachineKey)!.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, name);
|
machine.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, name);
|
||||||
|
|
||||||
// Restore all relevant values
|
// Restore all relevant values
|
||||||
if (forceRemoveQuotes)
|
if (forceRemoveQuotes)
|
||||||
@@ -517,14 +556,15 @@ namespace SabreTools.DatFiles
|
|||||||
string post = CreatePrefixPostfixDB(item, false);
|
string post = CreatePrefixPostfixDB(item, false);
|
||||||
|
|
||||||
// If we're in Depot mode, take care of that instead
|
// 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)
|
if (item.Item2 is Disk disk)
|
||||||
{
|
{
|
||||||
// We can only write out if there's a SHA-1
|
// We can only write out if there's a SHA-1
|
||||||
if (!string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key)))
|
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}");
|
item.Item2.SetName($"{pre}{name}{post}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -533,7 +573,7 @@ namespace SabreTools.DatFiles
|
|||||||
// We can only write out if there's a SHA-1
|
// We can only write out if there's a SHA-1
|
||||||
if (!string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key)))
|
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}");
|
item.Item2.SetName($"{pre}{name}{post}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -542,7 +582,7 @@ namespace SabreTools.DatFiles
|
|||||||
// We can only write out if there's a SHA-1
|
// We can only write out if there's a SHA-1
|
||||||
if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)))
|
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}");
|
item.Item2.SetName($"{pre}{name}{post}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -550,21 +590,24 @@ namespace SabreTools.DatFiles
|
|||||||
return;
|
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);
|
Header.SetFieldValue<string?>(DatHeader.ReplaceExtensionKey, string.Empty);
|
||||||
|
|
||||||
string? dir = Path.GetDirectoryName(name);
|
string? dir = Path.GetDirectoryName(name);
|
||||||
if (dir != null)
|
if (dir != null)
|
||||||
{
|
{
|
||||||
dir = dir.TrimStart(Path.DirectorySeparatorChar);
|
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)))
|
string? addExtension = Header.GetStringFieldValue(DatHeader.AddExtensionKey);
|
||||||
name += Header.GetStringFieldValue(DatHeader.AddExtensionKey);
|
if (!string.IsNullOrEmpty(addExtension))
|
||||||
|
name += addExtension;
|
||||||
|
|
||||||
if (Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true && Header.GetBoolFieldValue(DatHeader.GameNameKey) == true)
|
if (Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true && Header.GetBoolFieldValue(DatHeader.GameNameKey) == true)
|
||||||
name = Path.Combine(machine.Item2!.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, name);
|
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)
|
if (item is not Rom rom)
|
||||||
return item;
|
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 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.SetName(rom.GetName() == "null" ? "-" : rom.GetName());
|
||||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString());
|
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.CRCKey,
|
||||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? Constants.MD5Zero : null);
|
rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null" ? Constants.CRCZero : null);
|
||||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) == "null" ? Constants.SHA1Zero : null);
|
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key,
|
||||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) == "null" ? Constants.SHA256Zero : null);
|
rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? Constants.MD5Zero : null);
|
||||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key) == "null" ? Constants.SHA384Zero : null);
|
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key,
|
||||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key) == "null" ? Constants.SHA512Zero : null);
|
rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) == "null" ? Constants.SHA1Zero : null);
|
||||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey) == "null" ? Constants.SpamSumZero : 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;
|
return rom;
|
||||||
@@ -627,21 +683,32 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// Get machine for the item
|
// Get machine for the item
|
||||||
var machine = ItemsDB.GetMachineForItem(item.Item1);
|
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 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.SetName(rom.GetName() == "null" ? "-" : rom.GetName());
|
||||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString());
|
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.CRCKey,
|
||||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? Constants.MD5Zero : null);
|
rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null" ? Constants.CRCZero : null);
|
||||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) == "null" ? Constants.SHA1Zero : null);
|
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key,
|
||||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) == "null" ? Constants.SHA256Zero : null);
|
rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? Constants.MD5Zero : null);
|
||||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key) == "null" ? Constants.SHA384Zero : null);
|
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key,
|
||||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key) == "null" ? Constants.SHA512Zero : null);
|
rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) == "null" ? Constants.SHA1Zero : null);
|
||||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey) == "null" ? Constants.SpamSumZero : 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);
|
return (item.Item1, rom);
|
||||||
@@ -676,7 +743,8 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
foreach (DatItem datItem in datItems)
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -697,7 +765,8 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
foreach ((long, DatItem) datItem in datItems)
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -749,10 +818,11 @@ namespace SabreTools.DatFiles
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If we have an item type not in the list of supported values
|
// 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>()))
|
if (!GetSupportedTypes().Contains(datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue<ItemType>()))
|
||||||
{
|
{
|
||||||
string itemString = JsonConvert.SerializeObject(datItem, Formatting.None);
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -762,9 +832,9 @@ namespace SabreTools.DatFiles
|
|||||||
{
|
{
|
||||||
string itemString = JsonConvert.SerializeObject(datItem, Formatting.None);
|
string itemString = JsonConvert.SerializeObject(datItem, Formatting.None);
|
||||||
#if NET20 || NET35
|
#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
|
#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
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -817,10 +887,11 @@ namespace SabreTools.DatFiles
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If we have an item type not in the list of supported values
|
// 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>()))
|
if (!GetSupportedTypes().Contains(datItem.Item2.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue<ItemType>()))
|
||||||
{
|
{
|
||||||
string itemString = JsonConvert.SerializeObject(datItem, Formatting.None);
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -830,9 +901,9 @@ namespace SabreTools.DatFiles
|
|||||||
{
|
{
|
||||||
string itemString = JsonConvert.SerializeObject(datItem, Formatting.None);
|
string itemString = JsonConvert.SerializeObject(datItem, Formatting.None);
|
||||||
#if NET20 || NET35
|
#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
|
#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
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -177,24 +177,42 @@ namespace SabreTools.DatFiles
|
|||||||
public DatHeader CloneStandard()
|
public DatHeader CloneStandard()
|
||||||
{
|
{
|
||||||
var header = new DatHeader();
|
var header = new DatHeader();
|
||||||
header.SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, GetStringFieldValue(Models.Metadata.Header.AuthorKey));
|
header.SetFieldValue<string?>(Models.Metadata.Header.AuthorKey,
|
||||||
header.SetFieldValue<string?>(Models.Metadata.Header.CategoryKey, GetStringFieldValue(Models.Metadata.Header.CategoryKey));
|
GetStringFieldValue(Models.Metadata.Header.AuthorKey));
|
||||||
header.SetFieldValue<string?>(Models.Metadata.Header.CommentKey, GetStringFieldValue(Models.Metadata.Header.CommentKey));
|
header.SetFieldValue<string?>(Models.Metadata.Header.CategoryKey,
|
||||||
header.SetFieldValue<string?>(Models.Metadata.Header.DateKey, GetStringFieldValue(Models.Metadata.Header.DateKey));
|
GetStringFieldValue(Models.Metadata.Header.CategoryKey));
|
||||||
header.SetFieldValue<DatFormat>(DatHeader.DatFormatKey, GetFieldValue<DatFormat>(DatHeader.DatFormatKey));
|
header.SetFieldValue<string?>(Models.Metadata.Header.CommentKey,
|
||||||
header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, GetStringFieldValue(Models.Metadata.Header.DescriptionKey));
|
GetStringFieldValue(Models.Metadata.Header.CommentKey));
|
||||||
header.SetFieldValue<string?>(Models.Metadata.Header.EmailKey, GetStringFieldValue(Models.Metadata.Header.EmailKey));
|
header.SetFieldValue<string?>(Models.Metadata.Header.DateKey,
|
||||||
header.SetFieldValue<string?>(DatHeader.FileNameKey, GetStringFieldValue(DatHeader.FileNameKey));
|
GetStringFieldValue(Models.Metadata.Header.DateKey));
|
||||||
header.SetFieldValue<string?>(Models.Metadata.Header.ForceMergingKey, GetStringFieldValue(Models.Metadata.Header.ForceMergingKey).AsEnumValue<MergingFlag>().AsStringValue());
|
header.SetFieldValue<DatFormat>(DatHeader.DatFormatKey,
|
||||||
header.SetFieldValue<string?>(Models.Metadata.Header.ForceNodumpKey, GetStringFieldValue(Models.Metadata.Header.ForceNodumpKey).AsEnumValue<NodumpFlag>().AsStringValue());
|
GetFieldValue<DatFormat>(DatHeader.DatFormatKey));
|
||||||
header.SetFieldValue<string?>(Models.Metadata.Header.ForcePackingKey, GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>().AsStringValue());
|
header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey,
|
||||||
header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, GetStringFieldValue(Models.Metadata.Header.HeaderKey));
|
GetStringFieldValue(Models.Metadata.Header.DescriptionKey));
|
||||||
header.SetFieldValue<string?>(Models.Metadata.Header.HomepageKey, GetStringFieldValue(Models.Metadata.Header.HomepageKey));
|
header.SetFieldValue<string?>(Models.Metadata.Header.EmailKey,
|
||||||
header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, GetStringFieldValue(Models.Metadata.Header.NameKey));
|
GetStringFieldValue(Models.Metadata.Header.EmailKey));
|
||||||
header.SetFieldValue<string?>(Models.Metadata.Header.RootDirKey, GetStringFieldValue(Models.Metadata.Header.RootDirKey));
|
header.SetFieldValue<string?>(DatHeader.FileNameKey,
|
||||||
header.SetFieldValue<string?>(Models.Metadata.Header.TypeKey, GetStringFieldValue(Models.Metadata.Header.TypeKey));
|
GetStringFieldValue(DatHeader.FileNameKey));
|
||||||
header.SetFieldValue<string?>(Models.Metadata.Header.UrlKey, GetStringFieldValue(Models.Metadata.Header.UrlKey));
|
header.SetFieldValue<string?>(Models.Metadata.Header.ForceMergingKey,
|
||||||
header.SetFieldValue<string?>(Models.Metadata.Header.VersionKey, GetStringFieldValue(Models.Metadata.Header.VersionKey));
|
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;
|
return header;
|
||||||
}
|
}
|
||||||
@@ -205,17 +223,28 @@ namespace SabreTools.DatFiles
|
|||||||
public DatHeader CloneFiltering()
|
public DatHeader CloneFiltering()
|
||||||
{
|
{
|
||||||
var header = new DatHeader();
|
var header = new DatHeader();
|
||||||
header.SetFieldValue<string?>(DatHeader.AddExtensionKey, GetStringFieldValue(DatHeader.AddExtensionKey));
|
header.SetFieldValue<string?>(DatHeader.AddExtensionKey,
|
||||||
header.SetFieldValue<DatFormat>(DatHeader.DatFormatKey, GetFieldValue<DatFormat>(DatHeader.DatFormatKey));
|
GetStringFieldValue(DatHeader.AddExtensionKey));
|
||||||
header.SetFieldValue<bool?>(DatHeader.GameNameKey, GetBoolFieldValue(DatHeader.GameNameKey));
|
header.SetFieldValue<DatFormat>(DatHeader.DatFormatKey,
|
||||||
header.SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey, GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.Clone() as DepotInformation);
|
GetFieldValue<DatFormat>(DatHeader.DatFormatKey));
|
||||||
header.SetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey, GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)?.Clone() as DepotInformation);
|
header.SetFieldValue<bool?>(DatHeader.GameNameKey,
|
||||||
header.SetFieldValue<string?>(DatHeader.PostfixKey, GetStringFieldValue(DatHeader.PostfixKey));
|
GetBoolFieldValue(DatHeader.GameNameKey));
|
||||||
header.SetFieldValue<string?>(DatHeader.PrefixKey, GetStringFieldValue(DatHeader.PrefixKey));
|
header.SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey,
|
||||||
header.SetFieldValue<bool?>(DatHeader.RemoveExtensionKey, GetBoolFieldValue(DatHeader.RemoveExtensionKey));
|
GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.Clone() as DepotInformation);
|
||||||
header.SetFieldValue<string?>(DatHeader.ReplaceExtensionKey, GetStringFieldValue(DatHeader.ReplaceExtensionKey));
|
header.SetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey,
|
||||||
header.SetFieldValue<bool?>(DatHeader.QuotesKey, GetBoolFieldValue(DatHeader.QuotesKey));
|
GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)?.Clone() as DepotInformation);
|
||||||
header.SetFieldValue<bool?>(DatHeader.UseRomNameKey, GetBoolFieldValue(DatHeader.UseRomNameKey));
|
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;
|
return header;
|
||||||
}
|
}
|
||||||
@@ -230,77 +259,105 @@ namespace SabreTools.DatFiles
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(DatHeader.FileNameKey)))
|
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)))
|
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)))
|
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)))
|
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)))
|
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)))
|
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)))
|
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)))
|
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)))
|
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)))
|
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)))
|
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)))
|
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)))
|
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)))
|
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)
|
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)
|
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)
|
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)
|
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)))
|
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)))
|
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)))
|
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)))
|
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.InputDepotKey,
|
||||||
SetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey, datHeader.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)?.Clone() as DepotInformation);
|
datHeader.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.Clone() as DepotInformation);
|
||||||
SetFieldValue<bool?>(DatHeader.GameNameKey, datHeader.GetBoolFieldValue(DatHeader.GameNameKey));
|
SetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey,
|
||||||
SetFieldValue<bool?>(DatHeader.QuotesKey, datHeader.GetBoolFieldValue(DatHeader.QuotesKey));
|
datHeader.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)?.Clone() as DepotInformation);
|
||||||
SetFieldValue<bool?>(DatHeader.RemoveExtensionKey, datHeader.GetBoolFieldValue(DatHeader.RemoveExtensionKey));
|
SetFieldValue<bool?>(DatHeader.GameNameKey,
|
||||||
SetFieldValue<bool?>(DatHeader.UseRomNameKey, datHeader.GetBoolFieldValue(DatHeader.UseRomNameKey));
|
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
|
#endregion
|
||||||
@@ -363,15 +420,18 @@ namespace SabreTools.DatFiles
|
|||||||
// Get all used extensions
|
// Get all used extensions
|
||||||
List<string> usedExtensions = [];
|
List<string> usedExtensions = [];
|
||||||
|
|
||||||
|
// Get the current format type
|
||||||
|
DatFormat datFormat = GetFieldValue<DatFormat>(DatHeader.DatFormatKey);
|
||||||
|
|
||||||
// Get the extensions from the output type
|
// Get the extensions from the output type
|
||||||
|
|
||||||
#region .csv
|
#region .csv
|
||||||
|
|
||||||
// CSV
|
// CSV
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.CSV) != 0)
|
if ((datFormat & DatFormat.CSV) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.CSV))
|
if (datFormat.HasFlag(DatFormat.CSV))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
outfileNames.Add(DatFormat.CSV, CreateOutFileNamesHelper(outDir, ".csv", overwrite));
|
outfileNames.Add(DatFormat.CSV, CreateOutFileNamesHelper(outDir, ".csv", overwrite));
|
||||||
@@ -384,9 +444,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// ClrMamePro
|
// ClrMamePro
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.ClrMamePro) != 0)
|
if ((datFormat & DatFormat.ClrMamePro) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.ClrMamePro))
|
if (datFormat.HasFlag(DatFormat.ClrMamePro))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
outfileNames.Add(DatFormat.ClrMamePro, CreateOutFileNamesHelper(outDir, ".dat", overwrite));
|
outfileNames.Add(DatFormat.ClrMamePro, CreateOutFileNamesHelper(outDir, ".dat", overwrite));
|
||||||
@@ -395,9 +455,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// RomCenter
|
// RomCenter
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.RomCenter) != 0)
|
if ((datFormat & DatFormat.RomCenter) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.RomCenter))
|
if (datFormat.HasFlag(DatFormat.RomCenter))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (usedExtensions.Contains(".dat"))
|
if (usedExtensions.Contains(".dat"))
|
||||||
@@ -414,9 +474,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// DOSCenter
|
// DOSCenter
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.DOSCenter) != 0)
|
if ((datFormat & DatFormat.DOSCenter) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.DOSCenter))
|
if (datFormat.HasFlag(DatFormat.DOSCenter))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (usedExtensions.Contains(".dat"))
|
if (usedExtensions.Contains(".dat"))
|
||||||
@@ -437,9 +497,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// JSON
|
// JSON
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.SabreJSON) != 0)
|
if ((datFormat & DatFormat.SabreJSON) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.SabreJSON))
|
if (datFormat.HasFlag(DatFormat.SabreJSON))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
outfileNames.Add(DatFormat.SabreJSON, CreateOutFileNamesHelper(outDir, ".json", overwrite));
|
outfileNames.Add(DatFormat.SabreJSON, CreateOutFileNamesHelper(outDir, ".json", overwrite));
|
||||||
@@ -452,9 +512,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// Redump MD5
|
// Redump MD5
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.RedumpMD5) != 0)
|
if ((datFormat & DatFormat.RedumpMD5) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.RedumpMD5))
|
if (datFormat.HasFlag(DatFormat.RedumpMD5))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
outfileNames.Add(DatFormat.RedumpMD5, CreateOutFileNamesHelper(outDir, ".md5", overwrite));
|
outfileNames.Add(DatFormat.RedumpMD5, CreateOutFileNamesHelper(outDir, ".md5", overwrite));
|
||||||
@@ -467,9 +527,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// Redump SFV
|
// Redump SFV
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.RedumpSFV) != 0)
|
if ((datFormat & DatFormat.RedumpSFV) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.RedumpSFV))
|
if (datFormat.HasFlag(DatFormat.RedumpSFV))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
outfileNames.Add(DatFormat.RedumpSFV, CreateOutFileNamesHelper(outDir, ".sfv", overwrite));
|
outfileNames.Add(DatFormat.RedumpSFV, CreateOutFileNamesHelper(outDir, ".sfv", overwrite));
|
||||||
@@ -482,9 +542,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// Redump SHA-1
|
// Redump SHA-1
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.RedumpSHA1) != 0)
|
if ((datFormat & DatFormat.RedumpSHA1) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.RedumpSHA1))
|
if (datFormat.HasFlag(DatFormat.RedumpSHA1))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
outfileNames.Add(DatFormat.RedumpSHA1, CreateOutFileNamesHelper(outDir, ".sha1", overwrite));
|
outfileNames.Add(DatFormat.RedumpSHA1, CreateOutFileNamesHelper(outDir, ".sha1", overwrite));
|
||||||
@@ -497,9 +557,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// Redump SHA-256
|
// Redump SHA-256
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.RedumpSHA256) != 0)
|
if ((datFormat & DatFormat.RedumpSHA256) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.RedumpSHA256))
|
if (datFormat.HasFlag(DatFormat.RedumpSHA256))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
outfileNames.Add(DatFormat.RedumpSHA256, CreateOutFileNamesHelper(outDir, ".sha256", overwrite));
|
outfileNames.Add(DatFormat.RedumpSHA256, CreateOutFileNamesHelper(outDir, ".sha256", overwrite));
|
||||||
@@ -512,9 +572,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// Redump SHA-384
|
// Redump SHA-384
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.RedumpSHA384) != 0)
|
if ((datFormat & DatFormat.RedumpSHA384) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.RedumpSHA384))
|
if (datFormat.HasFlag(DatFormat.RedumpSHA384))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
outfileNames.Add(DatFormat.RedumpSHA384, CreateOutFileNamesHelper(outDir, ".sha384", overwrite));
|
outfileNames.Add(DatFormat.RedumpSHA384, CreateOutFileNamesHelper(outDir, ".sha384", overwrite));
|
||||||
@@ -527,9 +587,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// Redump SHA-512
|
// Redump SHA-512
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.RedumpSHA512) != 0)
|
if ((datFormat & DatFormat.RedumpSHA512) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.RedumpSHA512))
|
if (datFormat.HasFlag(DatFormat.RedumpSHA512))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
outfileNames.Add(DatFormat.RedumpSHA512, CreateOutFileNamesHelper(outDir, ".sha512", overwrite));
|
outfileNames.Add(DatFormat.RedumpSHA512, CreateOutFileNamesHelper(outDir, ".sha512", overwrite));
|
||||||
@@ -542,9 +602,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// Redump SpamSum
|
// Redump SpamSum
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.RedumpSpamSum) != 0)
|
if ((datFormat & DatFormat.RedumpSpamSum) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.RedumpSpamSum))
|
if (datFormat.HasFlag(DatFormat.RedumpSpamSum))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
outfileNames.Add(DatFormat.RedumpSpamSum, CreateOutFileNamesHelper(outDir, ".spamsum", overwrite));
|
outfileNames.Add(DatFormat.RedumpSpamSum, CreateOutFileNamesHelper(outDir, ".spamsum", overwrite));
|
||||||
@@ -557,9 +617,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// SSV
|
// SSV
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.SSV) != 0)
|
if ((datFormat & DatFormat.SSV) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.SSV))
|
if (datFormat.HasFlag(DatFormat.SSV))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
outfileNames.Add(DatFormat.SSV, CreateOutFileNamesHelper(outDir, ".ssv", overwrite));
|
outfileNames.Add(DatFormat.SSV, CreateOutFileNamesHelper(outDir, ".ssv", overwrite));
|
||||||
@@ -572,9 +632,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// TSV
|
// TSV
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.TSV) != 0)
|
if ((datFormat & DatFormat.TSV) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.TSV))
|
if (datFormat.HasFlag(DatFormat.TSV))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
outfileNames.Add(DatFormat.TSV, CreateOutFileNamesHelper(outDir, ".tsv", overwrite));
|
outfileNames.Add(DatFormat.TSV, CreateOutFileNamesHelper(outDir, ".tsv", overwrite));
|
||||||
@@ -587,9 +647,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// AttractMode
|
// AttractMode
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.AttractMode) != 0)
|
if ((datFormat & DatFormat.AttractMode) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.AttractMode))
|
if (datFormat.HasFlag(DatFormat.AttractMode))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
outfileNames.Add(DatFormat.AttractMode, CreateOutFileNamesHelper(outDir, ".txt", overwrite));
|
outfileNames.Add(DatFormat.AttractMode, CreateOutFileNamesHelper(outDir, ".txt", overwrite));
|
||||||
@@ -598,9 +658,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// MAME Listroms
|
// MAME Listroms
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.Listrom) != 0)
|
if ((datFormat & DatFormat.Listrom) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.Listrom))
|
if (datFormat.HasFlag(DatFormat.Listrom))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (usedExtensions.Contains(".txt"))
|
if (usedExtensions.Contains(".txt"))
|
||||||
@@ -617,9 +677,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// Missfile
|
// Missfile
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.MissFile) != 0)
|
if ((datFormat & DatFormat.MissFile) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.MissFile))
|
if (datFormat.HasFlag(DatFormat.MissFile))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (usedExtensions.Contains(".txt"))
|
if (usedExtensions.Contains(".txt"))
|
||||||
@@ -636,9 +696,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// Everdrive SMDB
|
// Everdrive SMDB
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.EverdriveSMDB) != 0)
|
if ((datFormat & DatFormat.EverdriveSMDB) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.EverdriveSMDB))
|
if (datFormat.HasFlag(DatFormat.EverdriveSMDB))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (usedExtensions.Contains(".txt"))
|
if (usedExtensions.Contains(".txt"))
|
||||||
@@ -659,18 +719,18 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// Logiqx XML
|
// Logiqx XML
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.Logiqx) != 0)
|
if ((datFormat & DatFormat.Logiqx) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.Logiqx))
|
if (datFormat.HasFlag(DatFormat.Logiqx))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
outfileNames.Add(DatFormat.Logiqx, CreateOutFileNamesHelper(outDir, ".xml", overwrite));
|
outfileNames.Add(DatFormat.Logiqx, CreateOutFileNamesHelper(outDir, ".xml", overwrite));
|
||||||
usedExtensions.Add(".xml");
|
usedExtensions.Add(".xml");
|
||||||
}
|
}
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.LogiqxDeprecated) != 0)
|
if ((datFormat & DatFormat.LogiqxDeprecated) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.LogiqxDeprecated))
|
if (datFormat.HasFlag(DatFormat.LogiqxDeprecated))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
outfileNames.Add(DatFormat.LogiqxDeprecated, CreateOutFileNamesHelper(outDir, ".xml", overwrite));
|
outfileNames.Add(DatFormat.LogiqxDeprecated, CreateOutFileNamesHelper(outDir, ".xml", overwrite));
|
||||||
@@ -679,9 +739,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// SabreDAT
|
// SabreDAT
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.SabreXML) != 0)
|
if ((datFormat & DatFormat.SabreXML) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.SabreXML))
|
if (datFormat.HasFlag(DatFormat.SabreXML))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (usedExtensions.Contains(".xml"))
|
if (usedExtensions.Contains(".xml"))
|
||||||
@@ -698,9 +758,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// Software List
|
// Software List
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.SoftwareList) != 0)
|
if ((datFormat & DatFormat.SoftwareList) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.SoftwareList))
|
if (datFormat.HasFlag(DatFormat.SoftwareList))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (usedExtensions.Contains(".xml"))
|
if (usedExtensions.Contains(".xml"))
|
||||||
@@ -717,9 +777,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// MAME Listxml
|
// MAME Listxml
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.Listxml) != 0)
|
if ((datFormat & DatFormat.Listxml) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.Listxml))
|
if (datFormat.HasFlag(DatFormat.Listxml))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (usedExtensions.Contains(".xml"))
|
if (usedExtensions.Contains(".xml"))
|
||||||
@@ -736,9 +796,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// OfflineList
|
// OfflineList
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.OfflineList) != 0)
|
if ((datFormat & DatFormat.OfflineList) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.OfflineList))
|
if (datFormat.HasFlag(DatFormat.OfflineList))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (usedExtensions.Contains(".xml"))
|
if (usedExtensions.Contains(".xml"))
|
||||||
@@ -755,9 +815,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// openMSX
|
// openMSX
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.OpenMSX) != 0)
|
if ((datFormat & DatFormat.OpenMSX) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.OpenMSX))
|
if (datFormat.HasFlag(DatFormat.OpenMSX))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (usedExtensions.Contains(".xml"))
|
if (usedExtensions.Contains(".xml"))
|
||||||
@@ -774,9 +834,9 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
// Archive.org
|
// Archive.org
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
if ((GetFieldValue<DatFormat>(DatHeader.DatFormatKey) & DatFormat.ArchiveDotOrg) != 0)
|
if ((datFormat & DatFormat.ArchiveDotOrg) != 0)
|
||||||
#else
|
#else
|
||||||
if (GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.ArchiveDotOrg))
|
if (datFormat.HasFlag(DatFormat.ArchiveDotOrg))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (usedExtensions.Contains(".xml"))
|
if (usedExtensions.Contains(".xml"))
|
||||||
|
|||||||
@@ -909,31 +909,41 @@ namespace SabreTools.DatFiles
|
|||||||
{
|
{
|
||||||
DatItem item = this[key]![0];
|
DatItem item = this[key]![0];
|
||||||
|
|
||||||
// Match on CloneOf first
|
// Get machine information
|
||||||
if (!string.IsNullOrEmpty(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)))
|
Machine? machine = item.GetFieldValue<Machine>(DatItem.MachineKey);
|
||||||
{
|
string? machineName = machine?.GetStringFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant();
|
||||||
if (!parents.ContainsKey(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant()))
|
if (machine == null || machineName == null)
|
||||||
parents.Add(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant(), []);
|
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
|
// 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()))
|
if (!parents.ContainsKey(romOf!))
|
||||||
parents.Add(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant(), []);
|
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
|
// Otherwise, treat it as a parent
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!parents.ContainsKey(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()))
|
if (!parents.ContainsKey(machineName))
|
||||||
parents.Add(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant(), []);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1294,31 +1294,41 @@ namespace SabreTools.DatFiles
|
|||||||
if (machine.Item2 == null)
|
if (machine.Item2 == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Match on CloneOf first
|
// Get machine information
|
||||||
if (!string.IsNullOrEmpty(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)))
|
Machine? machineObj = machine.Item2.GetFieldValue<Machine>(DatItem.MachineKey);
|
||||||
{
|
string? machineName = machineObj?.GetStringFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant();
|
||||||
if (!parents.ContainsKey(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant()))
|
if (machineObj == null || machineName == null)
|
||||||
parents.Add(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant(), []);
|
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
|
// 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()))
|
if (!parents.ContainsKey(romOf!))
|
||||||
parents.Add(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant(), []);
|
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
|
// Otherwise, treat it as a parent
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!parents.ContainsKey(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()))
|
if (!parents.ContainsKey(machineName))
|
||||||
parents.Add(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant(), []);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -65,8 +65,9 @@ namespace SabreTools.DatTools
|
|||||||
outDir = outDir.Ensure(create: true);
|
outDir = outDir.Ensure(create: true);
|
||||||
|
|
||||||
// Now we want to get forcepack flag if it's not overridden
|
// 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)
|
PackingFlag forcePacking = datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>();
|
||||||
outputFormat = GetOutputFormat(datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>());
|
if (outputFormat == OutputFormat.Folder && forcePacking != PackingFlag.None)
|
||||||
|
outputFormat = GetOutputFormat(forcePacking);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -219,8 +220,9 @@ namespace SabreTools.DatTools
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Now we want to get forcepack flag if it's not overridden
|
// 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)
|
PackingFlag forcePacking = datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>();
|
||||||
outputFormat = GetOutputFormat(datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>());
|
if (outputFormat == OutputFormat.Folder && forcePacking != PackingFlag.None)
|
||||||
|
outputFormat = GetOutputFormat(forcePacking);
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -2195,14 +2195,13 @@ Some special strings that can be used:
|
|||||||
logger.Error($"{ot} is not a recognized DAT format");
|
logger.Error($"{ot} is not a recognized DAT format");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
else if (dftemp == DatFormat.Logiqx && deprecated)
|
|
||||||
{
|
// Handle deprecated Logiqx
|
||||||
datHeader.SetFieldValue<DatFormat>(DatHeader.DatFormatKey, datHeader.GetFieldValue<DatFormat>(DatHeader.DatFormatKey) | DatFormat.LogiqxDeprecated);
|
DatFormat currentFormat = datHeader.GetFieldValue<DatFormat>(DatHeader.DatFormatKey);
|
||||||
}
|
if (dftemp == DatFormat.Logiqx && deprecated)
|
||||||
|
datHeader.SetFieldValue(DatHeader.DatFormatKey, currentFormat | DatFormat.LogiqxDeprecated);
|
||||||
else
|
else
|
||||||
{
|
datHeader.SetFieldValue(DatHeader.DatFormatKey, currentFormat | dftemp);
|
||||||
datHeader.SetFieldValue<DatFormat>(DatHeader.DatFormatKey, datHeader.GetFieldValue<DatFormat>(DatHeader.DatFormatKey) | dftemp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return datHeader;
|
return datHeader;
|
||||||
|
|||||||
@@ -486,7 +486,8 @@ Reset the internal state: reset();";
|
|||||||
batchState.DatFile.Header.SetFieldValue<DatFormat>(DatHeader.DatFormatKey, 0x00);
|
batchState.DatFile.Header.SetFieldValue<DatFormat>(DatHeader.DatFormatKey, 0x00);
|
||||||
foreach (string format in Arguments)
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ using SabreTools.FileTypes;
|
|||||||
using SabreTools.Help;
|
using SabreTools.Help;
|
||||||
using SabreTools.IO;
|
using SabreTools.IO;
|
||||||
using SabreTools.Logging;
|
using SabreTools.Logging;
|
||||||
using SabreTools.Models.InstallShieldCabinet;
|
|
||||||
|
|
||||||
namespace SabreTools.Features
|
namespace SabreTools.Features
|
||||||
{
|
{
|
||||||
@@ -73,8 +72,12 @@ namespace SabreTools.Features
|
|||||||
bool updateDat = GetBoolean(features, UpdateDatValue);
|
bool updateDat = GetBoolean(features, UpdateDatValue);
|
||||||
var outputFormat = GetOutputFormat(features);
|
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 we have the romba flag
|
||||||
if (Header!.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)?.IsActive == true)
|
if (outputDepot?.IsActive == true)
|
||||||
{
|
{
|
||||||
// Update TorrentGzip output
|
// Update TorrentGzip output
|
||||||
if (outputFormat == OutputFormat.TorrentGzip)
|
if (outputFormat == OutputFormat.TorrentGzip)
|
||||||
@@ -98,8 +101,8 @@ namespace SabreTools.Features
|
|||||||
Parser.ParseInto(datdata, datfile, int.MaxValue, keep: true);
|
Parser.ParseInto(datdata, datfile, int.MaxValue, keep: true);
|
||||||
|
|
||||||
// Set depot information
|
// Set depot information
|
||||||
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey, Header.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.Clone() as DepotInformation);
|
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey, inputDepot?.Clone() as DepotInformation);
|
||||||
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey, Header.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)?.Clone() as DepotInformation);
|
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey, outputDepot?.Clone() as DepotInformation);
|
||||||
|
|
||||||
// If we have overridden the header skipper, set it now
|
// If we have overridden the header skipper, set it now
|
||||||
if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey)))
|
if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey)))
|
||||||
@@ -107,7 +110,7 @@ namespace SabreTools.Features
|
|||||||
|
|
||||||
// If we have the depot flag, respect it
|
// If we have the depot flag, respect it
|
||||||
bool success;
|
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);
|
success = Rebuilder.RebuildDepot(datdata, Inputs, Path.Combine(OutputDir!, datdata.Header.GetStringFieldValue(DatHeader.FileNameKey)!), date, delete, inverse, outputFormat);
|
||||||
else
|
else
|
||||||
success = Rebuilder.RebuildGeneric(datdata, Inputs, Path.Combine(OutputDir!, datdata.Header.GetStringFieldValue(DatHeader.FileNameKey)!), quickScan, date, delete, inverse, outputFormat, asFiles);
|
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
|
// Set depot information
|
||||||
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey, Header.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.Clone() as DepotInformation);
|
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.InputDepotKey, inputDepot?.Clone() as DepotInformation);
|
||||||
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey, Header.GetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey)?.Clone() as DepotInformation);
|
datdata.Header.SetFieldValue<DepotInformation?>(DatHeader.OutputDepotKey, outputDepot?.Clone() as DepotInformation);
|
||||||
|
|
||||||
// If we have overridden the header skipper, set it now
|
// If we have overridden the header skipper, set it now
|
||||||
if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey)))
|
string? headerSkpper = Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey);
|
||||||
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey));
|
if (!string.IsNullOrEmpty(headerSkpper))
|
||||||
|
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, headerSkpper);
|
||||||
|
|
||||||
watch.Stop();
|
watch.Stop();
|
||||||
|
|
||||||
// If we have the depot flag, respect it
|
// If we have the depot flag, respect it
|
||||||
bool success;
|
bool success;
|
||||||
if (Header.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.IsActive ?? false)
|
if (inputDepot?.IsActive ?? false)
|
||||||
success = Rebuilder.RebuildDepot(datdata, Inputs, OutputDir!, date, delete, inverse, outputFormat);
|
success = Rebuilder.RebuildDepot(datdata, Inputs, OutputDir!, date, delete, inverse, outputFormat);
|
||||||
else
|
else
|
||||||
success = Rebuilder.RebuildGeneric(datdata, Inputs, OutputDir!, quickScan, date, delete, inverse, outputFormat, asFiles);
|
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 we have a success and we're updating the DAT, write it out
|
||||||
if (success && updateDat)
|
if (success && updateDat)
|
||||||
{
|
{
|
||||||
datdata.Header.SetFieldValue<string?>(DatHeader.FileNameKey, $"fixDAT_{Header.GetStringFieldValue(DatHeader.FileNameKey)}");
|
datdata.Header.SetFieldValue<string?>(DatHeader.FileNameKey,
|
||||||
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, $"fixDAT_{Header.GetStringFieldValue(Models.Metadata.Header.NameKey)}");
|
$"fixDAT_{Header.GetStringFieldValue(DatHeader.FileNameKey)}");
|
||||||
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, $"fixDAT_{Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)}");
|
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.Items.ClearMarked();
|
||||||
datdata.ItemsDB.ClearMarked();
|
datdata.ItemsDB.ClearMarked();
|
||||||
Writer.Write(datdata, OutputDir);
|
Writer.Write(datdata, OutputDir);
|
||||||
|
|||||||
@@ -167,10 +167,14 @@ namespace SabreTools.Features
|
|||||||
// Create a new base DatFile
|
// Create a new base DatFile
|
||||||
DatFile datFile = DatFile.Create(Header);
|
DatFile datFile = DatFile.Create(Header);
|
||||||
logger.User($"Processing '{Path.GetFileName(inputPath.CurrentPath)}'");
|
logger.User($"Processing '{Path.GetFileName(inputPath.CurrentPath)}'");
|
||||||
Parser.ParseInto(datFile, inputPath, keep: true,
|
|
||||||
keepext: datFile.Header.GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.TSV)
|
// Check the current format
|
||||||
|| datFile.Header.GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.CSV)
|
DatFormat currentFormat = datFile.Header.GetFieldValue<DatFormat>(DatHeader.DatFormatKey);
|
||||||
|| datFile.Header.GetFieldValue<DatFormat>(DatHeader.DatFormatKey).HasFlag(DatFormat.SSV));
|
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
|
// Perform additional processing steps
|
||||||
Extras!.ApplyExtras(datFile);
|
Extras!.ApplyExtras(datFile);
|
||||||
|
|||||||
@@ -73,14 +73,16 @@ namespace SabreTools.Features
|
|||||||
Remover!.ApplyRemovals(datdata);
|
Remover!.ApplyRemovals(datdata);
|
||||||
|
|
||||||
// Set depot information
|
// 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 we have overridden the header skipper, set it now
|
||||||
if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey)))
|
string? headerSkipper = Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey);
|
||||||
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, 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 we have the depot flag, respect it
|
||||||
if (Header.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.IsActive ?? false)
|
if (inputDepot?.IsActive ?? false)
|
||||||
{
|
{
|
||||||
Verification.VerifyDepot(datdata, Inputs);
|
Verification.VerifyDepot(datdata, Inputs);
|
||||||
}
|
}
|
||||||
@@ -123,16 +125,18 @@ namespace SabreTools.Features
|
|||||||
Remover!.ApplyRemovals(datdata);
|
Remover!.ApplyRemovals(datdata);
|
||||||
|
|
||||||
// Set depot information
|
// 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 we have overridden the header skipper, set it now
|
||||||
if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey)))
|
string? headerSkipper = Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey);
|
||||||
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey));
|
if (!string.IsNullOrEmpty(headerSkipper))
|
||||||
|
datdata.Header.SetFieldValue<string?>(Models.Metadata.Header.HeaderKey, headerSkipper);
|
||||||
|
|
||||||
watch.Stop();
|
watch.Stop();
|
||||||
|
|
||||||
// If we have the depot flag, respect it
|
// If we have the depot flag, respect it
|
||||||
if (Header.GetFieldValue<DepotInformation?>(DatHeader.InputDepotKey)?.IsActive ?? false)
|
if (inputDepot?.IsActive ?? false)
|
||||||
{
|
{
|
||||||
Verification.VerifyDepot(datdata, Inputs);
|
Verification.VerifyDepot(datdata, Inputs);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user