Further wire through MD2/MD4

This commit is contained in:
Matt Nadareski
2025-01-09 05:44:34 -05:00
parent 1dcd457fca
commit bea947f7c2
11 changed files with 144 additions and 46 deletions

View File

@@ -180,6 +180,8 @@ namespace SabreTools.DatFiles
// Force only deduping with certain types
Game,
CRC,
MD2,
MD4,
MD5,
SHA1,
SHA256,

View File

@@ -669,13 +669,13 @@ 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 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;
// 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

View File

@@ -867,13 +867,13 @@ 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 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;
// 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
@@ -927,8 +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.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,
@@ -940,8 +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.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,
@@ -953,8 +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.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,
@@ -966,8 +966,8 @@ namespace SabreTools.DatFiles
_ => bucketBy switch
{
ItemKey.CRC => ZeroHash.CRC32Str,
// ItemKey.MD2 => ZeroHash.GetString(HashType.MD2),
// ItemKey.MD4 => ZeroHash.GetString(HashType.MD4),
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

@@ -592,6 +592,14 @@ namespace SabreTools.DatItems.Test
[InlineData(ItemKey.CRC, false, true, "00000000")]
[InlineData(ItemKey.CRC, true, false, "00000000")]
[InlineData(ItemKey.CRC, true, true, "00000000")]
[InlineData(ItemKey.MD2, false, false, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, false, true, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, true, false, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, true, true, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD4, false, false, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, false, true, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, true, false, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, true, true, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD5, false, false, "d41d8cd98f00b204e9800998ecf8427e")]
[InlineData(ItemKey.MD5, false, true, "d41d8cd98f00b204e9800998ecf8427e")]
[InlineData(ItemKey.MD5, true, false, "d41d8cd98f00b204e9800998ecf8427e")]
@@ -642,6 +650,14 @@ namespace SabreTools.DatItems.Test
[InlineData(ItemKey.CRC, false, true, "DEADBEEF")]
[InlineData(ItemKey.CRC, true, false, "deadbeef")]
[InlineData(ItemKey.CRC, true, true, "deadbeef")]
[InlineData(ItemKey.MD2, false, false, "DEADBEEF")]
[InlineData(ItemKey.MD2, false, true, "DEADBEEF")]
[InlineData(ItemKey.MD2, true, false, "deadbeef")]
[InlineData(ItemKey.MD2, true, true, "deadbeef")]
[InlineData(ItemKey.MD4, false, false, "DEADBEEF")]
[InlineData(ItemKey.MD4, false, true, "DEADBEEF")]
[InlineData(ItemKey.MD4, true, false, "deadbeef")]
[InlineData(ItemKey.MD4, true, true, "deadbeef")]
[InlineData(ItemKey.MD5, false, false, "DEADBEEF")]
[InlineData(ItemKey.MD5, false, true, "DEADBEEF")]
[InlineData(ItemKey.MD5, true, false, "deadbeef")]
@@ -706,6 +722,14 @@ namespace SabreTools.DatItems.Test
[InlineData(ItemKey.CRC, false, true, "00000000")]
[InlineData(ItemKey.CRC, true, false, "00000000")]
[InlineData(ItemKey.CRC, true, true, "00000000")]
[InlineData(ItemKey.MD2, false, false, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, false, true, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, true, false, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, true, true, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD4, false, false, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, false, true, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, true, false, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, true, true, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD5, false, false, "d41d8cd98f00b204e9800998ecf8427e")]
[InlineData(ItemKey.MD5, false, true, "d41d8cd98f00b204e9800998ecf8427e")]
[InlineData(ItemKey.MD5, true, false, "d41d8cd98f00b204e9800998ecf8427e")]
@@ -757,6 +781,14 @@ namespace SabreTools.DatItems.Test
[InlineData(ItemKey.CRC, false, true, "DEADBEEF")]
[InlineData(ItemKey.CRC, true, false, "deadbeef")]
[InlineData(ItemKey.CRC, true, true, "deadbeef")]
[InlineData(ItemKey.MD2, false, false, "DEADBEEF")]
[InlineData(ItemKey.MD2, false, true, "DEADBEEF")]
[InlineData(ItemKey.MD2, true, false, "deadbeef")]
[InlineData(ItemKey.MD2, true, true, "deadbeef")]
[InlineData(ItemKey.MD4, false, false, "DEADBEEF")]
[InlineData(ItemKey.MD4, false, true, "DEADBEEF")]
[InlineData(ItemKey.MD4, true, false, "deadbeef")]
[InlineData(ItemKey.MD4, true, true, "deadbeef")]
[InlineData(ItemKey.MD5, false, false, "DEADBEEF")]
[InlineData(ItemKey.MD5, false, true, "DEADBEEF")]
[InlineData(ItemKey.MD5, true, false, "deadbeef")]

View File

@@ -251,6 +251,14 @@ namespace SabreTools.DatItems.Test.Formats
[InlineData(ItemKey.CRC, false, true, "00000000")]
[InlineData(ItemKey.CRC, true, false, "00000000")]
[InlineData(ItemKey.CRC, true, true, "00000000")]
[InlineData(ItemKey.MD2, false, false, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, false, true, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, true, false, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, true, true, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD4, false, false, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, false, true, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, true, false, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, true, true, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD5, false, false, "DEADBEEF")]
[InlineData(ItemKey.MD5, false, true, "DEADBEEF")]
[InlineData(ItemKey.MD5, true, false, "deadbeef")]
@@ -308,6 +316,14 @@ namespace SabreTools.DatItems.Test.Formats
[InlineData(ItemKey.CRC, false, true, "00000000")]
[InlineData(ItemKey.CRC, true, false, "00000000")]
[InlineData(ItemKey.CRC, true, true, "00000000")]
[InlineData(ItemKey.MD2, false, false, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, false, true, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, true, false, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, true, true, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD4, false, false, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, false, true, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, true, false, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, true, true, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD5, false, false, "DEADBEEF")]
[InlineData(ItemKey.MD5, false, true, "DEADBEEF")]
[InlineData(ItemKey.MD5, true, false, "deadbeef")]

View File

@@ -352,6 +352,14 @@ namespace SabreTools.DatItems.Test.Formats
[InlineData(ItemKey.CRC, false, true, "deadbeef")]
[InlineData(ItemKey.CRC, true, false, "deadbeef")]
[InlineData(ItemKey.CRC, true, true, "deadbeef")]
[InlineData(ItemKey.MD2, false, false, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, false, true, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, true, false, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, true, true, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD4, false, false, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, false, true, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, true, false, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, true, true, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD5, false, false, "000000000000000000000000deadbeef")]
[InlineData(ItemKey.MD5, false, true, "000000000000000000000000deadbeef")]
[InlineData(ItemKey.MD5, true, false, "000000000000000000000000deadbeef")]
@@ -413,6 +421,14 @@ namespace SabreTools.DatItems.Test.Formats
[InlineData(ItemKey.CRC, false, true, "deadbeef")]
[InlineData(ItemKey.CRC, true, false, "deadbeef")]
[InlineData(ItemKey.CRC, true, true, "deadbeef")]
[InlineData(ItemKey.MD2, false, false, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, false, true, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, true, false, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, true, true, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD4, false, false, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, false, true, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, true, false, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, true, true, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD5, false, false, "000000000000000000000000deadbeef")]
[InlineData(ItemKey.MD5, false, true, "000000000000000000000000deadbeef")]
[InlineData(ItemKey.MD5, true, false, "000000000000000000000000deadbeef")]

View File

@@ -325,6 +325,14 @@ namespace SabreTools.DatItems.Test.Formats
[InlineData(ItemKey.CRC, false, true, "00000000")]
[InlineData(ItemKey.CRC, true, false, "00000000")]
[InlineData(ItemKey.CRC, true, true, "00000000")]
[InlineData(ItemKey.MD2, false, false, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, false, true, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, true, false, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, true, true, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD4, false, false, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, false, true, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, true, false, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, true, true, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD5, false, false, "DEADBEEF")]
[InlineData(ItemKey.MD5, false, true, "DEADBEEF")]
[InlineData(ItemKey.MD5, true, false, "deadbeef")]
@@ -384,6 +392,14 @@ namespace SabreTools.DatItems.Test.Formats
[InlineData(ItemKey.CRC, false, true, "00000000")]
[InlineData(ItemKey.CRC, true, false, "00000000")]
[InlineData(ItemKey.CRC, true, true, "00000000")]
[InlineData(ItemKey.MD2, false, false, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, false, true, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, true, false, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD2, true, true, "8350e5a3e24c153df2275c9f80692773")]
[InlineData(ItemKey.MD4, false, false, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, false, true, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, true, false, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD4, true, true, "31d6cfe0d16ae931b73c59d7e0c089c0")]
[InlineData(ItemKey.MD5, false, false, "DEADBEEF")]
[InlineData(ItemKey.MD5, false, true, "DEADBEEF")]
[InlineData(ItemKey.MD5, true, false, "deadbeef")]

View File

@@ -582,6 +582,14 @@ namespace SabreTools.DatItems.Test.Formats
[InlineData(ItemKey.CRC, false, true, "DEADBEEF")]
[InlineData(ItemKey.CRC, true, false, "deadbeef")]
[InlineData(ItemKey.CRC, true, true, "deadbeef")]
[InlineData(ItemKey.MD2, false, false, "DEADBEEF")]
[InlineData(ItemKey.MD2, false, true, "DEADBEEF")]
[InlineData(ItemKey.MD2, true, false, "deadbeef")]
[InlineData(ItemKey.MD2, true, true, "deadbeef")]
[InlineData(ItemKey.MD4, false, false, "DEADBEEF")]
[InlineData(ItemKey.MD4, false, true, "DEADBEEF")]
[InlineData(ItemKey.MD4, true, false, "deadbeef")]
[InlineData(ItemKey.MD4, true, true, "deadbeef")]
[InlineData(ItemKey.MD5, false, false, "DEADBEEF")]
[InlineData(ItemKey.MD5, false, true, "DEADBEEF")]
[InlineData(ItemKey.MD5, true, false, "deadbeef")]
@@ -646,6 +654,14 @@ namespace SabreTools.DatItems.Test.Formats
[InlineData(ItemKey.CRC, false, true, "DEADBEEF")]
[InlineData(ItemKey.CRC, true, false, "deadbeef")]
[InlineData(ItemKey.CRC, true, true, "deadbeef")]
[InlineData(ItemKey.MD2, false, false, "DEADBEEF")]
[InlineData(ItemKey.MD2, false, true, "DEADBEEF")]
[InlineData(ItemKey.MD2, true, false, "deadbeef")]
[InlineData(ItemKey.MD2, true, true, "deadbeef")]
[InlineData(ItemKey.MD4, false, false, "DEADBEEF")]
[InlineData(ItemKey.MD4, false, true, "DEADBEEF")]
[InlineData(ItemKey.MD4, true, false, "deadbeef")]
[InlineData(ItemKey.MD4, true, true, "deadbeef")]
[InlineData(ItemKey.MD5, false, false, "DEADBEEF")]
[InlineData(ItemKey.MD5, false, true, "DEADBEEF")]
[InlineData(ItemKey.MD5, true, false, "deadbeef")]

View File

@@ -396,13 +396,13 @@ namespace SabreTools.DatItems
key = $"{sourceString}{machineString}";
break;
// case ItemKey.MD2:
// key = ZeroHash.GetString(HashType.MD2);
// break;
case ItemKey.MD2:
key = ZeroHash.GetString(HashType.MD2);
break;
// case ItemKey.MD4:
// key = ZeroHash.GetString(HashType.MD4);
// break;
case ItemKey.MD4:
key = ZeroHash.GetString(HashType.MD4);
break;
case ItemKey.MD5:
key = ZeroHash.MD5Str;
@@ -474,13 +474,13 @@ namespace SabreTools.DatItems
key = $"{sourceString}{machineString}";
break;
// case ItemKey.MD2:
// key = ZeroHash.GetString(HashType.MD2);
// break;
case ItemKey.MD2:
key = ZeroHash.GetString(HashType.MD2);
break;
// case ItemKey.MD4:
// key = ZeroHash.GetString(HashType.MD4);
// break;
case ItemKey.MD4:
key = ZeroHash.GetString(HashType.MD4);
break;
case ItemKey.MD5:
key = ZeroHash.MD5Str;

View File

@@ -310,8 +310,8 @@ namespace SabreTools.DatItems
Machine,
CRC,
// MD2,
// MD4,
MD2,
MD4,
MD5,
SHA1,
SHA256,

View File

@@ -140,13 +140,13 @@ namespace SabreTools.DatItems.Formats
key = GetStringFieldValue(Models.Metadata.Rom.CRCKey);
break;
// case ItemKey.MD2:
// key = GetStringFieldValue(Models.Metadata.Rom.MD2Key);
// break;
case ItemKey.MD2:
key = GetStringFieldValue(Models.Metadata.Rom.MD2Key);
break;
// case ItemKey.MD4:
// key = GetStringFieldValue(Models.Metadata.Rom.MD4Key);
// break;
case ItemKey.MD4:
key = GetStringFieldValue(Models.Metadata.Rom.MD4Key);
break;
case ItemKey.MD5:
key = GetStringFieldValue(Models.Metadata.Rom.MD5Key);
@@ -198,13 +198,13 @@ namespace SabreTools.DatItems.Formats
key = GetStringFieldValue(Models.Metadata.Rom.CRCKey);
break;
// case ItemKey.MD2:
// key = GetStringFieldValue(Models.Metadata.Rom.MD2Key);
// break;
case ItemKey.MD2:
key = GetStringFieldValue(Models.Metadata.Rom.MD2Key);
break;
// case ItemKey.MD4:
// key = GetStringFieldValue(Models.Metadata.Rom.MD4Key);
// break;
case ItemKey.MD4:
key = GetStringFieldValue(Models.Metadata.Rom.MD4Key);
break;
case ItemKey.MD5:
key = GetStringFieldValue(Models.Metadata.Rom.MD5Key);