mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
[DatFile] Make hashfile parsing cleaner
This commit is contained in:
@@ -116,22 +116,22 @@ namespace SabreTools.Library.Dats
|
|||||||
ParseGenericXML(filename, sysid, srcid, keep, clean, remUnicode);
|
ParseGenericXML(filename, sysid, srcid, keep, clean, remUnicode);
|
||||||
break;
|
break;
|
||||||
case DatFormat.RedumpMD5:
|
case DatFormat.RedumpMD5:
|
||||||
ParseRedumpMD5(filename, sysid, srcid, clean, remUnicode);
|
ParseHashfile(filename, sysid, srcid, Hash.MD5, clean, remUnicode);
|
||||||
break;
|
break;
|
||||||
case DatFormat.RedumpSFV:
|
case DatFormat.RedumpSFV:
|
||||||
ParseRedumpSFV(filename, sysid, srcid, clean, remUnicode);
|
ParseHashfile(filename, sysid, srcid, Hash.CRC, clean, remUnicode);
|
||||||
break;
|
break;
|
||||||
case DatFormat.RedumpSHA1:
|
case DatFormat.RedumpSHA1:
|
||||||
ParseRedumpSHA1(filename, sysid, srcid, clean, remUnicode);
|
ParseHashfile(filename, sysid, srcid, Hash.SHA1, clean, remUnicode);
|
||||||
break;
|
break;
|
||||||
case DatFormat.RedumpSHA256:
|
case DatFormat.RedumpSHA256:
|
||||||
ParseRedumpSHA256(filename, sysid, srcid, clean, remUnicode);
|
ParseHashfile(filename, sysid, srcid, Hash.SHA256, clean, remUnicode);
|
||||||
break;
|
break;
|
||||||
case DatFormat.RedumpSHA384:
|
case DatFormat.RedumpSHA384:
|
||||||
ParseRedumpSHA384(filename, sysid, srcid, clean, remUnicode);
|
ParseHashfile(filename, sysid, srcid, Hash.SHA384, clean, remUnicode);
|
||||||
break;
|
break;
|
||||||
case DatFormat.RedumpSHA512:
|
case DatFormat.RedumpSHA512:
|
||||||
ParseRedumpSHA512(filename, sysid, srcid, clean, remUnicode);
|
ParseHashfile(filename, sysid, srcid, Hash.SHA512, clean, remUnicode);
|
||||||
break;
|
break;
|
||||||
case DatFormat.RomCenter:
|
case DatFormat.RomCenter:
|
||||||
ParseRC(filename, sysid, srcid, clean, remUnicode);
|
ParseRC(filename, sysid, srcid, clean, remUnicode);
|
||||||
@@ -2572,19 +2572,23 @@ namespace SabreTools.Library.Dats
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 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
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="filename">Name of the file to be parsed</param>
|
/// <param name="filename">Name of the file to be parsed</param>
|
||||||
/// <param name="sysid">System ID for the DAT</param>
|
/// <param name="sysid">System ID for the DAT</param>
|
||||||
/// <param name="srcid">Source ID for the DAT</param>
|
/// <param name="srcid">Source ID for the DAT</param>
|
||||||
|
/// <param name="hashtype">Hash type that should be assumed</param>
|
||||||
/// <param name="clean">True if game names are sanitized, false otherwise (default)</param>
|
/// <param name="clean">True if game names are sanitized, false otherwise (default)</param>
|
||||||
/// <param name="remUnicode">True if we should remove non-ASCII characters from output, false otherwise (default)</param>
|
/// <param name="remUnicode">True if we should remove non-ASCII characters from output, false otherwise (default)</param>
|
||||||
private void ParseRedumpMD5(
|
private void ParseHashfile(
|
||||||
// Standard Dat parsing
|
// Standard Dat parsing
|
||||||
string filename,
|
string filename,
|
||||||
int sysid,
|
int sysid,
|
||||||
int srcid,
|
int srcid,
|
||||||
|
|
||||||
|
// Specific to hash files
|
||||||
|
Hash hashtype,
|
||||||
|
|
||||||
// Miscellaneous
|
// Miscellaneous
|
||||||
bool clean,
|
bool clean,
|
||||||
bool remUnicode)
|
bool remUnicode)
|
||||||
@@ -2597,256 +2601,34 @@ namespace SabreTools.Library.Dats
|
|||||||
{
|
{
|
||||||
string line = sr.ReadLine();
|
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),
|
name = split[0].Replace("*", String.Empty);
|
||||||
Size = -1,
|
hash = split[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);
|
|
||||||
}
|
}
|
||||||
|
// Otherwise, the name is second
|
||||||
sr.Dispose();
|
else
|
||||||
|
{
|
||||||
|
name = split[1].Replace("*", String.Empty);
|
||||||
|
hash = split[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Parse a Redump SFV and return all found games and roms within
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="filename">Name of the file to be parsed</param>
|
|
||||||
/// <param name="sysid">System ID for the DAT</param>
|
|
||||||
/// <param name="srcid">Source ID for the DAT</param>
|
|
||||||
/// <param name="clean">True if game names are sanitized, false otherwise (default)</param>
|
|
||||||
/// <param name="remUnicode">True if we should remove non-ASCII characters from output, false otherwise (default)</param>
|
|
||||||
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();
|
|
||||||
|
|
||||||
Rom rom = new Rom
|
Rom rom = new Rom
|
||||||
{
|
{
|
||||||
Name = line.Split(' ')[0].Replace("*", String.Empty),
|
Name = name,
|
||||||
Size = -1,
|
Size = -1,
|
||||||
CRC = line.Split(' ')[1],
|
CRC = ((hashtype & Hash.CRC) != 0 ? hash : null),
|
||||||
ItemStatus = ItemStatus.None,
|
MD5 = ((hashtype & Hash.MD5) != 0 ? hash : null),
|
||||||
|
SHA1 = ((hashtype & Hash.SHA1) != 0 ? hash : null),
|
||||||
Machine = new Machine
|
SHA256 = ((hashtype & Hash.SHA256) != 0 ? hash : null),
|
||||||
{
|
SHA384 = ((hashtype & Hash.SHA384) != 0 ? hash : null),
|
||||||
Name = Path.GetFileNameWithoutExtension(filename),
|
SHA512 = ((hashtype & Hash.SHA512) != 0 ? hash : null),
|
||||||
},
|
|
||||||
|
|
||||||
SystemID = sysid,
|
|
||||||
SourceID = srcid,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Now process and add the rom
|
|
||||||
ParseAddHelper(rom, clean, remUnicode);
|
|
||||||
}
|
|
||||||
|
|
||||||
sr.Dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Parse a Redump SHA-1 and return all found games and roms within
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="filename">Name of the file to be parsed</param>
|
|
||||||
/// <param name="sysid">System ID for the DAT</param>
|
|
||||||
/// <param name="srcid">Source ID for the DAT</param>
|
|
||||||
/// <param name="clean">True if game names are sanitized, false otherwise (default)</param>
|
|
||||||
/// <param name="remUnicode">True if we should remove non-ASCII characters from output, false otherwise (default)</param>
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Parse a Redump SHA-256 and return all found games and roms within
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="filename">Name of the file to be parsed</param>
|
|
||||||
/// <param name="sysid">System ID for the DAT</param>
|
|
||||||
/// <param name="srcid">Source ID for the DAT</param>
|
|
||||||
/// <param name="clean">True if game names are sanitized, false otherwise (default)</param>
|
|
||||||
/// <param name="remUnicode">True if we should remove non-ASCII characters from output, false otherwise (default)</param>
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Parse a Redump SHA-256 and return all found games and roms within
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="filename">Name of the file to be parsed</param>
|
|
||||||
/// <param name="sysid">System ID for the DAT</param>
|
|
||||||
/// <param name="srcid">Source ID for the DAT</param>
|
|
||||||
/// <param name="clean">True if game names are sanitized, false otherwise (default)</param>
|
|
||||||
/// <param name="remUnicode">True if we should remove non-ASCII characters from output, false otherwise (default)</param>
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Parse a Redump SHA-512 and return all found games and roms within
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="filename">Name of the file to be parsed</param>
|
|
||||||
/// <param name="sysid">System ID for the DAT</param>
|
|
||||||
/// <param name="srcid">Source ID for the DAT</param>
|
|
||||||
/// <param name="clean">True if game names are sanitized, false otherwise (default)</param>
|
|
||||||
/// <param name="remUnicode">True if we should remove non-ASCII characters from output, false otherwise (default)</param>
|
|
||||||
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],
|
|
||||||
ItemStatus = ItemStatus.None,
|
ItemStatus = ItemStatus.None,
|
||||||
|
|
||||||
Machine = new Machine
|
Machine = new Machine
|
||||||
|
|||||||
Reference in New Issue
Block a user