diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs index ddde4fc5..3cc2d64e 100644 --- a/SabreTools.Library/DatFiles/DatFile.cs +++ b/SabreTools.Library/DatFiles/DatFile.cs @@ -2038,7 +2038,6 @@ namespace SabreTools.Library.DatFiles { // Set the archive flags archive.AvailableHashes = hashes; - archive.QuickScan = hashes == Hash.CRC; // Skip if we're treating archives as files and skipping files if (asFiles.HasFlag(TreatAsFile.Archive) && skipFileType == SkipFileType.File) @@ -2614,7 +2613,7 @@ namespace SabreTools.Library.DatFiles // Now get all extracted items from the archive if (archive != null) { - archive.QuickScan = quickScan; + archive.AvailableHashes = quickScan ? Hash.CRC : Hash.Standard; entries = archive.GetChildren(); } diff --git a/SabreTools.Library/FileTypes/BaseArchive.cs b/SabreTools.Library/FileTypes/BaseArchive.cs index 6817a2e4..489a21d9 100644 --- a/SabreTools.Library/FileTypes/BaseArchive.cs +++ b/SabreTools.Library/FileTypes/BaseArchive.cs @@ -11,11 +11,6 @@ namespace SabreTools.Library.FileTypes { #region Fields - /// - /// Determines if archives pull information from headers alone - /// - public bool QuickScan { get; set; } = false; - /// /// Determines if dates are read or written /// diff --git a/SabreTools.Library/FileTypes/GZipArchive.cs b/SabreTools.Library/FileTypes/GZipArchive.cs index 7790c51d..9d29a369 100644 --- a/SabreTools.Library/FileTypes/GZipArchive.cs +++ b/SabreTools.Library/FileTypes/GZipArchive.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text.RegularExpressions; using SabreTools.Library.Data; +using SabreTools.Library.DatFiles; using SabreTools.Library.DatItems; using SabreTools.Library.IO; using SabreTools.Library.Tools; @@ -221,7 +222,7 @@ namespace SabreTools.Library.FileTypes BaseFile gzipEntryRom = new BaseFile(); // Perform a quickscan, if flagged to - if (QuickScan) + if (this.AvailableHashes == Hash.CRC) { gzipEntryRom.Filename = gamename; using (BinaryReader br = new BinaryReader(FileExtensions.TryOpenRead(this.Filename))) diff --git a/SabreTools.Library/FileTypes/RarArchive.cs b/SabreTools.Library/FileTypes/RarArchive.cs index 39c8287b..35aa4ac0 100644 --- a/SabreTools.Library/FileTypes/RarArchive.cs +++ b/SabreTools.Library/FileTypes/RarArchive.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using SabreTools.Library.Data; +using SabreTools.Library.DatFiles; using SabreTools.Library.DatItems; using SabreTools.Library.IO; using SharpCompress.Archives; @@ -189,7 +190,7 @@ namespace SabreTools.Library.FileTypes BaseFile rarEntryRom = new BaseFile(); // Perform a quickscan, if flagged to - if (QuickScan) + if (this.AvailableHashes == Hash.CRC) { rarEntryRom.Size = entry.Size; rarEntryRom.CRC = BitConverter.GetBytes(entry.Crc); diff --git a/SabreTools.Library/FileTypes/SevenZipArchive.cs b/SabreTools.Library/FileTypes/SevenZipArchive.cs index d2ab4fb3..bd5dea4a 100644 --- a/SabreTools.Library/FileTypes/SevenZipArchive.cs +++ b/SabreTools.Library/FileTypes/SevenZipArchive.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using SabreTools.Library.Data; +using SabreTools.Library.DatFiles; using SabreTools.Library.DatItems; using SabreTools.Library.IO; using SabreTools.Library.Tools; @@ -299,7 +300,7 @@ namespace SabreTools.Library.FileTypes BaseFile zipEntryRom = new BaseFile(); // Perform a quickscan, if flagged to - if (QuickScan) + if (this.AvailableHashes == Hash.CRC) { zipEntryRom.Size = (long)zf.UncompressedSize(i); zipEntryRom.CRC = zf.CRC32(i); diff --git a/SabreTools.Library/FileTypes/TapeArchive.cs b/SabreTools.Library/FileTypes/TapeArchive.cs index 5e227310..19bf9247 100644 --- a/SabreTools.Library/FileTypes/TapeArchive.cs +++ b/SabreTools.Library/FileTypes/TapeArchive.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using SabreTools.Library.Data; +using SabreTools.Library.DatFiles; using SabreTools.Library.DatItems; using SabreTools.Library.IO; using SabreTools.Library.Tools; @@ -194,7 +195,7 @@ namespace SabreTools.Library.FileTypes BaseFile tarEntryRom = new BaseFile(); // Perform a quickscan, if flagged to - if (QuickScan) + if (this.AvailableHashes == Hash.CRC) { tarEntryRom.Size = entry.Size; tarEntryRom.CRC = BitConverter.GetBytes(entry.Crc); diff --git a/SabreTools.Library/FileTypes/XZArchive.cs b/SabreTools.Library/FileTypes/XZArchive.cs index 9203e80b..0635014f 100644 --- a/SabreTools.Library/FileTypes/XZArchive.cs +++ b/SabreTools.Library/FileTypes/XZArchive.cs @@ -4,6 +4,7 @@ using System.IO; using System.Text.RegularExpressions; using SabreTools.Library.Data; +using SabreTools.Library.DatFiles; using SabreTools.Library.DatItems; using SabreTools.Library.IO; using SabreTools.Library.Tools; @@ -209,31 +210,32 @@ namespace SabreTools.Library.FileTypes { try { - // Perform a quickscan, if flagged to - if (QuickScan) - { - BaseFile tempRom = new BaseFile() - { - Filename = gamename, - }; - BinaryReader br = new BinaryReader(FileExtensions.TryOpenRead(this.Filename)); - br.BaseStream.Seek(-8, SeekOrigin.End); - tempRom.CRC = br.ReadBytesBigEndian(4); - tempRom.Size = br.ReadInt32BigEndian(); - br.Dispose(); + // Create a blank item for the entry + BaseFile xzEntryRom = new BaseFile(); - _children.Add(tempRom); + // Perform a quickscan, if flagged to + if (this.AvailableHashes == Hash.CRC) + { + xzEntryRom.Filename = gamename; + using (BinaryReader br = new BinaryReader(FileExtensions.TryOpenRead(this.Filename))) + { + br.BaseStream.Seek(-8, SeekOrigin.End); + xzEntryRom.CRC = br.ReadBytesBigEndian(4); + xzEntryRom.Size = br.ReadInt32BigEndian(); + } } // Otherwise, use the stream directly else { var xzStream = new XZStream(File.OpenRead(this.Filename)); - BaseFile xzEntryRom = xzStream.GetInfo(hashes: this.AvailableHashes); + xzEntryRom = xzStream.GetInfo(hashes: this.AvailableHashes); xzEntryRom.Filename = gamename; - xzEntryRom.Parent = gamename; - _children.Add(xzEntryRom); xzStream.Dispose(); } + + // Fill in comon details and add to the list + xzEntryRom.Parent = gamename; + _children.Add(xzEntryRom); } catch (Exception ex) { diff --git a/SabreTools.Library/FileTypes/ZipArchive.cs b/SabreTools.Library/FileTypes/ZipArchive.cs index 6d9561d9..01a69687 100644 --- a/SabreTools.Library/FileTypes/ZipArchive.cs +++ b/SabreTools.Library/FileTypes/ZipArchive.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using SabreTools.Library.Data; +using SabreTools.Library.DatFiles; using SabreTools.Library.DatItems; using SabreTools.Library.IO; using SabreTools.Library.Tools; @@ -300,7 +301,7 @@ namespace SabreTools.Library.FileTypes BaseFile zipEntryRom = new BaseFile(); // Perform a quickscan, if flagged to - if (QuickScan) + if (this.AvailableHashes == Hash.CRC) { zipEntryRom.Size = (long)zf.UncompressedSize(i); zipEntryRom.CRC = zf.CRC32(i);