Wire through MD2/MD4

This commit is contained in:
Matt Nadareski
2025-01-09 05:26:36 -05:00
parent 45a5611d20
commit 1dcd457fca
23 changed files with 836 additions and 20 deletions

View File

@@ -978,6 +978,10 @@ namespace SabreTools.DatFiles
datItem.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, datItem.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString());
if (datItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey) != null)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(datItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey)));
if (datItem.GetStringFieldValue(Models.Metadata.Rom.MD2Key) != null)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key, TextHelper.NormalizeMD2(datItem.GetStringFieldValue(Models.Metadata.Rom.MD2Key)));
if (datItem.GetStringFieldValue(Models.Metadata.Rom.MD4Key) != null)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key, TextHelper.NormalizeMD5(datItem.GetStringFieldValue(Models.Metadata.Rom.MD4Key)));
if (datItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key) != null)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(datItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key)));
if (datItem.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) != null)
@@ -1234,6 +1238,10 @@ namespace SabreTools.DatFiles
romItem.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, romItem.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString());
if (romItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey) != null)
romItem.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(romItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey)));
if (romItem.GetStringFieldValue(Models.Metadata.Rom.MD2Key) != null)
romItem.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key, TextHelper.NormalizeMD2(romItem.GetStringFieldValue(Models.Metadata.Rom.MD2Key)));
if (romItem.GetStringFieldValue(Models.Metadata.Rom.MD4Key) != null)
romItem.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key, TextHelper.NormalizeMD4(romItem.GetStringFieldValue(Models.Metadata.Rom.MD4Key)));
if (romItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key) != null)
romItem.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(romItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key)));
if (romItem.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) != null)
@@ -1542,6 +1550,10 @@ namespace SabreTools.DatFiles
datItem.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, datItem.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString());
if (datItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey) != null)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(datItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey)));
if (datItem.GetStringFieldValue(Models.Metadata.Rom.MD2Key) != null)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key, TextHelper.NormalizeMD2(datItem.GetStringFieldValue(Models.Metadata.Rom.MD2Key)));
if (datItem.GetStringFieldValue(Models.Metadata.Rom.MD4Key) != null)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key, TextHelper.NormalizeMD4(datItem.GetStringFieldValue(Models.Metadata.Rom.MD4Key)));
if (datItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key) != null)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(datItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key)));
if (datItem.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) != null)

View File

@@ -219,6 +219,8 @@ namespace SabreTools.DatFiles
category = machine.GetStringFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty,
name = item.GetName() ?? type.AsEnumValue<ItemType>().AsStringValue() ?? string.Empty,
crc = string.Empty,
md2 = string.Empty,
md4 = string.Empty,
md5 = string.Empty,
sha1 = string.Empty,
sha256 = string.Empty,
@@ -260,6 +262,8 @@ namespace SabreTools.DatFiles
else if (item is Rom rom)
{
crc = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) ?? string.Empty;
md2 = rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key) ?? string.Empty;
md4 = rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key) ?? string.Empty;
md5 = rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) ?? string.Empty;
sha1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty;
sha256 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) ?? string.Empty;
@@ -278,6 +282,8 @@ namespace SabreTools.DatFiles
.Replace("%publisher%", publisher)
.Replace("%category%", category)
.Replace("%crc%", crc)
.Replace("%md2%", md2)
.Replace("%md4%", md4)
.Replace("%md5%", md5)
.Replace("%sha1%", sha1)
.Replace("%sha256%", sha256)
@@ -311,6 +317,8 @@ namespace SabreTools.DatFiles
category = machine.Value.GetStringFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty,
name = item.Value.GetName() ?? type.AsEnumValue<ItemType>().AsStringValue() ?? string.Empty,
crc = string.Empty,
md2 = string.Empty,
md4 = string.Empty,
md5 = string.Empty,
sha1 = string.Empty,
sha256 = string.Empty,
@@ -352,6 +360,8 @@ namespace SabreTools.DatFiles
else if (item.Value is Rom rom)
{
crc = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) ?? string.Empty;
md2 = rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key) ?? string.Empty;
md4 = rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key) ?? string.Empty;
md5 = rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) ?? string.Empty;
sha1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty;
sha256 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) ?? string.Empty;
@@ -370,6 +380,8 @@ namespace SabreTools.DatFiles
.Replace("%publisher%", publisher)
.Replace("%category%", category)
.Replace("%crc%", crc)
.Replace("%md2%", md2)
.Replace("%md4%", md4)
.Replace("%md5%", md5)
.Replace("%sha1%", sha1)
.Replace("%sha256%", sha256)
@@ -615,6 +627,10 @@ namespace SabreTools.DatFiles
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,
@@ -659,6 +675,10 @@ namespace SabreTools.DatFiles
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,

View File

@@ -145,6 +145,8 @@ namespace SabreTools.DatFiles
{
TotalSize += rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0;
AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1);
AddHashCount(HashType.MD2, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key)) ? 0 : 1);
AddHashCount(HashType.MD4, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key)) ? 0 : 1);
AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1);
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1);
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)) ? 0 : 1);
@@ -345,6 +347,8 @@ namespace SabreTools.DatFiles
{
TotalSize -= rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0;
RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1);
RemoveHashCount(HashType.MD2, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key)) ? 0 : 1);
RemoveHashCount(HashType.MD4, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key)) ? 0 : 1);
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1);
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1);
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)) ? 0 : 1);

View File

