diff --git a/SabreTools.Library/Dats/Partials/DatFile.Parsers.cs b/SabreTools.Library/Dats/Partials/DatFile.Parsers.cs
index 8aaefb27..5418bb9f 100644
--- a/SabreTools.Library/Dats/Partials/DatFile.Parsers.cs
+++ b/SabreTools.Library/Dats/Partials/DatFile.Parsers.cs
@@ -116,22 +116,22 @@ namespace SabreTools.Library.Dats
ParseGenericXML(filename, sysid, srcid, keep, clean, remUnicode);
break;
case DatFormat.RedumpMD5:
- ParseRedumpMD5(filename, sysid, srcid, clean, remUnicode);
+ ParseHashfile(filename, sysid, srcid, Hash.MD5, clean, remUnicode);
break;
case DatFormat.RedumpSFV:
- ParseRedumpSFV(filename, sysid, srcid, clean, remUnicode);
+ ParseHashfile(filename, sysid, srcid, Hash.CRC, clean, remUnicode);
break;
case DatFormat.RedumpSHA1:
- ParseRedumpSHA1(filename, sysid, srcid, clean, remUnicode);
+ ParseHashfile(filename, sysid, srcid, Hash.SHA1, clean, remUnicode);
break;
case DatFormat.RedumpSHA256:
- ParseRedumpSHA256(filename, sysid, srcid, clean, remUnicode);
+ ParseHashfile(filename, sysid, srcid, Hash.SHA256, clean, remUnicode);
break;
case DatFormat.RedumpSHA384:
- ParseRedumpSHA384(filename, sysid, srcid, clean, remUnicode);
+ ParseHashfile(filename, sysid, srcid, Hash.SHA384, clean, remUnicode);
break;
case DatFormat.RedumpSHA512:
- ParseRedumpSHA512(filename, sysid, srcid, clean, remUnicode);
+ ParseHashfile(filename, sysid, srcid, Hash.SHA512, clean, remUnicode);
break;
case DatFormat.RomCenter:
ParseRC(filename, sysid, srcid, clean, remUnicode);
@@ -2572,19 +2572,23 @@ namespace SabreTools.Library.Dats
}
///
- /// Parse a Redump MD5 and return all found games and roms within
+ /// Parse a hashfile or SFV and return all found games and roms within
///
/// Name of the file to be parsed
/// System ID for the DAT
/// Source ID for the DAT
+ /// Hash type that should be assumed
/// True if game names are sanitized, false otherwise (default)
/// True if we should remove non-ASCII characters from output, false otherwise (default)
- private void ParseRedumpMD5(
+ private void ParseHashfile(
// Standard Dat parsing
string filename,
int sysid,
int srcid,
+ // Specific to hash files
+ Hash hashtype,
+
// Miscellaneous
bool clean,
bool remUnicode)
@@ -2597,256 +2601,34 @@ namespace SabreTools.Library.Dats
{
string line = sr.ReadLine();
- Rom rom = new Rom
+ // Split the line and get the name and hash
+ string[] split = line.Split(' ');
+ string name = "";
+ string hash = "";
+
+ // If we have CRC, then it's an SFV file and the name is first are
+ if ((hashtype & Hash.CRC) != 0)
{
- Name = line.Split(' ')[1].Replace("*", String.Empty),
- Size = -1,
- MD5 = line.Split(' ')[0],
- ItemStatus = ItemStatus.None,
-
- Machine = new Machine
- {
- Name = Path.GetFileNameWithoutExtension(filename),
- },
-
- SystemID = sysid,
- SourceID = srcid,
- };
-
- // Now process and add the rom
- ParseAddHelper(rom, clean, remUnicode);
- }
-
- sr.Dispose();
- }
-
- ///
- /// Parse a Redump SFV and return all found games and roms within
- ///
- /// Name of the file to be parsed
- /// System ID for the DAT
- /// Source ID for the DAT
- /// True if game names are sanitized, false otherwise (default)
- /// True if we should remove non-ASCII characters from output, false otherwise (default)
- private void ParseRedumpSFV(
- // Standard Dat parsing
- string filename,
- int sysid,
- int srcid,
-
- // Miscellaneous
- bool clean,
- bool remUnicode)
- {
- // Open a file reader
- Encoding enc = Style.GetEncoding(filename);
- StreamReader sr = new StreamReader(FileTools.TryOpenRead(filename), enc);
-
- while (!sr.EndOfStream)
- {
- string line = sr.ReadLine();
+ name = split[0].Replace("*", String.Empty);
+ hash = split[1];
+ }
+ // Otherwise, the name is second
+ else
+ {
+ name = split[1].Replace("*", String.Empty);
+ hash = split[0];
+ }
Rom rom = new Rom
{
- Name = line.Split(' ')[0].Replace("*", String.Empty),
+ Name = name,
Size = -1,
- CRC = line.Split(' ')[1],
- ItemStatus = ItemStatus.None,
-
- Machine = new Machine
- {
- Name = Path.GetFileNameWithoutExtension(filename),
- },
-
- SystemID = sysid,
- SourceID = srcid,
- };
-
- // Now process and add the rom
- ParseAddHelper(rom, clean, remUnicode);
- }
-
- sr.Dispose();
- }
-
- ///
- /// Parse a Redump SHA-1 and return all found games and roms within
- ///
- /// Name of the file to be parsed
- /// System ID for the DAT
- /// Source ID for the DAT
- /// True if game names are sanitized, false otherwise (default)
- /// True if we should remove non-ASCII characters from output, false otherwise (default)
- private void ParseRedumpSHA1(
- // Standard Dat parsing
- string filename,
- int sysid,
- int srcid,
-
- // Miscellaneous
- bool clean,
- bool remUnicode)
- {
- // Open a file reader
- Encoding enc = Style.GetEncoding(filename);
- StreamReader sr = new StreamReader(FileTools.TryOpenRead(filename), enc);
-
- while (!sr.EndOfStream)
- {
- string line = sr.ReadLine();
-
- Rom rom = new Rom
- {
- Name = line.Split(' ')[1].Replace("*", String.Empty),
- Size = -1,
- SHA1 = line.Split(' ')[0],
- ItemStatus = ItemStatus.None,
-
- Machine = new Machine
- {
- Name = Path.GetFileNameWithoutExtension(filename),
- },
-
- SystemID = sysid,
- SourceID = srcid,
- };
-
- // Now process and add the rom
- ParseAddHelper(rom, clean, remUnicode);
- }
-
- sr.Dispose();
- }
-
- ///
- /// Parse a Redump SHA-256 and return all found games and roms within
- ///
- /// Name of the file to be parsed
- /// System ID for the DAT
- /// Source ID for the DAT
- /// True if game names are sanitized, false otherwise (default)
- /// True if we should remove non-ASCII characters from output, false otherwise (default)
- private void ParseRedumpSHA256(
- // Standard Dat parsing
- string filename,
- int sysid,
- int srcid,
-
- // Miscellaneous
- bool clean,
- bool remUnicode)
- {
- // Open a file reader
- Encoding enc = Style.GetEncoding(filename);
- StreamReader sr = new StreamReader(FileTools.TryOpenRead(filename), enc);
-
- while (!sr.EndOfStream)
- {
- string line = sr.ReadLine();
-
- Rom rom = new Rom
- {
- Name = line.Split(' ')[1].Replace("*", String.Empty),
- Size = -1,
- SHA256 = line.Split(' ')[0],
- ItemStatus = ItemStatus.None,
-
- Machine = new Machine
- {
- Name = Path.GetFileNameWithoutExtension(filename),
- },
-
- SystemID = sysid,
- SourceID = srcid,
- };
-
- // Now process and add the rom
- ParseAddHelper(rom, clean, remUnicode);
- }
-
- sr.Dispose();
- }
-
- ///
- /// Parse a Redump SHA-256 and return all found games and roms within
- ///
- /// Name of the file to be parsed
- /// System ID for the DAT
- /// Source ID for the DAT
- /// True if game names are sanitized, false otherwise (default)
- /// True if we should remove non-ASCII characters from output, false otherwise (default)
- private void ParseRedumpSHA384(
- // Standard Dat parsing
- string filename,
- int sysid,
- int srcid,
-
- // Miscellaneous
- bool clean,
- bool remUnicode)
- {
- // Open a file reader
- Encoding enc = Style.GetEncoding(filename);
- StreamReader sr = new StreamReader(FileTools.TryOpenRead(filename), enc);
-
- while (!sr.EndOfStream)
- {
- string line = sr.ReadLine();
-
- Rom rom = new Rom
- {
- Name = line.Split(' ')[1].Replace("*", String.Empty),
- Size = -1,
- SHA384 = line.Split(' ')[0],
- ItemStatus = ItemStatus.None,
-
- Machine = new Machine
- {
- Name = Path.GetFileNameWithoutExtension(filename),
- },
-
- SystemID = sysid,
- SourceID = srcid,
- };
-
- // Now process and add the rom
- ParseAddHelper(rom, clean, remUnicode);
- }
-
- sr.Dispose();
- }
-
- ///
- /// Parse a Redump SHA-512 and return all found games and roms within
- ///
- /// Name of the file to be parsed
- /// System ID for the DAT
- /// Source ID for the DAT
- /// True if game names are sanitized, false otherwise (default)
- /// True if we should remove non-ASCII characters from output, false otherwise (default)
- private void ParseRedumpSHA512(
- // Standard Dat parsing
- string filename,
- int sysid,
- int srcid,
-
- // Miscellaneous
- bool clean,
- bool remUnicode)
- {
- // Open a file reader
- Encoding enc = Style.GetEncoding(filename);
- StreamReader sr = new StreamReader(FileTools.TryOpenRead(filename), enc);
-
- while (!sr.EndOfStream)
- {
- string line = sr.ReadLine();
-
- Rom rom = new Rom
- {
- Name = line.Split(' ')[1].Replace("*", String.Empty),
- Size = -1,
- SHA512 = line.Split(' ')[0],
+ CRC = ((hashtype & Hash.CRC) != 0 ? hash : null),
+ MD5 = ((hashtype & Hash.MD5) != 0 ? hash : null),
+ SHA1 = ((hashtype & Hash.SHA1) != 0 ? hash : null),
+ SHA256 = ((hashtype & Hash.SHA256) != 0 ? hash : null),
+ SHA384 = ((hashtype & Hash.SHA384) != 0 ? hash : null),
+ SHA512 = ((hashtype & Hash.SHA512) != 0 ? hash : null),
ItemStatus = ItemStatus.None,
Machine = new Machine