diff --git a/RombaSharp/Features/Archive.cs b/RombaSharp/Features/Archive.cs index 0c957d33..5072955e 100644 --- a/RombaSharp/Features/Archive.cs +++ b/RombaSharp/Features/Archive.cs @@ -64,8 +64,8 @@ have a current entry in the DAT index."; DatFile df = DatFile.Create(); foreach (string dir in onlyDirs) { - df.PopulateFromDir(dir, asFiles: TreatAsFiles.AaruFormats | TreatAsFiles.CHDs); - df.PopulateFromDir(dir, asFiles: TreatAsFiles.AaruFormats | TreatAsFiles.Archives | TreatAsFiles.CHDs); + df.PopulateFromDir(dir, asFiles: TreatAsFile.AaruFormat | TreatAsFile.CHD); + df.PopulateFromDir(dir, asFiles: TreatAsFile.AaruFormat | TreatAsFile.Archive | TreatAsFile.CHD); } // Create an empty Dat for files that need to be rebuilt @@ -192,7 +192,7 @@ have a current entry in the DAT index."; onlyDirs, outDir: _depots.Keys.ToList()[0], outputFormat: OutputFormat.TorrentGzipRomba, - asFiles: TreatAsFiles.AaruFormats | TreatAsFiles.CHDs); + asFiles: TreatAsFile.AaruFormat | TreatAsFile.CHD); } } } diff --git a/RombaSharp/Features/Dir2Dat.cs b/RombaSharp/Features/Dir2Dat.cs index 28f12742..8a2d55bc 100644 --- a/RombaSharp/Features/Dir2Dat.cs +++ b/RombaSharp/Features/Dir2Dat.cs @@ -51,7 +51,7 @@ namespace RombaSharp.Features DatFile datfile = DatFile.Create(); datfile.Header.Name = string.IsNullOrWhiteSpace(name) ? "untitled" : name; datfile.Header.Description = description; - datfile.PopulateFromDir(source, asFiles: TreatAsFiles.AaruFormats | TreatAsFiles.CHDs); + datfile.PopulateFromDir(source, asFiles: TreatAsFile.AaruFormat | TreatAsFile.CHD); datfile.Write(outDir: outdat); } } diff --git a/RombaSharp/Features/RefreshDats.cs b/RombaSharp/Features/RefreshDats.cs index c977b2cb..8770f557 100644 --- a/RombaSharp/Features/RefreshDats.cs +++ b/RombaSharp/Features/RefreshDats.cs @@ -61,7 +61,7 @@ contents of any changed dats."; // First get a list of SHA-1's from the input DATs DatFile datroot = DatFile.Create(); datroot.Header.Type = "SuperDAT"; - datroot.PopulateFromDir(_dats, asFiles: TreatAsFiles.AaruFormats | TreatAsFiles.CHDs); + datroot.PopulateFromDir(_dats, asFiles: TreatAsFile.AaruFormat | TreatAsFile.CHD); datroot.Items.BucketBy(Field.DatItem_SHA1, DedupeType.None); // Create a List of dat hashes in the database (SHA-1) diff --git a/RombaSharp/Features/RescanDepots.cs b/RombaSharp/Features/RescanDepots.cs index c5e284ef..0d40637c 100644 --- a/RombaSharp/Features/RescanDepots.cs +++ b/RombaSharp/Features/RescanDepots.cs @@ -63,7 +63,7 @@ namespace RombaSharp.Features // Now rescan the depot itself DatFile depot = DatFile.Create(); - depot.PopulateFromDir(depotname, asFiles: TreatAsFiles.AaruFormats | TreatAsFiles.CHDs); + depot.PopulateFromDir(depotname, asFiles: TreatAsFile.AaruFormat | TreatAsFile.CHD); depot.Items.BucketBy(Field.DatItem_SHA1, DedupeType.None); // Set the base queries to use diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs index a1079429..39d83827 100644 --- a/SabreTools.Library/DatFiles/DatFile.cs +++ b/SabreTools.Library/DatFiles/DatFile.cs @@ -1982,7 +1982,7 @@ namespace SabreTools.Library.DatFiles public bool PopulateFromDir( string basePath, Hash omitFromScan = Hash.DeepHashes, - TreatAsFiles asFiles = 0x00, + TreatAsFile asFiles = 0x00, SkipFileType skipFileType = SkipFileType.None, bool addBlanks = false, bool addDate = false, @@ -2075,7 +2075,7 @@ namespace SabreTools.Library.DatFiles string item, string basePath, Hash omitFromScan, - TreatAsFiles asFiles, + TreatAsFile asFiles, SkipFileType skipFileType, bool addBlanks, bool addDate, @@ -2093,7 +2093,7 @@ namespace SabreTools.Library.DatFiles List extracted = null; // If we have an archive and we're supposed to scan it - if (archive != null && !asFiles.HasFlag(TreatAsFiles.Archives)) + if (archive != null && !asFiles.HasFlag(TreatAsFile.Archive)) extracted = archive.GetChildren(omitFromScan: omitFromScan, date: addDate); // If the file should be skipped based on type, do so now @@ -2216,7 +2216,7 @@ namespace SabreTools.Library.DatFiles /// Hash flag saying what hashes should not be calculated /// True if dates should be archived for all files, false otherwise /// TreatAsFiles representing CHD and Archive scanning - private void ProcessFile(string item, string basePath, Hash omitFromScan, bool addDate, TreatAsFiles asFiles) + private void ProcessFile(string item, string basePath, Hash omitFromScan, bool addDate, TreatAsFile asFiles) { Globals.Logger.Verbose($"'{Path.GetFileName(item)}' treated like a file"); BaseFile baseFile = FileExtensions.GetInfo(item, addDate, Header.HeaderSkipper, asFiles); @@ -2508,7 +2508,7 @@ namespace SabreTools.Library.DatFiles bool delete = false, bool inverse = false, OutputFormat outputFormat = OutputFormat.Folder, - TreatAsFiles asFiles = 0x00) + TreatAsFile asFiles = 0x00) { #region Perform setup @@ -2590,7 +2590,7 @@ namespace SabreTools.Library.DatFiles bool delete, bool inverse, OutputFormat outputFormat, - TreatAsFiles asFiles) + TreatAsFile asFiles) { // If we somehow have a null filename, return if (file == null) @@ -2997,7 +2997,7 @@ namespace SabreTools.Library.DatFiles /// True to enable external scanning of archives, false otherwise /// TreatAsFiles representing CHD and Archive scanning /// True if verification was a success, false otherwise - public bool VerifyGeneric(List inputs, bool hashOnly, bool quickScan, TreatAsFiles asFiles = 0x00) + public bool VerifyGeneric(List inputs, bool hashOnly, bool quickScan, TreatAsFile asFiles = 0x00) { bool success = true; diff --git a/SabreTools.Library/DatFiles/Enums.cs b/SabreTools.Library/DatFiles/Enums.cs index 7f229396..d329f942 100644 --- a/SabreTools.Library/DatFiles/Enums.cs +++ b/SabreTools.Library/DatFiles/Enums.cs @@ -276,11 +276,12 @@ namespace SabreTools.Library.DatFiles /// /// Determines what sort of files get externally hashed /// + /// TODO: Can FileType be used instead? [Flags] - public enum TreatAsFiles + public enum TreatAsFile { - CHDs = 1 << 0, - Archives = 1 << 1, - AaruFormats = 1 << 2, + CHD = 1 << 0, + Archive = 1 << 1, + AaruFormat = 1 << 2, } } diff --git a/SabreTools.Library/IO/FileExtensions.cs b/SabreTools.Library/IO/FileExtensions.cs index 7a645793..99f1c932 100644 --- a/SabreTools.Library/IO/FileExtensions.cs +++ b/SabreTools.Library/IO/FileExtensions.cs @@ -343,7 +343,7 @@ namespace SabreTools.Library.IO /// Populated string representing the name of the skipper to use, a blank string to use the first available checker, null otherwise /// TreatAsFiles representing special format scanning /// Populated BaseFile object if success, empty one on error - public static BaseFile GetInfo(string input, bool date = false, string header = null, TreatAsFiles asFiles = 0x00) + public static BaseFile GetInfo(string input, bool date = false, string header = null, TreatAsFile asFiles = 0x00) { // Add safeguard if file doesn't exist if (!File.Exists(input)) @@ -351,57 +351,36 @@ namespace SabreTools.Library.IO // Get input information var fileType = input.GetFileType(); - var inputStream = TryOpenRead(input); + Stream inputStream = TryOpenRead(input); - // Get the information from the file stream - BaseFile baseFile; + // Try to match the supplied header skipper if (header != null) { SkipperRule rule = Transform.GetMatchingRule(input, Path.GetFileNameWithoutExtension(header)); - // If there's a match, get the new information from the stream + // If there's a match, transform the stream before getting info if (rule.Tests != null && rule.Tests.Count != 0) { // Create the output stream MemoryStream outputStream = new MemoryStream(); - + // Transform the stream and get the information from it rule.TransformStream(inputStream, outputStream, keepReadOpen: false, keepWriteOpen: true); - - if (fileType == FileType.AaruFormat && !asFiles.HasFlag(TreatAsFiles.AaruFormats)) - baseFile = AaruFormat.Create(outputStream); - else if (fileType == FileType.CHD && !asFiles.HasFlag(TreatAsFiles.CHDs)) - baseFile = CHDFile.Create(outputStream); - else - baseFile = outputStream.GetInfo(keepReadOpen: false); - - // Dispose of the output stream - outputStream.Dispose(); - - } - // Otherwise, just get the info - else - { - if (fileType == FileType.AaruFormat && !asFiles.HasFlag(TreatAsFiles.AaruFormats)) - baseFile = AaruFormat.Create(inputStream); - else if (fileType == FileType.CHD && !asFiles.HasFlag(TreatAsFiles.CHDs)) - baseFile = CHDFile.Create(inputStream); - else - baseFile = inputStream.GetInfo(keepReadOpen: false); + inputStream = outputStream; } } + + // Get the info in the proper manner + BaseFile baseFile; + if (fileType == FileType.AaruFormat && !asFiles.HasFlag(TreatAsFile.AaruFormat)) + baseFile = AaruFormat.Create(inputStream); + else if (fileType == FileType.CHD && !asFiles.HasFlag(TreatAsFile.CHD)) + baseFile = CHDFile.Create(inputStream); else - { - if (fileType == FileType.AaruFormat && !asFiles.HasFlag(TreatAsFiles.AaruFormats)) - baseFile = AaruFormat.Create(inputStream); - else if (fileType == FileType.CHD && !asFiles.HasFlag(TreatAsFiles.CHDs)) - baseFile = CHDFile.Create(inputStream); - else - baseFile = inputStream.GetInfo(keepReadOpen: false); - } + baseFile = inputStream.GetInfo(keepReadOpen: false); // Dispose of the input stream - inputStream.Dispose(); + inputStream?.Dispose(); // Add unique data from the file baseFile.Filename = Path.GetFileName(input); diff --git a/SabreTools.Library/Skippers/Transform.cs b/SabreTools.Library/Skippers/Transform.cs index b6473752..8e9f6f88 100644 --- a/SabreTools.Library/Skippers/Transform.cs +++ b/SabreTools.Library/Skippers/Transform.cs @@ -119,7 +119,7 @@ namespace SabreTools.Library.Skippers // Now add the information to the database if it's not already there if (!nostore) { - BaseFile baseFile = FileExtensions.GetInfo(newfile, asFiles: TreatAsFiles.AaruFormats | TreatAsFiles.CHDs); + BaseFile baseFile = FileExtensions.GetInfo(newfile, asFiles: TreatAsFile.AaruFormat | TreatAsFile.CHD); DatabaseTools.AddHeaderToDatabase(hstr, Utilities.ByteArrayToString(baseFile.SHA1), rule.SourceFile); } @@ -139,7 +139,7 @@ namespace SabreTools.Library.Skippers Directory.CreateDirectory(outDir); // First, get the SHA-1 hash of the file - BaseFile baseFile = FileExtensions.GetInfo(file, asFiles: TreatAsFiles.AaruFormats | TreatAsFiles.CHDs); + BaseFile baseFile = FileExtensions.GetInfo(file, asFiles: TreatAsFile.AaruFormat | TreatAsFile.CHD); // Retrieve a list of all related headers from the database List headers = DatabaseTools.RetrieveHeadersFromDatabase(Utilities.ByteArrayToString(baseFile.SHA1)); diff --git a/SabreTools/Features/BaseFeature.cs b/SabreTools/Features/BaseFeature.cs index 275d9235..22dfeeab 100644 --- a/SabreTools/Features/BaseFeature.cs +++ b/SabreTools/Features/BaseFeature.cs @@ -2584,15 +2584,15 @@ Some special strings that can be used: /// /// Get TreatAsFiles from feature list /// - protected TreatAsFiles GetTreatAsFiles(Dictionary features) + protected TreatAsFile GetTreatAsFiles(Dictionary features) { - TreatAsFiles asFiles = 0x00; + TreatAsFile asFiles = 0x00; if (GetBoolean(features, AaruFormatsAsFilesValue)) - asFiles |= TreatAsFiles.AaruFormats; + asFiles |= TreatAsFile.AaruFormat; if (GetBoolean(features, ArchivesAsFilesValue)) - asFiles |= TreatAsFiles.Archives; + asFiles |= TreatAsFile.Archive; if (GetBoolean(features, ChdsAsFilesValue)) - asFiles |= TreatAsFiles.CHDs; + asFiles |= TreatAsFile.CHD; return asFiles; } diff --git a/SabreTools/Features/DatFromDir.cs b/SabreTools/Features/DatFromDir.cs index e436f767..c93ec8c0 100644 --- a/SabreTools/Features/DatFromDir.cs +++ b/SabreTools/Features/DatFromDir.cs @@ -60,7 +60,7 @@ namespace SabreTools.Features // Get feature flags bool addBlankFiles = GetBoolean(features, AddBlankFilesValue); bool addFileDates = GetBoolean(features, AddDateValue); - TreatAsFiles asFiles = GetTreatAsFiles(features); + TreatAsFile asFiles = GetTreatAsFiles(features); bool copyFiles = GetBoolean(features, CopyFilesValue); bool noAutomaticDate = GetBoolean(features, NoAutomaticDateValue); var omitFromScan = GetOmitFromScan(features); diff --git a/SabreTools/Features/Sort.cs b/SabreTools/Features/Sort.cs index 380be3a3..e340c54a 100644 --- a/SabreTools/Features/Sort.cs +++ b/SabreTools/Features/Sort.cs @@ -60,7 +60,7 @@ namespace SabreTools.Features base.ProcessFeatures(features); // Get feature flags - TreatAsFiles asFiles = GetTreatAsFiles(features); + TreatAsFile asFiles = GetTreatAsFiles(features); bool date = GetBoolean(features, AddDateValue); bool delete = GetBoolean(features, DeleteValue); bool inverse = GetBoolean(features, InverseValue); diff --git a/SabreTools/Features/Verify.cs b/SabreTools/Features/Verify.cs index c5880d2a..eb154269 100644 --- a/SabreTools/Features/Verify.cs +++ b/SabreTools/Features/Verify.cs @@ -45,7 +45,7 @@ namespace SabreTools.Features var datfilePaths = DirectoryExtensions.GetFilesOnly(datfiles); // Get feature flags - TreatAsFiles asFiles = GetTreatAsFiles(features); + TreatAsFile asFiles = GetTreatAsFiles(features); bool hashOnly = GetBoolean(features, HashOnlyValue); bool quickScan = GetBoolean(features, QuickValue); var splitType = GetSplitType(features);