Make TreatAsFile part of the DFD constructor

This commit is contained in:
Matt Nadareski
2025-02-19 22:24:00 -05:00
parent 520384f5b9
commit 45099515e7
4 changed files with 28 additions and 22 deletions

View File

@@ -34,6 +34,11 @@ namespace SabreTools.DatTools
/// </summary> /// </summary>
private readonly SkipFileType _skipFileType; private readonly SkipFileType _skipFileType;
/// <summary>
/// TreatAsFile representing CHD and Archive scanning</param>
/// </summary>
private readonly TreatAsFile _treatAsFile;
/// <summary> /// <summary>
/// Indicates if blank items should be created for empty folders /// Indicates if blank items should be created for empty folders
/// </summary> /// </summary>
@@ -52,13 +57,14 @@ namespace SabreTools.DatTools
#region Constructors #region Constructors
public DatFromDir(HashType[] hashes, SkipFileType skipFileType, bool addBlanks) public DatFromDir(HashType[] hashes, SkipFileType skipFileType, TreatAsFile treatAsFile, bool addBlanks)
{ {
if (hashes.Length == 0) if (hashes.Length == 0)
throw new ArgumentException($"{nameof(hashes)} must contain at least one valid HashType"); throw new ArgumentException($"{nameof(hashes)} must contain at least one valid HashType");
_hashes = hashes; _hashes = hashes;
_skipFileType = skipFileType; _skipFileType = skipFileType;
_treatAsFile = treatAsFile;
_addBlanks = addBlanks; _addBlanks = addBlanks;
} }
@@ -69,8 +75,7 @@ namespace SabreTools.DatTools
/// </summary> /// </summary>
/// <param name="datFile">Current DatFile object to add to</param> /// <param name="datFile">Current DatFile object to add to</param>
/// <param name="basePath">Base folder to be used in creating the DAT</param> /// <param name="basePath">Base folder to be used in creating the DAT</param>
/// <param name="asFile">TreatAsFile representing CHD and Archive scanning</param> public bool PopulateFromDir(DatFile datFile, string basePath)
public bool PopulateFromDir(DatFile datFile, string basePath, TreatAsFile asFile = 0x00)
{ {
InternalStopwatch watch = new($"Populating DAT from {basePath}"); InternalStopwatch watch = new($"Populating DAT from {basePath}");
@@ -91,7 +96,7 @@ namespace SabreTools.DatTools
foreach (string item in files) foreach (string item in files)
{ {
currentCount++; currentCount++;
CheckFileForHashes(datFile, item, basePath, asFile); CheckFileForHashes(datFile, item, basePath);
_staticLogger.User(totalCount, currentCount, item); _staticLogger.User(totalCount, currentCount, item);
} }
@@ -110,7 +115,7 @@ namespace SabreTools.DatTools
// Process the input file // Process the input file
string? parentPath = Path.GetDirectoryName(Path.GetDirectoryName(basePath)); string? parentPath = Path.GetDirectoryName(Path.GetDirectoryName(basePath));
CheckFileForHashes(datFile, basePath, parentPath, asFile); CheckFileForHashes(datFile, basePath, parentPath);
_staticLogger.User(totalCount, totalCount, basePath); _staticLogger.User(totalCount, totalCount, basePath);
} }
@@ -130,7 +135,7 @@ namespace SabreTools.DatTools
/// <param name="item">Filename of the item to be checked</param> /// <param name="item">Filename of the item to be checked</param>
/// <param name="basePath">Base folder to be used in creating the DAT</param> /// <param name="basePath">Base folder to be used in creating the DAT</param>
/// <param name="asFile">TreatAsFile representing CHD and Archive scanning</param> /// <param name="asFile">TreatAsFile representing CHD and Archive scanning</param>
private void CheckFileForHashes(DatFile datFile, string item, string? basePath, TreatAsFile asFile) private void CheckFileForHashes(DatFile datFile, string item, string? basePath)
{ {
// If we're in depot mode, process it separately // If we're in depot mode, process it separately
if (CheckDepotFile(datFile, item)) if (CheckDepotFile(datFile, item))
@@ -147,9 +152,9 @@ namespace SabreTools.DatTools
// Skip if we're treating archives as files and skipping files // Skip if we're treating archives as files and skipping files
#if NET20 || NET35 #if NET20 || NET35
if ((asFile & TreatAsFile.Archive) != 0 && _skipFileType == SkipFileType.File) if ((_treatAsFile & TreatAsFile.Archive) != 0 && _skipFileType == SkipFileType.File)
#else #else
if (asFile.HasFlag(TreatAsFile.Archive) && _skipFileType == SkipFileType.File) if (_treatAsFile.HasFlag(TreatAsFile.Archive) && _skipFileType == SkipFileType.File)
#endif #endif
{ {
return; return;
@@ -163,9 +168,9 @@ namespace SabreTools.DatTools
// Process as archive if we're not treating archives as files // Process as archive if we're not treating archives as files
#if NET20 || NET35 #if NET20 || NET35
else if ((asFile & TreatAsFile.Archive) == 0) else if ((_treatAsFile & TreatAsFile.Archive) == 0)
#else #else
else if (!asFile.HasFlag(TreatAsFile.Archive)) else if (!_treatAsFile.HasFlag(TreatAsFile.Archive))
#endif #endif
{ {
var extracted = archive.GetChildren(); var extracted = archive.GetChildren();
@@ -182,7 +187,7 @@ namespace SabreTools.DatTools
// Process as file if we're treating archives as files // Process as file if we're treating archives as files
else else
{ {
ProcessFile(datFile, item, basePath, asFile); ProcessFile(datFile, item, basePath);
} }
} }
@@ -195,7 +200,7 @@ namespace SabreTools.DatTools
// Process as file // Process as file
else else
ProcessFile(datFile, item, basePath, asFile); ProcessFile(datFile, item, basePath);
} }
} }
@@ -392,12 +397,12 @@ namespace SabreTools.DatTools
/// <param name="item">File to be added</param> /// <param name="item">File to be added</param>
/// <param name="basePath">Path the represents the parent directory</param> /// <param name="basePath">Path the represents the parent directory</param>
/// <param name="asFile">TreatAsFile representing CHD and Archive scanning</param> /// <param name="asFile">TreatAsFile representing CHD and Archive scanning</param>
private void ProcessFile(DatFile datFile, string item, string? basePath, TreatAsFile asFile) private void ProcessFile(DatFile datFile, string item, string? basePath)
{ {
_staticLogger.Verbose($"'{Path.GetFileName(item)}' treated like a file"); _staticLogger.Verbose($"'{Path.GetFileName(item)}' treated like a file");
var header = datFile.Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey); var header = datFile.Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey);
BaseFile? baseFile = FileTypeTool.GetInfo(item, _hashes, header); BaseFile? baseFile = FileTypeTool.GetInfo(item, _hashes, header);
DatItem? datItem = DatItemTool.CreateDatItem(baseFile, asFile); DatItem? datItem = DatItemTool.CreateDatItem(baseFile, _treatAsFile);
if (datItem != null) if (datItem != null)
ProcessFileHelper(datFile, item, datItem, basePath, string.Empty); ProcessFileHelper(datFile, item, datItem, basePath, string.Empty);
} }