@@ -88,6 +88,30 @@ namespace SabreTools.DatFiles.Formats
break;
}
break;
case HashType.MD2:
switch (datItem)
{
case Rom rom:
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key)))
missingFields.Add(Models.Metadata.Rom.MD2Key);
break;
default:
missingFields.Add(Models.Metadata.Rom.MD2Key);
break;
}
break;
case HashType.MD4:
switch (datItem)
{
case Rom rom:
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key)))
missingFields.Add(Models.Metadata.Rom.MD4Key);
break;
default:
missingFields.Add(Models.Metadata.Rom.MD4Key);
break;
}
break;
case HashType.MD5:
switch (datItem)
{

View File

@@ -232,6 +232,8 @@ namespace SabreTools.DatFiles
{
rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString());
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, ZeroHash.CRC32Str);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key, null); // ZeroHash.GetString(HashType.MD2)
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key, null); // ZeroHash.GetString(HashType.MD4)
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, ZeroHash.MD5Str);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, ZeroHash.SHA1Str);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, null); // ZeroHash.SHA256Str;
@@ -667,6 +669,14 @@ namespace SabreTools.DatFiles
else if (diskCount + mediaCount + romCount - nodumpCount == DatStatistics.GetHashCount(HashType.MD5))
return ItemKey.MD5;
// // If all items are supposed to have a MD4, we bucket by that
// else if (diskCount + mediaCount + romCount - nodumpCount == DatStatistics.GetHashCount(HashType.MD4))
// return ItemKey.MD4;
// // If all items are supposed to have a MD2, we bucket by that
// else if (diskCount + mediaCount + romCount - nodumpCount == DatStatistics.GetHashCount(HashType.MD2))
// return ItemKey.MD2;
// Otherwise, we bucket by CRC
else
return ItemKey.CRC;

View File

@@ -222,6 +222,8 @@ namespace SabreTools.DatFiles
{
rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString());
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, ZeroHash.CRC32Str);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key, null); // ZeroHash.GetString(HashType.MD2)
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key, null); // ZeroHash.GetString(HashType.MD4)
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, ZeroHash.MD5Str);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, ZeroHash.SHA1Str);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, null); // ZeroHash.SHA256Str;
@@ -865,6 +867,14 @@ namespace SabreTools.DatFiles
else if (diskCount + mediaCount + romCount - nodumpCount == DatStatistics.GetHashCount(HashType.MD5))
return ItemKey.MD5;
// // If all items are supposed to have a MD4, we bucket by that
// else if (diskCount + mediaCount + romCount - nodumpCount == DatStatistics.GetHashCount(HashType.MD4))
// return ItemKey.MD4;
// // If all items are supposed to have a MD2, we bucket by that
// else if (diskCount + mediaCount + romCount - nodumpCount == DatStatistics.GetHashCount(HashType.MD2))
// return ItemKey.MD2;
// Otherwise, we bucket by CRC
else
return ItemKey.CRC;
@@ -917,6 +927,8 @@ namespace SabreTools.DatFiles
Disk disk => bucketBy switch
{
ItemKey.CRC => ZeroHash.CRC32Str,
// ItemKey.MD2 => ZeroHash.GetString(HashType.MD2),
// ItemKey.MD4 => ZeroHash.GetString(HashType.MD4),
ItemKey.MD5 => disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key) ?? string.Empty,
ItemKey.SHA1 => disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key) ?? string.Empty,
ItemKey.SHA256 => ZeroHash.SHA256Str,
@@ -928,6 +940,8 @@ namespace SabreTools.DatFiles
Media media => bucketBy switch
{
ItemKey.CRC => ZeroHash.CRC32Str,
// ItemKey.MD2 => ZeroHash.GetString(HashType.MD2),
// ItemKey.MD4 => ZeroHash.GetString(HashType.MD4),
ItemKey.MD5 => media.GetStringFieldValue(Models.Metadata.Media.MD5Key) ?? string.Empty,
ItemKey.SHA1 => media.GetStringFieldValue(Models.Metadata.Media.SHA1Key) ?? string.Empty,
ItemKey.SHA256 => media.GetStringFieldValue(Models.Metadata.Media.SHA256Key) ?? string.Empty,
@@ -939,6 +953,8 @@ namespace SabreTools.DatFiles
Rom rom => bucketBy switch
{
ItemKey.CRC => rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) ?? string.Empty,
// ItemKey.MD2 => rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key) ?? string.Empty,
// ItemKey.MD4 => rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key) ?? string.Empty,
ItemKey.MD5 => rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) ?? string.Empty,
ItemKey.SHA1 => rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty,
ItemKey.SHA256 => rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) ?? string.Empty,
@@ -950,6 +966,8 @@ namespace SabreTools.DatFiles
_ => bucketBy switch
{
ItemKey.CRC => ZeroHash.CRC32Str,
// ItemKey.MD2 => ZeroHash.GetString(HashType.MD2),
// ItemKey.MD4 => ZeroHash.GetString(HashType.MD4),
ItemKey.MD5 => ZeroHash.MD5Str,
ItemKey.SHA1 => ZeroHash.SHA1Str,
ItemKey.SHA256 => ZeroHash.SHA256Str,

View File

@@ -162,6 +162,18 @@ namespace SabreTools.DatFiles
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, newItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey));
}
if (datItemFields.Contains(Models.Metadata.Rom.MD2Key))
{
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Rom.MD2Key)))
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key, newItem.GetStringFieldValue(Models.Metadata.Rom.MD2Key));
}
if (datItemFields.Contains(Models.Metadata.Rom.MD4Key))
{
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Rom.MD4Key)))
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key, newItem.GetStringFieldValue(Models.Metadata.Rom.MD4Key));
}
if (datItemFields.Contains(Models.Metadata.Rom.MD5Key))
{
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key)))