[Utilities, DatFile] Create another factory

This commit is contained in:
Matt Nadareski
2018-02-16 00:35:58 -08:00
parent cef409cb92
commit 0ccbdd2a83
2 changed files with 35 additions and 5 deletions

View File

@@ -3625,13 +3625,14 @@ namespace SabreTools.Library.DatFiles
if (Romba)
{
GZipArchive archive = new GZipArchive(item);
BaseFile rom = archive.GetTorrentGZFileInfo();
BaseFile baseFile = archive.GetTorrentGZFileInfo();
// If the rom is valid, write it out
if (rom != null && rom.Filename != null)
if (baseFile != null && baseFile.Filename != null)
{
// Add the list if it doesn't exist already
Add(rom.Size + "-" + rom.CRC, new Rom(rom));
Rom rom = new Rom(baseFile);
Add(rom.Size + "-" + rom.CRC, rom);
Globals.Logger.User("File added: {0}", Path.GetFileNameWithoutExtension(item) + Environment.NewLine);
}
else
@@ -3688,7 +3689,7 @@ namespace SabreTools.Library.DatFiles
// First take care of the found items
Parallel.ForEach(extracted, Globals.ParallelOptions, rom =>
{
DatItem datItem = (rom.Type == FileType.CHD ? (DatItem)(new Disk(rom)) : (DatItem)(new Rom(rom)));
DatItem datItem = Utilities.GetDatItem(rom);
ProcessFileHelper(newItem,
datItem,
basePath,
@@ -4290,7 +4291,7 @@ namespace SabreTools.Library.DatFiles
{
foreach (BaseFile entry in entries)
{
DatItem datItem = (entry.Type == FileType.CHD ? (DatItem)(new Disk(entry)) : (DatItem)(new Rom(entry)));
DatItem datItem = Utilities.GetDatItem(entry);
usedInternally &= RebuildIndividualFile(datItem, file, outDir, date, inverse, outputFormat,
romba, updateDat, !isTorrentGzip /* isZip */, headerToCheckAgainst);
}

View File

@@ -683,6 +683,35 @@ namespace SabreTools.Library.Tools
}
}
/// <summary>
/// Create a specific type of DatItem to be used based on a BaseFile
/// </summary>
/// <param name="baseFile">BaseFile containing information to be created</param>
/// <returns>DatItem of the specific internal type that corresponds to the inputs</returns>
public static DatItem GetDatItem(BaseFile baseFile)
{
switch (baseFile.Type)
{
case FileType.CHD:
return new Disk(baseFile);
case FileType.GZipArchive:
case FileType.LRZipArchive:
case FileType.LZ4Archive:
case FileType.None:
case FileType.RarArchive:
case FileType.SevenZipArchive:
case FileType.TapeArchive:
case FileType.XZArchive:
case FileType.ZipArchive:
case FileType.ZPAQArchive:
case FileType.ZstdArchive:
return new Rom(baseFile);
case FileType.Folder:
default:
return null;
}
}
/// <summary>
/// Get DatFormat value from input string
/// </summary>