[Structs] Add HashData struct

This commit is contained in:
Matt Nadareski
2016-08-29 13:05:32 -07:00
parent bcfa68fb85
commit 4231cf97b9
11 changed files with 259 additions and 209 deletions

View File

@@ -255,7 +255,7 @@ namespace SabreTools
// Now add the information to the database if it's not already there // Now add the information to the database if it's not already there
Rom rom = RomTools.GetSingleFileInfo(newfile); Rom rom = RomTools.GetSingleFileInfo(newfile);
AddHeaderToDatabase(hstr, rom.SHA1, type); AddHeaderToDatabase(hstr, rom.HashData.SHA1, type);
} }
return true; return true;
@@ -314,7 +314,7 @@ namespace SabreTools
// Then try to pull the corresponding headers from the database // Then try to pull the corresponding headers from the database
string header = ""; string header = "";
string query = @"SELECT header, type FROM data WHERE sha1='" + rom.SHA1 + "'"; string query = @"SELECT header, type FROM data WHERE sha1='" + rom.HashData.SHA1 + "'";
using (SqliteConnection dbc = new SqliteConnection(_connectionString)) using (SqliteConnection dbc = new SqliteConnection(_connectionString))
{ {
dbc.Open(); dbc.Open();

View File

@@ -3,6 +3,29 @@ using System.Collections.Generic;
namespace SabreTools.Helper namespace SabreTools.Helper
{ {
/// <summary>
/// Intermediate struct for holding and processing hash data
/// </summary>
public struct HashData : IComparable, IEquatable<HashData>
{
public long Size;
public string CRC;
public string MD5;
public string SHA1;
// Needs implementation
public int CompareTo(object obj)
{
return 0;
}
// Needs implementation
public bool Equals(HashData other)
{
return true;
}
}
/// <summary> /// <summary>
/// Intermediate struct for holding and processing rom data /// Intermediate struct for holding and processing rom data
/// </summary> /// </summary>
@@ -12,10 +35,7 @@ namespace SabreTools.Helper
public string GameDescription; public string GameDescription;
public string Name; public string Name;
public string Type; public string Type;
public long Size; public HashData HashData;
public string CRC;
public string MD5;
public string SHA1;
public DupeType Dupe; public DupeType Dupe;
public bool Nodump; public bool Nodump;
public string Date; public string Date;

View File

@@ -539,8 +539,11 @@ namespace SabreTools.Helper
Type = "rom", Type = "rom",
Name = reader.Entry.Key, Name = reader.Entry.Key,
Game = gamename, Game = gamename,
Size = (size == 0 ? reader.Entry.Size : size), HashData = new HashData
CRC = (crc == "" ? reader.Entry.Crc.ToString("X").ToLowerInvariant() : crc), {
Size = (size == 0 ? reader.Entry.Size : size),
CRC = (crc == "" ? reader.Entry.Crc.ToString("X").ToLowerInvariant() : crc),
},
}); });
} }
} }
@@ -617,10 +620,13 @@ namespace SabreTools.Helper
Type = "rom", Type = "rom",
Game = Path.GetFileNameWithoutExtension(input).ToLowerInvariant(), Game = Path.GetFileNameWithoutExtension(input).ToLowerInvariant(),
Name = Path.GetFileNameWithoutExtension(input).ToLowerInvariant(), Name = Path.GetFileNameWithoutExtension(input).ToLowerInvariant(),
Size = extractedsize, HashData = new HashData
CRC = gzcrc.ToLowerInvariant(), {
MD5 = gzmd5.ToLowerInvariant(), Size = extractedsize,
SHA1 = Path.GetFileNameWithoutExtension(input).ToLowerInvariant(), CRC = gzcrc.ToLowerInvariant(),
MD5 = gzmd5.ToLowerInvariant(),
SHA1 = Path.GetFileNameWithoutExtension(input).ToLowerInvariant(),
},
}; };
return rom; return rom;
@@ -656,7 +662,7 @@ namespace SabreTools.Helper
Rom rom = RomTools.GetSingleFileInfo(input); Rom rom = RomTools.GetSingleFileInfo(input);
// If it doesn't exist, create the output file and then write // If it doesn't exist, create the output file and then write
string outfile = Path.Combine(outdir, rom.SHA1 + ".gz"); string outfile = Path.Combine(outdir, rom.HashData.SHA1 + ".gz");
using (FileStream inputstream = new FileStream(input, FileMode.Open)) using (FileStream inputstream = new FileStream(input, FileMode.Open))
using (GZipStream output = new GZipStream(File.Open(outfile, FileMode.Create, FileAccess.Write), CompressionMode.Compress)) using (GZipStream output = new GZipStream(File.Open(outfile, FileMode.Create, FileAccess.Write), CompressionMode.Compress))
{ {
@@ -670,9 +676,9 @@ namespace SabreTools.Helper
{ {
// Write standard header and TGZ info // Write standard header and TGZ info
byte[] data = Constants.TorrentGZHeader byte[] data = Constants.TorrentGZHeader
.Concat(StringToByteArray(rom.MD5)) // MD5 .Concat(StringToByteArray(rom.HashData.MD5)) // MD5
.Concat(StringToByteArray(rom.CRC)) // CRC .Concat(StringToByteArray(rom.HashData.CRC)) // CRC
.Concat(BitConverter.GetBytes(rom.Size).Reverse().ToArray()) // Long size (Mirrored) .Concat(BitConverter.GetBytes(rom.HashData.Size).Reverse().ToArray()) // Long size (Mirrored)
.ToArray(); .ToArray();
sw.Write(data); sw.Write(data);
@@ -698,7 +704,7 @@ namespace SabreTools.Helper
// If we're in romba mode, create the subfolder and move the file // If we're in romba mode, create the subfolder and move the file
if (romba) if (romba)
{ {
string subfolder = Path.Combine(rom.SHA1.Substring(0, 2), rom.SHA1.Substring(2, 2), rom.SHA1.Substring(4, 2), rom.SHA1.Substring(6, 2)); string subfolder = Path.Combine(rom.HashData.SHA1.Substring(0, 2), rom.HashData.SHA1.Substring(2, 2), rom.HashData.SHA1.Substring(4, 2), rom.HashData.SHA1.Substring(6, 2));
outdir = Path.Combine(outdir, subfolder); outdir = Path.Combine(outdir, subfolder);
if (!Directory.Exists(outdir)) if (!Directory.Exists(outdir))
{ {

View File

@@ -209,16 +209,16 @@ namespace SabreTools.Helper
rom.Name = gc[i].Replace("\"", ""); rom.Name = gc[i].Replace("\"", "");
break; break;
case "size": case "size":
Int64.TryParse(gc[i].Replace("\"", ""), out rom.Size); Int64.TryParse(gc[i].Replace("\"", ""), out rom.HashData.Size);
break; break;
case "crc": case "crc":
rom.CRC = gc[i].Replace("\"", "").ToLowerInvariant(); rom.HashData.CRC = gc[i].Replace("\"", "").ToLowerInvariant();
break; break;
case "md5": case "md5":
rom.MD5 = gc[i].Replace("\"", "").ToLowerInvariant(); rom.HashData.MD5 = gc[i].Replace("\"", "").ToLowerInvariant();
break; break;
case "sha1": case "sha1":
rom.SHA1 = gc[i].Replace("\"", "").ToLowerInvariant(); rom.HashData.SHA1 = gc[i].Replace("\"", "").ToLowerInvariant();
break; break;
case "flags": case "flags":
if (gc[i].Replace("\"", "").ToLowerInvariant() == "nodump") if (gc[i].Replace("\"", "").ToLowerInvariant() == "nodump")
@@ -266,16 +266,16 @@ namespace SabreTools.Helper
rom.Name = val; rom.Name = val;
break; break;
case "size": case "size":
Int64.TryParse(val, out rom.Size); Int64.TryParse(val, out rom.HashData.Size);
break; break;
case "crc": case "crc":
rom.CRC = val.ToLowerInvariant(); rom.HashData.CRC = val.ToLowerInvariant();
break; break;
case "md5": case "md5":
rom.MD5 = val.ToLowerInvariant(); rom.HashData.MD5 = val.ToLowerInvariant();
break; break;
case "sha1": case "sha1":
rom.SHA1 = val.ToLowerInvariant(); rom.HashData.SHA1 = val.ToLowerInvariant();
break; break;
case "flags": case "flags":
if (val.ToLowerInvariant() == "nodump") if (val.ToLowerInvariant() == "nodump")
@@ -292,20 +292,20 @@ namespace SabreTools.Helper
} }
// Sanitize the hashes from null, hex sizes, and "true blank" strings // Sanitize the hashes from null, hex sizes, and "true blank" strings
rom.CRC = RomTools.CleanHashData(rom.CRC, Constants.CRCLength); rom.HashData.CRC = RomTools.CleanHashData(rom.HashData.CRC, Constants.CRCLength);
rom.MD5 = RomTools.CleanHashData(rom.MD5, Constants.MD5Length); rom.HashData.MD5 = RomTools.CleanHashData(rom.HashData.MD5, Constants.MD5Length);
rom.SHA1 = RomTools.CleanHashData(rom.SHA1, Constants.SHA1Length); rom.HashData.SHA1 = RomTools.CleanHashData(rom.HashData.SHA1, Constants.SHA1Length);
// If we have a rom and it's missing size AND the hashes match a 0-byte file, fill in the rest of the info // If we have a rom and it's missing size AND the hashes match a 0-byte file, fill in the rest of the info
if (rom.Type == "rom" && (rom.Size == 0 || rom.Size == -1) && ((rom.CRC == Constants.CRCZero || rom.CRC == "") || rom.MD5 == Constants.MD5Zero || rom.SHA1 == Constants.SHA1Zero)) if (rom.Type == "rom" && (rom.HashData.Size == 0 || rom.HashData.Size == -1) && ((rom.HashData.CRC == Constants.CRCZero || rom.HashData.CRC == "") || rom.HashData.MD5 == Constants.MD5Zero || rom.HashData.SHA1 == Constants.SHA1Zero))
{ {
rom.Size = Constants.SizeZero; rom.HashData.Size = Constants.SizeZero;
rom.CRC = Constants.CRCZero; rom.HashData.CRC = Constants.CRCZero;
rom.MD5 = Constants.MD5Zero; rom.HashData.MD5 = Constants.MD5Zero;
rom.SHA1 = Constants.SHA1Zero; rom.HashData.SHA1 = Constants.SHA1Zero;
} }
// If the file has no size and it's not the above case, skip and log // If the file has no size and it's not the above case, skip and log
else if (rom.Type == "rom" && (rom.Size == 0 || rom.Size == -1)) else if (rom.Type == "rom" && (rom.HashData.Size == 0 || rom.HashData.Size == -1))
{ {
logger.Warning("Incomplete entry for \"" + rom.Name + "\" will be output as nodump"); logger.Warning("Incomplete entry for \"" + rom.Name + "\" will be output as nodump");
rom.Nodump = true; rom.Nodump = true;
@@ -314,11 +314,11 @@ namespace SabreTools.Helper
// If we have a disk, make sure that the value for size is -1 // If we have a disk, make sure that the value for size is -1
if (rom.Type == "disk") if (rom.Type == "disk")
{ {
rom.Size = -1; rom.HashData.Size = -1;
} }
// Now add the rom to the dictionary // Now add the rom to the dictionary
string key = rom.Size + "-" + rom.CRC; string key = rom.HashData.Size + "-" + rom.HashData.CRC;
if (datdata.Roms.ContainsKey(key)) if (datdata.Roms.ContainsKey(key))
{ {
datdata.Roms[key].Add(rom); datdata.Roms[key].Add(rom);
@@ -333,10 +333,10 @@ namespace SabreTools.Helper
// Add statistical data // Add statistical data
datdata.RomCount += (rom.Type == "rom" ? 1 : 0); datdata.RomCount += (rom.Type == "rom" ? 1 : 0);
datdata.DiskCount += (rom.Type == "disk" ? 1 : 0); datdata.DiskCount += (rom.Type == "disk" ? 1 : 0);
datdata.TotalSize += (rom.Nodump ? 0 : rom.Size); datdata.TotalSize += (rom.Nodump ? 0 : rom.HashData.Size);
datdata.CRCCount += (String.IsNullOrEmpty(rom.CRC) ? 0 : 1); datdata.CRCCount += (String.IsNullOrEmpty(rom.HashData.CRC) ? 0 : 1);
datdata.MD5Count += (String.IsNullOrEmpty(rom.MD5) ? 0 : 1); datdata.MD5Count += (String.IsNullOrEmpty(rom.HashData.MD5) ? 0 : 1);
datdata.SHA1Count += (String.IsNullOrEmpty(rom.SHA1) ? 0 : 1); datdata.SHA1Count += (String.IsNullOrEmpty(rom.HashData.SHA1) ? 0 : 1);
datdata.NodumpCount += (rom.Nodump ? 1 : 0); datdata.NodumpCount += (rom.Nodump ? 1 : 0);
} }
// If the line is anything but a rom or disk and we're in a block // If the line is anything but a rom or disk and we're in a block
@@ -568,26 +568,29 @@ namespace SabreTools.Helper
Game = rominfo[3], Game = rominfo[3],
GameDescription = rominfo[4], GameDescription = rominfo[4],
Name = rominfo[5], Name = rominfo[5],
CRC = rominfo[6].ToLowerInvariant(), HashData = new HashData
Size = Int64.Parse(rominfo[7]), {
CRC = rominfo[6].ToLowerInvariant(),
Size = Int64.Parse(rominfo[7]),
},
Metadata = new SourceMetadata { SystemID = sysid, SourceID = srcid }, Metadata = new SourceMetadata { SystemID = sysid, SourceID = srcid },
}; };
// Sanitize the hashes from null, hex sizes, and "true blank" strings // Sanitize the hashes from null, hex sizes, and "true blank" strings
rom.CRC = RomTools.CleanHashData(rom.CRC, Constants.CRCLength); rom.HashData.CRC = RomTools.CleanHashData(rom.HashData.CRC, Constants.CRCLength);
rom.MD5 = RomTools.CleanHashData(rom.MD5, Constants.MD5Length); rom.HashData.MD5 = RomTools.CleanHashData(rom.HashData.MD5, Constants.MD5Length);
rom.SHA1 = RomTools.CleanHashData(rom.SHA1, Constants.SHA1Length); rom.HashData.SHA1 = RomTools.CleanHashData(rom.HashData.SHA1, Constants.SHA1Length);
// If we have a rom and it's missing size AND the hashes match a 0-byte file, fill in the rest of the info // If we have a rom and it's missing size AND the hashes match a 0-byte file, fill in the rest of the info
if (rom.Type == "rom" && (rom.Size == 0 || rom.Size == -1) && ((rom.CRC == Constants.CRCZero || rom.CRC == "") || rom.MD5 == Constants.MD5Zero || rom.SHA1 == Constants.SHA1Zero)) if (rom.Type == "rom" && (rom.HashData.Size == 0 || rom.HashData.Size == -1) && ((rom.HashData.CRC == Constants.CRCZero || rom.HashData.CRC == "") || rom.HashData.MD5 == Constants.MD5Zero || rom.HashData.SHA1 == Constants.SHA1Zero))
{ {
rom.Size = Constants.SizeZero; rom.HashData.Size = Constants.SizeZero;
rom.CRC = Constants.CRCZero; rom.HashData.CRC = Constants.CRCZero;
rom.MD5 = Constants.MD5Zero; rom.HashData.MD5 = Constants.MD5Zero;
rom.SHA1 = Constants.SHA1Zero; rom.HashData.SHA1 = Constants.SHA1Zero;
} }
// If the file has no size and it's not the above case, skip and log // If the file has no size and it's not the above case, skip and log
else if (rom.Type == "rom" && (rom.Size == 0 || rom.Size == -1)) else if (rom.Type == "rom" && (rom.HashData.Size == 0 || rom.HashData.Size == -1))
{ {
logger.Warning("Incomplete entry for \"" + rom.Name + "\" will be output as nodump"); logger.Warning("Incomplete entry for \"" + rom.Name + "\" will be output as nodump");
rom.Nodump = true; rom.Nodump = true;
@@ -596,11 +599,11 @@ namespace SabreTools.Helper
// If we have a disk, make sure that the value for size is -1 // If we have a disk, make sure that the value for size is -1
if (rom.Type == "disk") if (rom.Type == "disk")
{ {
rom.Size = -1; rom.HashData.Size = -1;
} }
// Add the new rom // Add the new rom
string key = rom.Size + "-" + rom.CRC; string key = rom.HashData.Size + "-" + rom.HashData.CRC;
if (datdata.Roms.ContainsKey(key)) if (datdata.Roms.ContainsKey(key))
{ {
datdata.Roms[key].Add(rom); datdata.Roms[key].Add(rom);
@@ -615,10 +618,10 @@ namespace SabreTools.Helper
// Add statistical data // Add statistical data
datdata.RomCount += (rom.Type == "rom" ? 1 : 0); datdata.RomCount += (rom.Type == "rom" ? 1 : 0);
datdata.DiskCount += (rom.Type == "disk" ? 1 : 0); datdata.DiskCount += (rom.Type == "disk" ? 1 : 0);
datdata.TotalSize += (rom.Nodump ? 0 : rom.Size); datdata.TotalSize += (rom.Nodump ? 0 : rom.HashData.Size);
datdata.CRCCount += (String.IsNullOrEmpty(rom.CRC) ? 0 : 1); datdata.CRCCount += (String.IsNullOrEmpty(rom.HashData.CRC) ? 0 : 1);
datdata.MD5Count += (String.IsNullOrEmpty(rom.MD5) ? 0 : 1); datdata.MD5Count += (String.IsNullOrEmpty(rom.HashData.MD5) ? 0 : 1);
datdata.SHA1Count += (String.IsNullOrEmpty(rom.SHA1) ? 0 : 1); datdata.SHA1Count += (String.IsNullOrEmpty(rom.HashData.SHA1) ? 0 : 1);
datdata.NodumpCount += (rom.Nodump ? 1 : 0); datdata.NodumpCount += (rom.Nodump ? 1 : 0);
} }
} }
@@ -674,13 +677,16 @@ namespace SabreTools.Helper
Name = "null", Name = "null",
Game = tempgame, Game = tempgame,
GameDescription = tempgame, GameDescription = tempgame,
Size = -1, HashData = new HashData
CRC = "null", {
MD5 = "null", Size = -1,
SHA1 = "null", CRC = "null",
MD5 = "null",
SHA1 = "null",
},
}; };
key = rom.Size + "-" + rom.CRC; key = rom.HashData.Size + "-" + rom.HashData.CRC;
if (datdata.Roms.ContainsKey(key)) if (datdata.Roms.ContainsKey(key))
{ {
datdata.Roms[key].Add(rom); datdata.Roms[key].Add(rom);
@@ -695,10 +701,10 @@ namespace SabreTools.Helper
// Add statistical data // Add statistical data
datdata.RomCount += (rom.Type == "rom" ? 1 : 0); datdata.RomCount += (rom.Type == "rom" ? 1 : 0);
datdata.DiskCount += (rom.Type == "disk" ? 1 : 0); datdata.DiskCount += (rom.Type == "disk" ? 1 : 0);
datdata.TotalSize += (rom.Nodump ? 0 : rom.Size); datdata.TotalSize += (rom.Nodump ? 0 : rom.HashData.Size);
datdata.CRCCount += (String.IsNullOrEmpty(rom.CRC) ? 0 : 1); datdata.CRCCount += (String.IsNullOrEmpty(rom.HashData.CRC) ? 0 : 1);
datdata.MD5Count += (String.IsNullOrEmpty(rom.MD5) ? 0 : 1); datdata.MD5Count += (String.IsNullOrEmpty(rom.HashData.MD5) ? 0 : 1);
datdata.SHA1Count += (String.IsNullOrEmpty(rom.SHA1) ? 0 : 1); datdata.SHA1Count += (String.IsNullOrEmpty(rom.HashData.SHA1) ? 0 : 1);
datdata.NodumpCount += (rom.Nodump ? 1 : 0); datdata.NodumpCount += (rom.Nodump ? 1 : 0);
} }
@@ -1067,7 +1073,7 @@ namespace SabreTools.Helper
{ {
int index = datdata.Roms[key].Count() - 1; int index = datdata.Roms[key].Count() - 1;
Rom lastrom = datdata.Roms[key][index]; Rom lastrom = datdata.Roms[key][index];
lastrom.Size += size; lastrom.HashData.Size += size;
datdata.Roms[key].RemoveAt(index); datdata.Roms[key].RemoveAt(index);
datdata.Roms[key].Add(lastrom); datdata.Roms[key].Add(lastrom);
continue; continue;
@@ -1118,10 +1124,13 @@ namespace SabreTools.Helper
GameDescription = gamedesc, GameDescription = gamedesc,
Name = subreader.GetAttribute("name"), Name = subreader.GetAttribute("name"),
Type = subreader.Name, Type = subreader.Name,
Size = size, HashData = new HashData
CRC = crc, {
MD5 = md5, Size = size,
SHA1 = sha1, CRC = crc,
MD5 = md5,
SHA1 = sha1,
},
Nodump = nodump, Nodump = nodump,
Date = date, Date = date,
Metadata = new SourceMetadata { SystemID = sysid, System = filename, SourceID = srcid }, Metadata = new SourceMetadata { SystemID = sysid, System = filename, SourceID = srcid },
@@ -1141,10 +1150,10 @@ namespace SabreTools.Helper
// Add statistical data // Add statistical data
datdata.RomCount += (rom.Type == "rom" ? 1 : 0); datdata.RomCount += (rom.Type == "rom" ? 1 : 0);
datdata.DiskCount += (rom.Type == "disk" ? 1 : 0); datdata.DiskCount += (rom.Type == "disk" ? 1 : 0);
datdata.TotalSize += (rom.Nodump ? 0 : rom.Size); datdata.TotalSize += (rom.Nodump ? 0 : rom.HashData.Size);
datdata.CRCCount += (String.IsNullOrEmpty(rom.CRC) ? 0 : 1); datdata.CRCCount += (String.IsNullOrEmpty(rom.HashData.CRC) ? 0 : 1);
datdata.MD5Count += (String.IsNullOrEmpty(rom.MD5) ? 0 : 1); datdata.MD5Count += (String.IsNullOrEmpty(rom.HashData.MD5) ? 0 : 1);
datdata.SHA1Count += (String.IsNullOrEmpty(rom.SHA1) ? 0 : 1); datdata.SHA1Count += (String.IsNullOrEmpty(rom.HashData.SHA1) ? 0 : 1);
datdata.NodumpCount += (rom.Nodump ? 1 : 0); datdata.NodumpCount += (rom.Nodump ? 1 : 0);
} }
// Otherwise, log that it wasn't added // Otherwise, log that it wasn't added
@@ -1171,13 +1180,16 @@ namespace SabreTools.Helper
Name = "null", Name = "null",
Game = tempname, Game = tempname,
GameDescription = tempname, GameDescription = tempname,
Size = -1, HashData = new HashData
CRC = "null", {
MD5 = "null", Size = -1,
SHA1 = "null", CRC = "null",
MD5 = "null",
SHA1 = "null",
}
}; };
key = rom.Size + "-" + rom.CRC; key = rom.HashData.Size + "-" + rom.HashData.CRC;
if (datdata.Roms.ContainsKey(key)) if (datdata.Roms.ContainsKey(key))
{ {
datdata.Roms[key].Add(rom); datdata.Roms[key].Add(rom);
@@ -1192,10 +1204,10 @@ namespace SabreTools.Helper
// Add statistical data // Add statistical data
datdata.RomCount += (rom.Type == "rom" ? 1 : 0); datdata.RomCount += (rom.Type == "rom" ? 1 : 0);
datdata.DiskCount += (rom.Type == "disk" ? 1 : 0); datdata.DiskCount += (rom.Type == "disk" ? 1 : 0);
datdata.TotalSize += (rom.Nodump ? 0 : rom.Size); datdata.TotalSize += (rom.Nodump ? 0 : rom.HashData.Size);
datdata.CRCCount += (String.IsNullOrEmpty(rom.CRC) ? 0 : 1); datdata.CRCCount += (String.IsNullOrEmpty(rom.HashData.CRC) ? 0 : 1);
datdata.MD5Count += (String.IsNullOrEmpty(rom.MD5) ? 0 : 1); datdata.MD5Count += (String.IsNullOrEmpty(rom.HashData.MD5) ? 0 : 1);
datdata.SHA1Count += (String.IsNullOrEmpty(rom.SHA1) ? 0 : 1); datdata.SHA1Count += (String.IsNullOrEmpty(rom.HashData.SHA1) ? 0 : 1);
datdata.NodumpCount += (rom.Nodump ? 1 : 0); datdata.NodumpCount += (rom.Nodump ? 1 : 0);
} }
@@ -1286,7 +1298,7 @@ namespace SabreTools.Helper
{ {
int index = datdata.Roms[key].Count() - 1; int index = datdata.Roms[key].Count() - 1;
Rom lastrom = datdata.Roms[key][index]; Rom lastrom = datdata.Roms[key][index];
lastrom.Size += size; lastrom.HashData.Size += size;
datdata.Roms[key].RemoveAt(index); datdata.Roms[key].RemoveAt(index);
datdata.Roms[key].Add(lastrom); datdata.Roms[key].Add(lastrom);
continue; continue;
@@ -1345,10 +1357,13 @@ namespace SabreTools.Helper
Game = tempname, Game = tempname,
Name = xtr.GetAttribute("name"), Name = xtr.GetAttribute("name"),
Type = xtr.GetAttribute("type"), Type = xtr.GetAttribute("type"),
Size = size, HashData = new HashData
CRC = crc, {
MD5 = md5, Size = size,
SHA1 = sha1, CRC = crc,
MD5 = md5,
SHA1 = sha1,
},
Nodump = nodump, Nodump = nodump,
Date = date, Date = date,
Metadata = new SourceMetadata { SystemID = sysid, System = filename, SourceID = srcid }, Metadata = new SourceMetadata { SystemID = sysid, System = filename, SourceID = srcid },
@@ -1368,10 +1383,10 @@ namespace SabreTools.Helper
// Add statistical data // Add statistical data
datdata.RomCount += (rom.Type == "rom" ? 1 : 0); datdata.RomCount += (rom.Type == "rom" ? 1 : 0);
datdata.DiskCount += (rom.Type == "disk" ? 1 : 0); datdata.DiskCount += (rom.Type == "disk" ? 1 : 0);
datdata.TotalSize += (rom.Nodump ? 0 : rom.Size); datdata.TotalSize += (rom.Nodump ? 0 : rom.HashData.Size);
datdata.CRCCount += (String.IsNullOrEmpty(rom.CRC) ? 0 : 1); datdata.CRCCount += (String.IsNullOrEmpty(rom.HashData.CRC) ? 0 : 1);
datdata.MD5Count += (String.IsNullOrEmpty(rom.MD5) ? 0 : 1); datdata.MD5Count += (String.IsNullOrEmpty(rom.HashData.MD5) ? 0 : 1);
datdata.SHA1Count += (String.IsNullOrEmpty(rom.SHA1) ? 0 : 1); datdata.SHA1Count += (String.IsNullOrEmpty(rom.HashData.SHA1) ? 0 : 1);
datdata.NodumpCount += (rom.Nodump ? 1 : 0); datdata.NodumpCount += (rom.Nodump ? 1 : 0);
} }
xtr.Read(); xtr.Read();
@@ -1508,7 +1523,7 @@ namespace SabreTools.Helper
foreach (Rom rom in newroms) foreach (Rom rom in newroms)
{ {
count++; count++;
string key = rom.Size + "-" + rom.CRC; string key = rom.HashData.Size + "-" + rom.HashData.CRC;
if (sortable.ContainsKey(key)) if (sortable.ContainsKey(key))
{ {
sortable[key].Add(rom); sortable[key].Add(rom);
@@ -1831,17 +1846,17 @@ namespace SabreTools.Helper
} }
// Filter on rom size // Filter on rom size
if (seq != -1 && rom.Size != seq) if (seq != -1 && rom.HashData.Size != seq)
{ {
continue; continue;
} }
else else
{ {
if (sgt != -1 && rom.Size < sgt) if (sgt != -1 && rom.HashData.Size < sgt)
{ {
continue; continue;
} }
if (slt != -1 && rom.Size > slt) if (slt != -1 && rom.HashData.Size > slt)
{ {
continue; continue;
} }
@@ -1850,15 +1865,15 @@ namespace SabreTools.Helper
// Filter on crc // Filter on crc
if (crc != "") if (crc != "")
{ {
if (crc.StartsWith("*") && crc.EndsWith("*") && !rom.CRC.ToLowerInvariant().Contains(crc.ToLowerInvariant().Replace("*", ""))) if (crc.StartsWith("*") && crc.EndsWith("*") && !rom.HashData.CRC.ToLowerInvariant().Contains(crc.ToLowerInvariant().Replace("*", "")))
{ {
continue; continue;
} }
else if (crc.StartsWith("*") && !rom.CRC.EndsWith(crc.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase)) else if (crc.StartsWith("*") && !rom.HashData.CRC.EndsWith(crc.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase))
{ {
continue; continue;
} }
else if (crc.EndsWith("*") && !rom.CRC.StartsWith(crc.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase)) else if (crc.EndsWith("*") && !rom.HashData.CRC.StartsWith(crc.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase))
{ {
continue; continue;
} }
@@ -1867,15 +1882,15 @@ namespace SabreTools.Helper
// Filter on md5 // Filter on md5
if (md5 != "") if (md5 != "")
{ {
if (md5.StartsWith("*") && md5.EndsWith("*") && !rom.MD5.ToLowerInvariant().Contains(md5.ToLowerInvariant().Replace("*", ""))) if (md5.StartsWith("*") && md5.EndsWith("*") && !rom.HashData.MD5.ToLowerInvariant().Contains(md5.ToLowerInvariant().Replace("*", "")))
{ {
continue; continue;
} }
else if (md5.StartsWith("*") && !rom.MD5.EndsWith(md5.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase)) else if (md5.StartsWith("*") && !rom.HashData.MD5.EndsWith(md5.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase))
{ {
continue; continue;
} }
else if (md5.EndsWith("*") && !rom.MD5.StartsWith(md5.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase)) else if (md5.EndsWith("*") && !rom.HashData.MD5.StartsWith(md5.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase))
{ {
continue; continue;
} }
@@ -1884,15 +1899,15 @@ namespace SabreTools.Helper
// Filter on sha1 // Filter on sha1
if (sha1 != "") if (sha1 != "")
{ {
if (sha1.StartsWith("*") && sha1.EndsWith("*") && !rom.SHA1.ToLowerInvariant().Contains(sha1.ToLowerInvariant().Replace("*", ""))) if (sha1.StartsWith("*") && sha1.EndsWith("*") && !rom.HashData.SHA1.ToLowerInvariant().Contains(sha1.ToLowerInvariant().Replace("*", "")))
{ {
continue; continue;
} }
else if (sha1.StartsWith("*") && !rom.SHA1.EndsWith(sha1.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase)) else if (sha1.StartsWith("*") && !rom.HashData.SHA1.EndsWith(sha1.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase))
{ {
continue; continue;
} }
else if (sha1.EndsWith("*") && !rom.SHA1.StartsWith(sha1.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase)) else if (sha1.EndsWith("*") && !rom.HashData.SHA1.StartsWith(sha1.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase))
{ {
continue; continue;
} }

View File

@@ -115,7 +115,7 @@ namespace SabreTools.Helper
} }
// If we have a "null" game (created by DATFromDir or something similar), log it to file // If we have a "null" game (created by DATFromDir or something similar), log it to file
if (rom.Name == "null" && rom.Size == -1 && rom.CRC == "null" && rom.MD5 == "null" && rom.SHA1 == "null") if (rom.Name == "null" && rom.HashData.Size == -1 && rom.HashData.CRC == "null" && rom.HashData.MD5 == "null" && rom.HashData.SHA1 == "null")
{ {
logger.Log("Empty folder found: " + rom.Game); logger.Log("Empty folder found: " + rom.Game);
@@ -123,10 +123,10 @@ namespace SabreTools.Helper
if (datdata.OutputFormat != OutputFormat.SabreDat && datdata.OutputFormat != OutputFormat.MissFile) if (datdata.OutputFormat != OutputFormat.SabreDat && datdata.OutputFormat != OutputFormat.MissFile)
{ {
rom.Name = "-"; rom.Name = "-";
rom.Size = Constants.SizeZero; rom.HashData.Size = Constants.SizeZero;
rom.CRC = Constants.CRCZero; rom.HashData.CRC = Constants.CRCZero;
rom.MD5 = Constants.MD5Zero; rom.HashData.MD5 = Constants.MD5Zero;
rom.SHA1 = Constants.SHA1Zero; rom.HashData.SHA1 = Constants.SHA1Zero;
} }
// Otherwise, set the new path and such, write out, and continue // Otherwise, set the new path and such, write out, and continue
@@ -422,10 +422,10 @@ namespace SabreTools.Helper
{ {
case OutputFormat.ClrMamePro: case OutputFormat.ClrMamePro:
state += "\t" + rom.Type + " ( name \"" + rom.Name + "\"" + state += "\t" + rom.Type + " ( name \"" + rom.Name + "\"" +
(rom.Size != -1 ? " size " + rom.Size : "") + (rom.HashData.Size != -1 ? " size " + rom.HashData.Size : "") +
(!String.IsNullOrEmpty(rom.CRC) ? " crc " + rom.CRC.ToLowerInvariant() : "") + (!String.IsNullOrEmpty(rom.HashData.CRC) ? " crc " + rom.HashData.CRC.ToLowerInvariant() : "") +
(!String.IsNullOrEmpty(rom.MD5) ? " md5 " + rom.MD5.ToLowerInvariant() : "") + (!String.IsNullOrEmpty(rom.HashData.MD5) ? " md5 " + rom.HashData.MD5.ToLowerInvariant() : "") +
(!String.IsNullOrEmpty(rom.SHA1) ? " sha1 " + rom.SHA1.ToLowerInvariant() : "") + (!String.IsNullOrEmpty(rom.HashData.SHA1) ? " sha1 " + rom.HashData.SHA1.ToLowerInvariant() : "") +
(!String.IsNullOrEmpty(rom.Date) ? " date \"" + rom.Date + "\"" : "") + (!String.IsNullOrEmpty(rom.Date) ? " date \"" + rom.Date + "\"" : "") +
(rom.Nodump ? " flags nodump" : "") + (rom.Nodump ? " flags nodump" : "") +
" )\n"; " )\n";
@@ -435,17 +435,17 @@ namespace SabreTools.Helper
string post = (datdata.Quotes ? "\"" : "") + datdata.Postfix; string post = (datdata.Quotes ? "\"" : "") + datdata.Postfix;
// Check for special strings in prefix and postfix // Check for special strings in prefix and postfix
pre = pre.Replace("%crc%", rom.CRC).Replace("%md5%", rom.MD5).Replace("%sha1%", rom.SHA1).Replace("%size%", rom.Size.ToString()); pre = pre.Replace("%crc%", rom.HashData.CRC).Replace("%md5%", rom.HashData.MD5).Replace("%sha1%", rom.HashData.SHA1).Replace("%size%", rom.HashData.Size.ToString());
post = post.Replace("%crc%", rom.CRC).Replace("%md5%", rom.MD5).Replace("%sha1%", rom.SHA1).Replace("%size%", rom.Size.ToString()); post = post.Replace("%crc%", rom.HashData.CRC).Replace("%md5%", rom.HashData.MD5).Replace("%sha1%", rom.HashData.SHA1).Replace("%size%", rom.HashData.Size.ToString());
// If we're in Romba mode, the state is consistent // If we're in Romba mode, the state is consistent
if (datdata.Romba) if (datdata.Romba)
{ {
// We can only write out if there's a SHA-1 // We can only write out if there's a SHA-1
if (rom.SHA1 != "") if (rom.HashData.SHA1 != "")
{ {
string name = rom.SHA1.Substring(0, 2) + "/" + rom.SHA1.Substring(2, 2) + "/" + rom.SHA1.Substring(4, 2) + "/" + string name = rom.HashData.SHA1.Substring(0, 2) + "/" + rom.HashData.SHA1.Substring(2, 2) + "/" + rom.HashData.SHA1.Substring(4, 2) + "/" +
rom.SHA1.Substring(6, 2) + "/" + rom.SHA1 + ".gz"; rom.HashData.SHA1.Substring(6, 2) + "/" + rom.HashData.SHA1 + ".gz";
state += pre + name + post + "\n"; state += pre + name + post + "\n";
} }
} }
@@ -453,16 +453,16 @@ namespace SabreTools.Helper
else if (datdata.TSV == true) else if (datdata.TSV == true)
{ {
string inline = "\"" + datdata.FileName + "\"\t\"" + datdata.Name + "\"\t\"" + datdata.Description + "\"\t\"" + rom.Game + "\"\t\"" + rom.Game + "\"\t\"" + string inline = "\"" + datdata.FileName + "\"\t\"" + datdata.Name + "\"\t\"" + datdata.Description + "\"\t\"" + rom.Game + "\"\t\"" + rom.Game + "\"\t\"" +
rom.Type + "\"\t\"" + (rom.Type == "rom" ? rom.Name : "") + "\"\t\"" + (rom.Type == "disk" ? rom.Name : "") + "\"\t\"" + rom.Size + "\"\t\"" + rom.Type + "\"\t\"" + (rom.Type == "rom" ? rom.Name : "") + "\"\t\"" + (rom.Type == "disk" ? rom.Name : "") + "\"\t\"" + rom.HashData.Size + "\"\t\"" +
rom.CRC + "\"\t\"" + rom.MD5 + "\"\t\"" + rom.SHA1 + "\"\t" + (rom.Nodump ? "\"Nodump\"" : "\"\""); rom.HashData.CRC + "\"\t\"" + rom.HashData.MD5 + "\"\t\"" + rom.HashData.SHA1 + "\"\t" + (rom.Nodump ? "\"Nodump\"" : "\"\"");
state += pre + inline + post + "\n"; state += pre + inline + post + "\n";
} }
// If we're in CSV mode, similarly the state is consistent // If we're in CSV mode, similarly the state is consistent
else if (datdata.TSV == false) else if (datdata.TSV == false)
{ {
string inline = "\"" + datdata.FileName + "\",\"" + datdata.Name + "\",\"" + datdata.Description + "\",\"" + rom.Game + "\",\"" + rom.Game + "\",\"" + string inline = "\"" + datdata.FileName + "\",\"" + datdata.Name + "\",\"" + datdata.Description + "\",\"" + rom.Game + "\",\"" + rom.Game + "\",\"" +
rom.Type + "\",\"" + (rom.Type == "rom" ? rom.Name : "") + "\",\"" + (rom.Type == "disk" ? rom.Name : "") + "\",\"" + rom.Size + "\",\"" + rom.Type + "\",\"" + (rom.Type == "rom" ? rom.Name : "") + "\",\"" + (rom.Type == "disk" ? rom.Name : "") + "\",\"" + rom.HashData.Size + "\",\"" +
rom.CRC + "\",\"" + rom.MD5 + "\",\"" + rom.SHA1 + "\"," + (rom.Nodump ? "\"Nodump\"" : "\"\""); rom.HashData.CRC + "\",\"" + rom.HashData.MD5 + "\",\"" + rom.HashData.SHA1 + "\"," + (rom.Nodump ? "\"Nodump\"" : "\"\"");
state += pre + inline + post + "\n"; state += pre + inline + post + "\n";
} }
// Otherwise, use any flags // Otherwise, use any flags
@@ -499,8 +499,8 @@ namespace SabreTools.Helper
state += "¬¬¬" + HttpUtility.HtmlEncode(rom.Game) + state += "¬¬¬" + HttpUtility.HtmlEncode(rom.Game) +
"¬" + HttpUtility.HtmlEncode((String.IsNullOrEmpty(rom.GameDescription) ? rom.Game : rom.GameDescription)) + "¬" + HttpUtility.HtmlEncode((String.IsNullOrEmpty(rom.GameDescription) ? rom.Game : rom.GameDescription)) +
"¬" + HttpUtility.HtmlEncode(rom.Name) + "¬" + HttpUtility.HtmlEncode(rom.Name) +
"¬" + rom.CRC.ToLowerInvariant() + "¬" + rom.HashData.CRC.ToLowerInvariant() +
"¬" + (rom.Size != -1 ? rom.Size.ToString() : "") + "¬¬¬\n"; "¬" + (rom.HashData.Size != -1 ? rom.HashData.Size.ToString() : "") + "¬¬¬\n";
break; break;
case OutputFormat.SabreDat: case OutputFormat.SabreDat:
string prefix = ""; string prefix = "";
@@ -511,10 +511,10 @@ namespace SabreTools.Helper
state += prefix; state += prefix;
state += "<file type=\"" + rom.Type + "\" name=\"" + HttpUtility.HtmlEncode(rom.Name) + "\"" + state += "<file type=\"" + rom.Type + "\" name=\"" + HttpUtility.HtmlEncode(rom.Name) + "\"" +
(rom.Size != -1 ? " size=\"" + rom.Size + "\"" : "") + (rom.HashData.Size != -1 ? " size=\"" + rom.HashData.Size + "\"" : "") +
(!String.IsNullOrEmpty(rom.CRC) ? " crc=\"" + rom.CRC.ToLowerInvariant() + "\"" : "") + (!String.IsNullOrEmpty(rom.HashData.CRC) ? " crc=\"" + rom.HashData.CRC.ToLowerInvariant() + "\"" : "") +
(!String.IsNullOrEmpty(rom.MD5) ? " md5=\"" + rom.MD5.ToLowerInvariant() + "\"" : "") + (!String.IsNullOrEmpty(rom.HashData.MD5) ? " md5=\"" + rom.HashData.MD5.ToLowerInvariant() + "\"" : "") +
(!String.IsNullOrEmpty(rom.SHA1) ? " sha1=\"" + rom.SHA1.ToLowerInvariant() + "\"" : "") + (!String.IsNullOrEmpty(rom.HashData.SHA1) ? " sha1=\"" + rom.HashData.SHA1.ToLowerInvariant() + "\"" : "") +
(!String.IsNullOrEmpty(rom.Date) ? " date=\"" + rom.Date + "\"" : "") + (!String.IsNullOrEmpty(rom.Date) ? " date=\"" + rom.Date + "\"" : "") +
(rom.Nodump ? prefix + "/>\n" + prefix + "\t<flags>\n" + (rom.Nodump ? prefix + "/>\n" + prefix + "\t<flags>\n" +
prefix + "\t\t<flag name=\"status\" value=\"nodump\"/>\n" + prefix + "\t\t<flag name=\"status\" value=\"nodump\"/>\n" +
@@ -524,10 +524,10 @@ namespace SabreTools.Helper
break; break;
case OutputFormat.Xml: case OutputFormat.Xml:
state += "\t\t<" + rom.Type + " name=\"" + HttpUtility.HtmlEncode(rom.Name) + "\"" + state += "\t\t<" + rom.Type + " name=\"" + HttpUtility.HtmlEncode(rom.Name) + "\"" +
(rom.Size != -1 ? " size=\"" + rom.Size + "\"" : "") + (rom.HashData.Size != -1 ? " size=\"" + rom.HashData.Size + "\"" : "") +
(!String.IsNullOrEmpty(rom.CRC) ? " crc=\"" + rom.CRC.ToLowerInvariant() + "\"" : "") + (!String.IsNullOrEmpty(rom.HashData.CRC) ? " crc=\"" + rom.HashData.CRC.ToLowerInvariant() + "\"" : "") +
(!String.IsNullOrEmpty(rom.MD5) ? " md5=\"" + rom.MD5.ToLowerInvariant() + "\"" : "") + (!String.IsNullOrEmpty(rom.HashData.MD5) ? " md5=\"" + rom.HashData.MD5.ToLowerInvariant() + "\"" : "") +
(!String.IsNullOrEmpty(rom.SHA1) ? " sha1=\"" + rom.SHA1.ToLowerInvariant() + "\"" : "") + (!String.IsNullOrEmpty(rom.HashData.SHA1) ? " sha1=\"" + rom.HashData.SHA1.ToLowerInvariant() + "\"" : "") +
(!String.IsNullOrEmpty(rom.Date) ? " date=\"" + rom.Date + "\"" : "") + (!String.IsNullOrEmpty(rom.Date) ? " date=\"" + rom.Date + "\"" : "") +
(rom.Nodump ? " status=\"nodump\"" : "") + (rom.Nodump ? " status=\"nodump\"" : "") +
"/>\n"; "/>\n";

View File

@@ -30,10 +30,13 @@ namespace SabreTools.Helper
{ {
Name = Path.GetFileName(input), Name = Path.GetFileName(input),
Type = "rom", Type = "rom",
Size = (new FileInfo(input)).Length, HashData = new HashData
CRC = string.Empty, {
MD5 = string.Empty, Size = (new FileInfo(input)).Length,
SHA1 = string.Empty, CRC = string.Empty,
MD5 = string.Empty,
SHA1 = string.Empty,
}
}; };
try try
@@ -65,17 +68,17 @@ namespace SabreTools.Helper
} }
crc.TransformFinalBlock(buffer, 0, 0); crc.TransformFinalBlock(buffer, 0, 0);
rom.CRC = BitConverter.ToString(crc.Hash).Replace("-", "").ToLowerInvariant(); rom.HashData.CRC = BitConverter.ToString(crc.Hash).Replace("-", "").ToLowerInvariant();
if (!noMD5) if (!noMD5)
{ {
md5.TransformFinalBlock(buffer, 0, 0); md5.TransformFinalBlock(buffer, 0, 0);
rom.MD5 = BitConverter.ToString(md5.Hash).Replace("-", "").ToLowerInvariant(); rom.HashData.MD5 = BitConverter.ToString(md5.Hash).Replace("-", "").ToLowerInvariant();
} }
if (!noSHA1) if (!noSHA1)
{ {
sha1.TransformFinalBlock(buffer, 0, 0); sha1.TransformFinalBlock(buffer, 0, 0);
rom.SHA1 = BitConverter.ToString(sha1.Hash).Replace("-", "").ToLowerInvariant(); rom.HashData.SHA1 = BitConverter.ToString(sha1.Hash).Replace("-", "").ToLowerInvariant();
} }
} }
} }
@@ -134,9 +137,9 @@ namespace SabreTools.Helper
savedrom = lastrom; savedrom = lastrom;
pos = i; pos = i;
savedrom.CRC = (String.IsNullOrEmpty(savedrom.CRC) && !String.IsNullOrEmpty(rom.CRC) ? rom.CRC : savedrom.CRC); savedrom.HashData.CRC = (String.IsNullOrEmpty(savedrom.HashData.CRC) && !String.IsNullOrEmpty(rom.HashData.CRC) ? rom.HashData.CRC : savedrom.HashData.CRC);
savedrom.MD5 = (String.IsNullOrEmpty(savedrom.MD5) && !String.IsNullOrEmpty(rom.MD5) ? rom.MD5 : savedrom.MD5); savedrom.HashData.MD5 = (String.IsNullOrEmpty(savedrom.HashData.MD5) && !String.IsNullOrEmpty(rom.HashData.MD5) ? rom.HashData.MD5 : savedrom.HashData.MD5);
savedrom.SHA1 = (String.IsNullOrEmpty(savedrom.SHA1) && !String.IsNullOrEmpty(rom.SHA1) ? rom.SHA1 : savedrom.SHA1); savedrom.HashData.SHA1 = (String.IsNullOrEmpty(savedrom.HashData.SHA1) && !String.IsNullOrEmpty(rom.HashData.SHA1) ? rom.HashData.SHA1 : savedrom.HashData.SHA1);
savedrom.Dupe = dupetype; savedrom.Dupe = dupetype;
// If the current system has a lower ID than the previous, set the system accordingly // If the current system has a lower ID than the previous, set the system accordingly
@@ -248,23 +251,23 @@ namespace SabreTools.Helper
if (rom.Type == "rom" && lastrom.Type == "rom") if (rom.Type == "rom" && lastrom.Type == "rom")
{ {
dupefound = ((rom.Size == lastrom.Size) && dupefound = ((rom.HashData.Size == lastrom.HashData.Size) &&
((String.IsNullOrEmpty(rom.CRC) || String.IsNullOrEmpty(lastrom.CRC)) || rom.CRC == lastrom.CRC) && ((String.IsNullOrEmpty(rom.HashData.CRC) || String.IsNullOrEmpty(lastrom.HashData.CRC)) || rom.HashData.CRC == lastrom.HashData.CRC) &&
((String.IsNullOrEmpty(rom.MD5) || String.IsNullOrEmpty(lastrom.MD5)) || rom.MD5 == lastrom.MD5) && ((String.IsNullOrEmpty(rom.HashData.MD5) || String.IsNullOrEmpty(lastrom.HashData.MD5)) || rom.HashData.MD5 == lastrom.HashData.MD5) &&
((String.IsNullOrEmpty(rom.SHA1) || String.IsNullOrEmpty(lastrom.SHA1)) || rom.SHA1 == lastrom.SHA1) ((String.IsNullOrEmpty(rom.HashData.SHA1) || String.IsNullOrEmpty(lastrom.HashData.SHA1)) || rom.HashData.SHA1 == lastrom.HashData.SHA1)
); );
} }
else if (rom.Type == "disk" && lastrom.Type == "disk") else if (rom.Type == "disk" && lastrom.Type == "disk")
{ {
dupefound = (((String.IsNullOrEmpty(rom.MD5) || String.IsNullOrEmpty(lastrom.MD5)) || rom.MD5 == lastrom.MD5) && dupefound = (((String.IsNullOrEmpty(rom.HashData.MD5) || String.IsNullOrEmpty(lastrom.HashData.MD5)) || rom.HashData.MD5 == lastrom.HashData.MD5) &&
((String.IsNullOrEmpty(rom.SHA1) || String.IsNullOrEmpty(lastrom.SHA1)) || rom.SHA1 == lastrom.SHA1) ((String.IsNullOrEmpty(rom.HashData.SHA1) || String.IsNullOrEmpty(lastrom.HashData.SHA1)) || rom.HashData.SHA1 == lastrom.HashData.SHA1)
); );
} }
// More wonderful SHA-1 logging that has to be done // More wonderful SHA-1 logging that has to be done
if (rom.SHA1 == lastrom.SHA1 && rom.Size != lastrom.Size) if (rom.HashData.SHA1 == lastrom.HashData.SHA1 && rom.HashData.Size != lastrom.HashData.Size)
{ {
logger.User("SHA-1 mismatch - Hash: " + rom.SHA1); logger.User("SHA-1 mismatch - Hash: " + rom.HashData.SHA1);
} }
return dupefound; return dupefound;

View File

@@ -122,10 +122,10 @@ Please check the log folder if the stats scrolled offscreen");
{ {
datdata.RomCount += (rom.Type == "rom" ? 1 : 0); datdata.RomCount += (rom.Type == "rom" ? 1 : 0);
datdata.DiskCount += (rom.Type == "disk" ? 1 : 0); datdata.DiskCount += (rom.Type == "disk" ? 1 : 0);
datdata.TotalSize += (rom.Nodump ? 0 : rom.Size); datdata.TotalSize += (rom.Nodump ? 0 : rom.HashData.Size);
datdata.CRCCount += (String.IsNullOrEmpty(rom.CRC) ? 0 : 1); datdata.CRCCount += (String.IsNullOrEmpty(rom.HashData.CRC) ? 0 : 1);
datdata.MD5Count += (String.IsNullOrEmpty(rom.MD5) ? 0 : 1); datdata.MD5Count += (String.IsNullOrEmpty(rom.HashData.MD5) ? 0 : 1);
datdata.SHA1Count += (String.IsNullOrEmpty(rom.SHA1) ? 0 : 1); datdata.SHA1Count += (String.IsNullOrEmpty(rom.HashData.SHA1) ? 0 : 1);
datdata.NodumpCount += (rom.Nodump ? 1 : 0); datdata.NodumpCount += (rom.Nodump ? 1 : 0);
} }
} }

View File

@@ -178,13 +178,16 @@ namespace SabreTools
Path.DirectorySeparatorChar.ToString() : Path.DirectorySeparatorChar.ToString() :
"") + actualroot : "") + actualroot :
actualroot), actualroot),
Size = -1, HashData = new HashData
CRC = "null", {
MD5 = "null", Size = -1,
SHA1 = "null", CRC = "null",
MD5 = "null",
SHA1 = "null",
},
}; };
string key = rom.Size + "-" + rom.CRC; string key = rom.HashData.Size + "-" + rom.HashData.CRC;
if (_datdata.Roms.ContainsKey(key)) if (_datdata.Roms.ContainsKey(key))
{ {
_datdata.Roms[key].Add(rom); _datdata.Roms[key].Add(rom);
@@ -211,13 +214,16 @@ namespace SabreTools
Path.DirectorySeparatorChar.ToString() : Path.DirectorySeparatorChar.ToString() :
"") + actualroot : "") + actualroot :
actualroot), actualroot),
Size = -1, HashData = new HashData
CRC = "null", {
MD5 = "null", Size = -1,
SHA1 = "null", CRC = "null",
MD5 = "null",
SHA1 = "null",
},
}; };
string key = rom.Size + "-" + rom.CRC; string key = rom.HashData.Size + "-" + rom.HashData.CRC;
if (_datdata.Roms.ContainsKey(key)) if (_datdata.Roms.ContainsKey(key))
{ {
_datdata.Roms[key].Add(rom); _datdata.Roms[key].Add(rom);
@@ -257,15 +263,15 @@ namespace SabreTools
{ {
rom.Type = "rom"; rom.Type = "rom";
rom.Name = "-"; rom.Name = "-";
rom.Size = Constants.SizeZero; rom.HashData.Size = Constants.SizeZero;
rom.CRC = Constants.CRCZero; rom.HashData.CRC = Constants.CRCZero;
rom.MD5 = Constants.MD5Zero; rom.HashData.MD5 = Constants.MD5Zero;
rom.SHA1 = Constants.SHA1Zero; rom.HashData.SHA1 = Constants.SHA1Zero;
} }
if (_nowrite) if (_nowrite)
{ {
string inkey = rom.Size + "-" + rom.CRC; string inkey = rom.HashData.Size + "-" + rom.HashData.CRC;
if (_datdata.Roms.ContainsKey(inkey)) if (_datdata.Roms.ContainsKey(inkey))
{ {
_datdata.Roms[inkey].Add(rom); _datdata.Roms[inkey].Add(rom);
@@ -343,7 +349,7 @@ namespace SabreTools
if (_nowrite) if (_nowrite)
{ {
string key = rom.Size + "-" + rom.CRC; string key = rom.HashData.Size + "-" + rom.HashData.CRC;
if (_datdata.Roms.ContainsKey(key)) if (_datdata.Roms.ContainsKey(key))
{ {
_datdata.Roms[key].Add(rom); _datdata.Roms[key].Add(rom);
@@ -515,7 +521,7 @@ namespace SabreTools
if (_nowrite) if (_nowrite)
{ {
string key = rom.Size + "-" + rom.CRC; string key = rom.HashData.Size + "-" + rom.HashData.CRC;
if (_datdata.Roms.ContainsKey(key)) if (_datdata.Roms.ContainsKey(key))
{ {
_datdata.Roms[key].Add(rom); _datdata.Roms[key].Add(rom);

View File

@@ -230,10 +230,10 @@ namespace SabreTools
for (int i = 0; i < roms.Count; i++) for (int i = 0; i < roms.Count; i++)
{ {
Rom rom = roms[i]; Rom rom = roms[i];
rom.Size = Constants.SizeZero; rom.HashData.Size = Constants.SizeZero;
rom.CRC = Constants.CRCZero; rom.HashData.CRC = Constants.CRCZero;
rom.MD5 = Constants.MD5Zero; rom.HashData.MD5 = Constants.MD5Zero;
rom.SHA1 = Constants.SHA1Zero; rom.HashData.SHA1 = Constants.SHA1Zero;
temp.Add(rom); temp.Add(rom);
} }
netNew[key] = temp; netNew[key] = temp;
@@ -248,10 +248,10 @@ namespace SabreTools
for (int i = 0; i < roms.Count; i++) for (int i = 0; i < roms.Count; i++)
{ {
Rom rom = roms[i]; Rom rom = roms[i];
rom.Size = Constants.SizeZero; rom.HashData.Size = Constants.SizeZero;
rom.CRC = Constants.CRCZero; rom.HashData.CRC = Constants.CRCZero;
rom.MD5 = Constants.MD5Zero; rom.HashData.MD5 = Constants.MD5Zero;
rom.SHA1 = Constants.SHA1Zero; rom.HashData.SHA1 = Constants.SHA1Zero;
temp.Add(rom); temp.Add(rom);
} }
unneeded[key] = temp; unneeded[key] = temp;
@@ -266,10 +266,10 @@ namespace SabreTools
for (int i = 0; i < roms.Count; i++) for (int i = 0; i < roms.Count; i++)
{ {
Rom rom = roms[i]; Rom rom = roms[i];
rom.Size = Constants.SizeZero; rom.HashData.Size = Constants.SizeZero;
rom.CRC = Constants.CRCZero; rom.HashData.CRC = Constants.CRCZero;
rom.MD5 = Constants.MD5Zero; rom.HashData.MD5 = Constants.MD5Zero;
rom.SHA1 = Constants.SHA1Zero; rom.HashData.SHA1 = Constants.SHA1Zero;
temp.Add(rom); temp.Add(rom);
} }
newMissing[key] = temp; newMissing[key] = temp;
@@ -284,10 +284,10 @@ namespace SabreTools
for (int i = 0; i < roms.Count; i++) for (int i = 0; i < roms.Count; i++)
{ {
Rom rom = roms[i]; Rom rom = roms[i];
rom.Size = Constants.SizeZero; rom.HashData.Size = Constants.SizeZero;
rom.CRC = Constants.CRCZero; rom.HashData.CRC = Constants.CRCZero;
rom.MD5 = Constants.MD5Zero; rom.HashData.MD5 = Constants.MD5Zero;
rom.SHA1 = Constants.SHA1Zero; rom.HashData.SHA1 = Constants.SHA1Zero;
temp.Add(rom); temp.Add(rom);
} }
have[key] = temp; have[key] = temp;
@@ -398,10 +398,10 @@ namespace SabreTools
for (int i = 0; i < roms.Count; i++) for (int i = 0; i < roms.Count; i++)
{ {
Rom rom = roms[i]; Rom rom = roms[i];
rom.Size = Constants.SizeZero; rom.HashData.Size = Constants.SizeZero;
rom.CRC = Constants.CRCZero; rom.HashData.CRC = Constants.CRCZero;
rom.MD5 = Constants.MD5Zero; rom.HashData.MD5 = Constants.MD5Zero;
rom.SHA1 = Constants.SHA1Zero; rom.HashData.SHA1 = Constants.SHA1Zero;
temp.Add(rom); temp.Add(rom);
} }
have[key] = temp; have[key] = temp;
@@ -468,10 +468,10 @@ namespace SabreTools
for (int i = 0; i < roms.Count; i++) for (int i = 0; i < roms.Count; i++)
{ {
Rom rom = roms[i]; Rom rom = roms[i];
rom.Size = Constants.SizeZero; rom.HashData.Size = Constants.SizeZero;
rom.CRC = Constants.CRCZero; rom.HashData.CRC = Constants.CRCZero;
rom.MD5 = Constants.MD5Zero; rom.HashData.MD5 = Constants.MD5Zero;
rom.SHA1 = Constants.SHA1Zero; rom.HashData.SHA1 = Constants.SHA1Zero;
temp.Add(rom); temp.Add(rom);
} }
have[key] = temp; have[key] = temp;

View File

@@ -246,7 +246,7 @@ namespace SabreTools
} }
} }
// If the file has a SHA-1 // If the file has a SHA-1
else if (rom.SHA1 != null && rom.SHA1 != "") else if (rom.HashData.SHA1 != null && rom.HashData.SHA1 != "")
{ {
if (sha1.Roms.ContainsKey(key)) if (sha1.Roms.ContainsKey(key))
{ {
@@ -260,7 +260,7 @@ namespace SabreTools
} }
} }
// If the file has no SHA-1 but has an MD5 // If the file has no SHA-1 but has an MD5
else if (rom.MD5 != null && rom.MD5 != "") else if (rom.HashData.MD5 != null && rom.HashData.MD5 != "")
{ {
if (md5.Roms.ContainsKey(key)) if (md5.Roms.ContainsKey(key))
{ {

View File

@@ -374,7 +374,7 @@ namespace SabreTools
if (rom.Metadata.SourceID == 99) if (rom.Metadata.SourceID == 99)
{ {
found = true; found = true;
string key = rom.Size + "-" + rom.CRC; string key = rom.HashData.Size + "-" + rom.HashData.CRC;
if (_matched.Roms.ContainsKey(key)) if (_matched.Roms.ContainsKey(key))
{ {
_matched.Roms[key].Add(rom); _matched.Roms[key].Add(rom);
@@ -508,7 +508,7 @@ namespace SabreTools
_logger.Log("Matched name: " + found.Name); _logger.Log("Matched name: " + found.Name);
// Add rom to the matched list // Add rom to the matched list
string key = found.Size + "-" + found.CRC; string key = found.HashData.Size + "-" + found.HashData.CRC;
if(_matched.Roms.ContainsKey(key)) if(_matched.Roms.ContainsKey(key))
{ {
_matched.Roms[key].Add(found); _matched.Roms[key].Add(found);
@@ -529,7 +529,7 @@ namespace SabreTools
Directory.CreateDirectory(gamedir); Directory.CreateDirectory(gamedir);
} }
_logger.Log("Rebuilding file '" + Path.GetFileName(rom.Name) + "' to '" + (_tgz ? found.SHA1 : found.Name) + "'"); _logger.Log("Rebuilding file '" + Path.GetFileName(rom.Name) + "' to '" + (_tgz ? found.HashData.SHA1 : found.Name) + "'");
try try
{ {
File.Copy(input, Path.Combine(gamedir, Path.GetFileName(found.Name))); File.Copy(input, Path.Combine(gamedir, Path.GetFileName(found.Name)));
@@ -572,7 +572,7 @@ namespace SabreTools
foreach (Rom found in founddroms) foreach (Rom found in founddroms)
{ {
// Add rom to the matched list // Add rom to the matched list
string key = found.Size + "-" + found.CRC; string key = found.HashData.Size + "-" + found.HashData.CRC;
if (_matched.Roms.ContainsKey(key)) if (_matched.Roms.ContainsKey(key))
{ {
_matched.Roms[key].Add(found); _matched.Roms[key].Add(found);
@@ -596,7 +596,7 @@ namespace SabreTools
Directory.CreateDirectory(gamedir); Directory.CreateDirectory(gamedir);
} }
_logger.Log("Rebuilding file '" + Path.GetFileName(rom.Name) + "' to '" + (_tgz ? found.SHA1 : found.Name) + "'"); _logger.Log("Rebuilding file '" + Path.GetFileName(rom.Name) + "' to '" + (_tgz ? found.HashData.SHA1 : found.Name) + "'");
try try
{ {
File.Copy(newinput, Path.Combine(gamedir, Path.GetFileName(found.Name))); File.Copy(newinput, Path.Combine(gamedir, Path.GetFileName(found.Name)));
@@ -617,10 +617,10 @@ namespace SabreTools
// Then output the headered rom (renamed) // Then output the headered rom (renamed)
Rom newfound = found; Rom newfound = found;
newfound.Name = Path.GetFileNameWithoutExtension(newfound.Name) + " (" + rom.CRC + ")" + Path.GetExtension(newfound.Name); newfound.Name = Path.GetFileNameWithoutExtension(newfound.Name) + " (" + rom.HashData.CRC + ")" + Path.GetExtension(newfound.Name);
// Add rom to the matched list // Add rom to the matched list
key = newfound.Size + "-" + newfound.CRC; key = newfound.HashData.Size + "-" + newfound.HashData.CRC;
if (_matched.Roms.ContainsKey(key)) if (_matched.Roms.ContainsKey(key))
{ {
_matched.Roms[key].Add(newfound); _matched.Roms[key].Add(newfound);
@@ -695,7 +695,7 @@ namespace SabreTools
foreach (Rom found in foundroms) foreach (Rom found in foundroms)
{ {
// Add rom to the matched list // Add rom to the matched list
string key = found.Size + "-" + found.CRC; string key = found.HashData.Size + "-" + found.HashData.CRC;
if (_matched.Roms.ContainsKey(key)) if (_matched.Roms.ContainsKey(key))
{ {
_matched.Roms[key].Add(found); _matched.Roms[key].Add(found);
@@ -730,7 +730,7 @@ namespace SabreTools
else else
{ {
// Copy file between archives // Copy file between archives
_logger.Log("Rebuilding file '" + Path.GetFileName(rom.Name) + "' to '" + (_tgz ? found.SHA1 : found.Name) + "'"); _logger.Log("Rebuilding file '" + Path.GetFileName(rom.Name) + "' to '" + (_tgz ? found.HashData.SHA1 : found.Name) + "'");
if (Build.MonoEnvironment || _tgz) if (Build.MonoEnvironment || _tgz)
{ {
@@ -851,7 +851,7 @@ namespace SabreTools
// Then add each of the found files to the new dictionary // Then add each of the found files to the new dictionary
foreach (Rom rom in roms) foreach (Rom rom in roms)
{ {
string key = rom.Size + "-" + rom.CRC; string key = rom.HashData.Size + "-" + rom.HashData.CRC;
if (scanned.ContainsKey(key)) if (scanned.ContainsKey(key))
{ {
scanned[key].Add(rom); scanned[key].Add(rom);