[DatFile] Clean up CMP parsing, add exception handling

This commit is contained in:
Matt Nadareski
2017-03-01 10:10:36 -08:00
parent 3349be25d1
commit 02874111bd

View File

@@ -101,50 +101,57 @@ namespace SabreTools.Helper.Dats
DatFormat = (DatFormat == 0 ? FileTools.GetDatFormat(filename, logger) : DatFormat); DatFormat = (DatFormat == 0 ? FileTools.GetDatFormat(filename, logger) : DatFormat);
// Now parse the correct type of DAT // Now parse the correct type of DAT
switch (FileTools.GetDatFormat(filename, logger)) try
{ {
case DatFormat.AttractMode: switch (FileTools.GetDatFormat(filename, logger))
ParseAttractMode(filename, sysid, srcid, filter, trim, single, root, logger, keep, clean, descAsName); {
break; case DatFormat.AttractMode:
case DatFormat.ClrMamePro: ParseAttractMode(filename, sysid, srcid, filter, trim, single, root, logger, keep, clean, descAsName);
case DatFormat.DOSCenter: break;
ParseCMP(filename, sysid, srcid, filter, trim, single, root, logger, keep, clean, descAsName); case DatFormat.ClrMamePro:
break; case DatFormat.DOSCenter:
case DatFormat.CSV: ParseCMP(filename, sysid, srcid, filter, trim, single, root, logger, keep, clean, descAsName);
ParseCSVTSV(filename, sysid, srcid, ',', filter, trim, single, root, logger, keep, clean, descAsName); break;
break; case DatFormat.CSV:
case DatFormat.Logiqx: ParseCSVTSV(filename, sysid, srcid, ',', filter, trim, single, root, logger, keep, clean, descAsName);
case DatFormat.OfflineList: break;
case DatFormat.SabreDat: case DatFormat.Logiqx:
case DatFormat.SoftwareList: case DatFormat.OfflineList:
ParseGenericXML(filename, sysid, srcid, filter, trim, single, root, logger, keep, clean, descAsName); case DatFormat.SabreDat:
break; case DatFormat.SoftwareList:
case DatFormat.RedumpMD5: ParseGenericXML(filename, sysid, srcid, filter, trim, single, root, logger, keep, clean, descAsName);
ParseRedumpMD5(filename, sysid, srcid, filter, trim, single, root, logger, clean); break;
break; case DatFormat.RedumpMD5:
case DatFormat.RedumpSFV: ParseRedumpMD5(filename, sysid, srcid, filter, trim, single, root, logger, clean);
ParseRedumpSFV(filename, sysid, srcid, filter, trim, single, root, logger, clean); break;
break; case DatFormat.RedumpSFV:
case DatFormat.RedumpSHA1: ParseRedumpSFV(filename, sysid, srcid, filter, trim, single, root, logger, clean);
ParseRedumpSHA1(filename, sysid, srcid, filter, trim, single, root, logger, clean); break;
break; case DatFormat.RedumpSHA1:
case DatFormat.RedumpSHA256: ParseRedumpSHA1(filename, sysid, srcid, filter, trim, single, root, logger, clean);
ParseRedumpSHA256(filename, sysid, srcid, filter, trim, single, root, logger, clean); break;
break; case DatFormat.RedumpSHA256:
case DatFormat.RedumpSHA384: ParseRedumpSHA256(filename, sysid, srcid, filter, trim, single, root, logger, clean);
ParseRedumpSHA384(filename, sysid, srcid, filter, trim, single, root, logger, clean); break;
break; case DatFormat.RedumpSHA384:
case DatFormat.RedumpSHA512: ParseRedumpSHA384(filename, sysid, srcid, filter, trim, single, root, logger, clean);
ParseRedumpSHA512(filename, sysid, srcid, filter, trim, single, root, logger, clean); break;
break; case DatFormat.RedumpSHA512:
case DatFormat.RomCenter: ParseRedumpSHA512(filename, sysid, srcid, filter, trim, single, root, logger, clean);
ParseRC(filename, sysid, srcid, filter, trim, single, root, logger, clean, descAsName); break;
break; case DatFormat.RomCenter:
case DatFormat.TSV: ParseRC(filename, sysid, srcid, filter, trim, single, root, logger, clean, descAsName);
ParseCSVTSV(filename, sysid, srcid, '\t', filter, trim, single, root, logger, keep, clean, descAsName); break;
break; case DatFormat.TSV:
default: ParseCSVTSV(filename, sysid, srcid, '\t', filter, trim, single, root, logger, keep, clean, descAsName);
return; break;
default:
return;
}
}
catch (Exception ex)
{
logger.Error("Error with file '" + filename + "': " + ex.ToString());
} }
// If we are using tags from the DAT, set the proper input for split type unless overridden // If we are using tags from the DAT, set the proper input for split type unless overridden
@@ -565,36 +572,34 @@ namespace SabreTools.Helper.Dats
// Regular attributes // Regular attributes
case "name": case "name":
i++; quoteless = gc[++i].Replace("\"", "");
quoteless = gc[i].Replace("\"", "");
item.Name = quoteless; item.Name = quoteless;
break; break;
case "size": case "size":
if (item.Type == ItemType.Rom) if (item.Type == ItemType.Rom)
{ {
i++; quoteless = gc[++i].Replace("\"", "");
quoteless = gc[i].Replace("\"", ""); if (Int64.TryParse(quoteless, out long size))
long size = -1;
if (Int64.TryParse(quoteless, out size))
{ {
((Rom)item).Size = size; ((Rom)item).Size = size;
} }
else
{
((Rom)item).Size = -1;
}
} }
break; break;
case "crc": case "crc":
if (item.Type == ItemType.Rom) if (item.Type == ItemType.Rom)
{ {
i++; quoteless = gc[++i].Replace("\"", "");
quoteless = gc[i].Replace("\"", "");
((Rom)item).CRC = quoteless.ToLowerInvariant(); ((Rom)item).CRC = quoteless.ToLowerInvariant();
} }
break; break;
case "md5": case "md5":
if (item.Type == ItemType.Rom) if (item.Type == ItemType.Rom)
{ {
i++; quoteless = gc[++i].Replace("\"", "");
quoteless = gc[i].Replace("\"", "");
((Rom)item).MD5 = quoteless.ToLowerInvariant(); ((Rom)item).MD5 = quoteless.ToLowerInvariant();
} }
else if (item.Type == ItemType.Disk) else if (item.Type == ItemType.Disk)
@@ -607,63 +612,54 @@ namespace SabreTools.Helper.Dats
case "sha1": case "sha1":
if (item.Type == ItemType.Rom) if (item.Type == ItemType.Rom)
{ {
i++; quoteless = gc[++i].Replace("\"", "");
quoteless = gc[i].Replace("\"", "");
((Rom)item).SHA1 = quoteless.ToLowerInvariant(); ((Rom)item).SHA1 = quoteless.ToLowerInvariant();
} }
else if (item.Type == ItemType.Disk) else if (item.Type == ItemType.Disk)
{ {
i++; quoteless = gc[++i].Replace("\"", "");
quoteless = gc[i].Replace("\"", "");
((Disk)item).SHA1 = quoteless.ToLowerInvariant(); ((Disk)item).SHA1 = quoteless.ToLowerInvariant();
} }
break; break;
case "sha256": case "sha256":
if (item.Type == ItemType.Rom) if (item.Type == ItemType.Rom)
{ {
i++; quoteless = gc[++i].Replace("\"", "");
quoteless = gc[i].Replace("\"", "");
((Rom)item).SHA256 = quoteless.ToLowerInvariant(); ((Rom)item).SHA256 = quoteless.ToLowerInvariant();
} }
else if (item.Type == ItemType.Disk) else if (item.Type == ItemType.Disk)
{ {
i++; quoteless = gc[++i].Replace("\"", "");
quoteless = gc[i].Replace("\"", "");
((Disk)item).SHA256 = quoteless.ToLowerInvariant(); ((Disk)item).SHA256 = quoteless.ToLowerInvariant();
} }
break; break;
case "sha384": case "sha384":
if (item.Type == ItemType.Rom) if (item.Type == ItemType.Rom)
{ {
i++; quoteless = gc[++i].Replace("\"", "");
quoteless = gc[i].Replace("\"", "");
((Rom)item).SHA384 = quoteless.ToLowerInvariant(); ((Rom)item).SHA384 = quoteless.ToLowerInvariant();
} }
else if (item.Type == ItemType.Disk) else if (item.Type == ItemType.Disk)
{ {
i++; quoteless = gc[++i].Replace("\"", "");
quoteless = gc[i].Replace("\"", "");
((Disk)item).SHA384 = quoteless.ToLowerInvariant(); ((Disk)item).SHA384 = quoteless.ToLowerInvariant();
} }
break; break;
case "sha512": case "sha512":
if (item.Type == ItemType.Rom) if (item.Type == ItemType.Rom)
{ {
i++; quoteless = gc[++i].Replace("\"", "");
quoteless = gc[i].Replace("\"", "");
((Rom)item).SHA512 = quoteless.ToLowerInvariant(); ((Rom)item).SHA512 = quoteless.ToLowerInvariant();
} }
else if (item.Type == ItemType.Disk) else if (item.Type == ItemType.Disk)
{ {
i++; quoteless = gc[++i].Replace("\"", "");
quoteless = gc[i].Replace("\"", "");
((Disk)item).SHA512 = quoteless.ToLowerInvariant(); ((Disk)item).SHA512 = quoteless.ToLowerInvariant();
} }
break; break;
case "status": case "status":
case "flags": case "flags":
i++; quoteless = gc[++i].Replace("\"", "");
quoteless = gc[i].Replace("\"", "");
if (quoteless.ToLowerInvariant() == "good") if (quoteless.ToLowerInvariant() == "good")
{ {
if (item.Type == ItemType.Rom) if (item.Type == ItemType.Rom)
@@ -712,8 +708,7 @@ namespace SabreTools.Helper.Dats
case "date": case "date":
if (item.Type == ItemType.Rom) if (item.Type == ItemType.Rom)
{ {
i++; quoteless = gc[++i].Replace("\"", "") + " " + gc[++i].Replace("\"", "");
quoteless = gc[i].Replace("\"", "") + " " + gc[i + 1].Replace("\"", "");
((Rom)item).Date = quoteless; ((Rom)item).Date = quoteless;
} }
i++; i++;