Consolidate shared ProcessNullifiedItem functionality

This commit is contained in:
Matt Nadareski
2025-01-09 09:17:04 -05:00
parent b350b1111e
commit ec8452269b

View File

@@ -527,6 +527,39 @@ namespace SabreTools.DatFiles
if (machine == null)
return item;
// Process the possibly nullified item
return ProcessNullifiedItemImpl(rom, machine);
}
/// <summary>
/// Process any DatItems that are "null", usually created from directory population
/// </summary>
/// <param name="item">DatItem to check for "null" status</param>
/// <returns>Cleaned DatItem</returns>
protected KeyValuePair<long, DatItem> ProcessNullifiedItemDB(KeyValuePair<long, DatItem> item)
{
// If we don't have a Rom, we can ignore it
if (item.Value is not Rom rom)
return item;
// Get machine for the item
var machine = ItemsDB.GetMachineForItem(item.Key);
if (machine.Value == null)
return item;
// Process the possibly nullified item
return new KeyValuePair<long, DatItem>(item.Key, ProcessNullifiedItemImpl(rom, machine.Value));
}
/// <summary>
/// Process any DatItems that are "null", usually created from directory population
/// </summary>
/// <param name="rom">Rom to check for "null" status</param>
/// <param name="machine">Machine for logging</param>
/// <returns>Cleaned DatItem</returns>
/// TODO: Investigate what the machine name is really being used for
private DatItem ProcessNullifiedItemImpl(Rom rom, Machine machine)
{
// If the Rom has "null" characteristics, ensure all fields
if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null
&& rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null")
@@ -558,54 +591,6 @@ namespace SabreTools.DatFiles
return rom;
}
/// <summary>
/// Process any DatItems that are "null", usually created from directory population
/// </summary>
/// <param name="item">DatItem to check for "null" status</param>
/// <returns>Cleaned DatItem</returns>
protected KeyValuePair<long, DatItem> ProcessNullifiedItemDB(KeyValuePair<long, DatItem> item)
{
// If we don't have a Rom, we can ignore it
if (item.Value is not Rom rom)
return item;
// Get machine for the item
var machine = ItemsDB.GetMachineForItem(item.Key);
var machineObj = machine.Value;
if (machineObj == null)
return item;
// If the Rom has "null" characteristics, ensure all fields
if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null
&& rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null")
{
_logger.Verbose($"Empty folder found: {machineObj.GetStringFieldValue(Models.Metadata.Machine.NameKey)}");
rom.SetName(rom.GetName() == "null" ? "-" : rom.GetName());
rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString());
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey,
rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null" ? ZeroHash.CRC32Str : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key,
rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key) == "null" ? ZeroHash.GetString(HashType.MD2) : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key,
rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key) == "null" ? ZeroHash.GetString(HashType.MD4) : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key,
rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? ZeroHash.MD5Str : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key,
rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) == "null" ? ZeroHash.SHA1Str : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key,
rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) == "null" ? ZeroHash.SHA256Str : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key,
rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key) == "null" ? ZeroHash.SHA384Str : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key,
rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key) == "null" ? ZeroHash.SHA512Str : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey,
rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey) == "null" ? ZeroHash.SpamSumStr : null);
}
return new KeyValuePair<long, DatItem>(item.Key, rom);
}
/// <summary>
/// Return list of required fields missing from a DatItem
/// </summary>