diff --git a/DATFromDir/DATFromDir.cs b/DATFromDir/DATFromDir.cs index 16ceabf0..d8109620 100644 --- a/DATFromDir/DATFromDir.cs +++ b/DATFromDir/DATFromDir.cs @@ -28,6 +28,7 @@ namespace SabreTools private bool _noSHA1; private bool _bare; private bool _archivesAsFiles; + private bool _enableGzip; // Other required variables private Logger _logger; @@ -41,8 +42,9 @@ namespace SabreTools /// True if SHA-1 hashes should be skipped over, false otherwise /// True if the date should be omitted from the DAT, false otherwise /// True if archives should be treated as files, false otherwise + /// True if GZIP archives should be treated as files, false otherwise> /// Logger object for console and file output - public DATFromDir(List inputs, DatData datdata, bool noMD5, bool noSHA1, bool bare, bool archivesAsFiles, Logger logger) + public DATFromDir(List inputs, DatData datdata, bool noMD5, bool noSHA1, bool bare, bool archivesAsFiles, bool enableGzip, Logger logger) { _inputs = inputs; _datdata = datdata; @@ -50,6 +52,7 @@ namespace SabreTools _noSHA1 = noSHA1; _bare = bare; _archivesAsFiles = archivesAsFiles; + _enableGzip = enableGzip; _logger = logger; } @@ -72,7 +75,7 @@ namespace SabreTools logger.Start(); // First things first, take care of all of the arguments that this could have - bool noMD5 = false, noSHA1 = false, forceunpack = false, archivesAsFiles = false, old = false, superDat = false, bare = false, romba = false; + bool noMD5 = false, noSHA1 = false, forceunpack = false, archivesAsFiles = false, old = false, superDat = false, bare = false, romba = false, enableGzip = false; string name = "", desc = "", cat = "", version = "", author = ""; List inputs = new List(); foreach (string arg in args) @@ -85,26 +88,22 @@ namespace SabreTools Build.Help(); logger.Close(); return; - case "-m": - case "--noMD5": - noMD5 = true; - break; - case "-s": - case "--noSHA1": - noSHA1 = true; - break; case "-b": case "--bare": bare = true; break; - case "-u": - case "--unzip": - forceunpack = true; - break; case "-f": case "--files": archivesAsFiles = true; break; + case "-gz": + case "--gz-files": + enableGzip = true; + break; + case "-m": + case "--noMD5": + noMD5 = true; + break; case "-o": case "--old": old = true; @@ -113,10 +112,18 @@ namespace SabreTools case "--romba": romba = true; break; + case "-s": + case "--noSHA1": + noSHA1 = true; + break; case "-sd": case "--superdat": superDat = true; break; + case "-u": + case "--unzip": + forceunpack = true; + break; default: if (arg.StartsWith("-n=") || arg.StartsWith("--name=")) { @@ -184,7 +191,7 @@ namespace SabreTools Type = (superDat ? "SuperDAT" : ""), Roms = new Dictionary>(), }; - DATFromDir dfd = new DATFromDir(inputs, datdata, noMD5, noSHA1, bare, archivesAsFiles, logger); + DATFromDir dfd = new DATFromDir(inputs, datdata, noMD5, noSHA1, bare, archivesAsFiles, enableGzip, logger); bool success = dfd.Start(); // If we failed, show the help @@ -367,6 +374,36 @@ namespace SabreTools /// Filename of the item to be checked private void ProcessFile(string item) { + // Special case for if we are in Romba mode (all names are SHA-1 hashes) + if (_datdata.Romba) + { + string datum = Path.GetFileNameWithoutExtension(item); + + RomData rom = new RomData + { + Type = "rom", + Game = datum, + Name = datum, + Size = 1, + SHA1 = Path.GetFileNameWithoutExtension(item), + }; + + string key = datum; + if (_datdata.Roms.ContainsKey(key)) + { + _datdata.Roms[key].Add(rom); + } + else + { + List temp = new List(); + temp.Add(rom); + _datdata.Roms.Add(key, temp); + } + + _logger.User("File added: " + Path.GetFileNameWithoutExtension(item) + Environment.NewLine); + return; + } + // Create the temporary output directory bool encounteredErrors = true; if (!_archivesAsFiles) @@ -377,7 +414,7 @@ namespace SabreTools ArchiveType at = archive.Type; _logger.Log("Found archive of type: " + at); - if (at == ArchiveType.Zip || at == ArchiveType.SevenZip || at == ArchiveType.Rar || (at == ArchiveType.GZip && _datdata.Romba)) + if (at == ArchiveType.Zip || at == ArchiveType.SevenZip || at == ArchiveType.Rar || (at == ArchiveType.GZip && _enableGzip)) { _tempDir = Environment.CurrentDirectory + Path.DirectorySeparatorChar + "temp" + DateTime.Now.ToString("yyyyMMddHHmmss") + Path.DirectorySeparatorChar; DirectoryInfo di = Directory.CreateDirectory(_tempDir); diff --git a/SabreHelper/Build.cs b/SabreHelper/Build.cs index 0f245689..45ea1ecf 100644 --- a/SabreHelper/Build.cs +++ b/SabreHelper/Build.cs @@ -162,7 +162,8 @@ Options: -u, --unzip Force unzipping in created DAT -f, --files Treat archives as files -o, --old Output DAT in CMP format instead of XML - -ro, --romba Allow reading of GZIP files for Romba + -gz, --gz-files Allow reading of GZIP files as archives + -ro, --romba Read files from a Romba input -n=, --name= Set the internal name of the DAT -d=, --desc= Set the filename and description of the DAT -c=, --cat= Set the category of the DAT