View File

@@ -5,6 +5,7 @@ using System.Text.RegularExpressions;
using SabreTools.Core.Filter; using SabreTools.Core.Filter;
using SabreTools.Core.Tools; using SabreTools.Core.Tools;
using SabreTools.DatFiles; using SabreTools.DatFiles;
using SabreTools.DatItems;
using SabreTools.DatTools; using SabreTools.DatTools;
using SabreTools.Hashing; using SabreTools.Hashing;
using SabreTools.Help; using SabreTools.Help;
@@ -271,7 +272,7 @@ Reset the internal state: reset();";
public override void Process(BatchState batchState) public override void Process(BatchState batchState)
{ {
HashType[] hashes = [HashType.CRC32, HashType.MD5, HashType.SHA1]; HashType[] hashes = [HashType.CRC32, HashType.MD5, HashType.SHA1];
var dfd = new DatTools.DatFromDir(hashes, SkipFileType.None, addBlanks: false); var dfd = new DatTools.DatFromDir(hashes, SkipFileType.None, (TreatAsFile)0x00, addBlanks: false);
// Assume there could be multiple // Assume there could be multiple
foreach (string input in Arguments) foreach (string input in Arguments)

View File

@@ -60,11 +60,11 @@ namespace SabreTools.Features
// Get feature flags // Get feature flags
bool addBlankFiles = GetBoolean(features, AddBlankFilesValue); bool addBlankFiles = GetBoolean(features, AddBlankFilesValue);
bool addFileDates = GetBoolean(features, AddDateValue); bool addFileDates = GetBoolean(features, AddDateValue);
TreatAsFile asFile = GetTreatAsFile(features); TreatAsFile treatAsFile = GetTreatAsFile(features);
bool noAutomaticDate = GetBoolean(features, NoAutomaticDateValue); bool noAutomaticDate = GetBoolean(features, NoAutomaticDateValue);
var includeInScan = GetIncludeInScan(features); var includeInScan = GetIncludeInScan(features);
var skipFileType = GetSkipFileType(features); var skipFileType = GetSkipFileType(features);
var dfd = new DatTools.DatFromDir(includeInScan, skipFileType, addBlankFiles); var dfd = new DatTools.DatFromDir(includeInScan, skipFileType, treatAsFile, addBlankFiles);
// Apply the specialized field removals to the cleaner // Apply the specialized field removals to the cleaner
if (!addFileDates) if (!addFileDates)
@@ -91,7 +91,7 @@ namespace SabreTools.Features
datdata.FillHeaderFromPath(basePath, noAutomaticDate); datdata.FillHeaderFromPath(basePath, noAutomaticDate);
// Now populate from the path // Now populate from the path
bool success = dfd.PopulateFromDir(datdata, basePath, asFile); bool success = dfd.PopulateFromDir(datdata, basePath);
if (success) if (success)
{ {
// Perform additional processing steps // Perform additional processing steps

View File

@@ -50,11 +50,11 @@ namespace SabreTools.Features
var datfilePaths = PathTool.GetFilesOnly(datfiles); var datfilePaths = PathTool.GetFilesOnly(datfiles);
// Get feature flags // Get feature flags
TreatAsFile asFile = GetTreatAsFile(features); TreatAsFile treatAsFile = GetTreatAsFile(features);
bool hashOnly = GetBoolean(features, HashOnlyValue); bool hashOnly = GetBoolean(features, HashOnlyValue);
bool quickScan = GetBoolean(features, QuickValue); bool quickScan = GetBoolean(features, QuickValue);
HashType[] hashes = quickScan ? [HashType.CRC32] : [HashType.CRC32, HashType.MD5, HashType.SHA1]; HashType[] hashes = quickScan ? [HashType.CRC32] : [HashType.CRC32, HashType.MD5, HashType.SHA1];
var dfd = new DatTools.DatFromDir(hashes, SkipFileType.None, addBlanks: false); var dfd = new DatTools.DatFromDir(hashes, SkipFileType.None, treatAsFile, addBlanks: false);
// If we are in individual mode, process each DAT on their own // If we are in individual mode, process each DAT on their own
if (GetBoolean(features, IndividualValue)) if (GetBoolean(features, IndividualValue))
@@ -93,7 +93,7 @@ namespace SabreTools.Features
_logger.User("Processing files:\n"); _logger.User("Processing files:\n");
foreach (string input in Inputs) foreach (string input in Inputs)
{ {
dfd.PopulateFromDir(datdata, input, asFile); dfd.PopulateFromDir(datdata, input);
} }
Verification.VerifyGeneric(datdata, hashOnly); Verification.VerifyGeneric(datdata, hashOnly);
@@ -147,7 +147,7 @@ namespace SabreTools.Features
_logger.User("Processing files:\n"); _logger.User("Processing files:\n");
foreach (string input in Inputs) foreach (string input in Inputs)
{ {
dfd.PopulateFromDir(datdata, input, asFile); dfd.PopulateFromDir(datdata, input);
} }
Verification.VerifyGeneric(datdata, hashOnly); Verification.VerifyGeneric(datdata, hashOnly);