diff --git a/SabreTools.Helper/Data/Build.cs b/SabreTools.Helper/Data/Build.cs index 671c0e5d..1e301212 100644 --- a/SabreTools.Helper/Data/Build.cs +++ b/SabreTools.Helper/Data/Build.cs @@ -128,7 +128,7 @@ namespace SabreTools.Helper helptext.Add(" -osl, --output-sl Output in Softwarelist format"); helptext.Add(" -otsv, --output-tsv Output in TSV format"); helptext.Add(" -ox, --output-xml Output in Logiqx XML format"); - helptext.Add(" -gz, --gz-files Allow reading of GZIP files as archives"); + helptext.Add(" -gzf, --gz-files Allow reading of GZIP files as archives"); helptext.Add(" -ro, --romba Read files from a Romba input"); helptext.Add(" -f=, --filename= Set the external name of the DAT"); helptext.Add(" -n=, --name= Set the internal name of the DAT"); diff --git a/SabreTools.Helper/README.1ST b/SabreTools.Helper/README.1ST index a1d00c26..96feb7d6 100644 --- a/SabreTools.Helper/README.1ST +++ b/SabreTools.Helper/README.1ST @@ -1006,7 +1006,7 @@ Below are originally from SabreTools / DATabase - -ox, -output-xml Output in Logiqx XML format (default) Add outputting the created DAT to Logiqx XML format - -gz, -gz-files Allow reading of GZIP files as archives + -gzf, -gz-files Allow reading of GZIP files as archives Since GZip files are not commonly used for file storage, this flag allows for any GZip archives to have their contents hashed instead. diff --git a/SabreTools/Partials/SabreTools_Inits.cs b/SabreTools/Partials/SabreTools_Inits.cs index 8ea8abf3..cd560eba 100644 --- a/SabreTools/Partials/SabreTools_Inits.cs +++ b/SabreTools/Partials/SabreTools_Inits.cs @@ -24,27 +24,26 @@ namespace SabreTools /// Integer representing the archive handling level for GZip /// Integer representing the archive handling level for RAR /// Integer representing the archive handling level for Zip - /// Logger object for file and console output public static bool InitConvertFolder(List datfiles, List inputs, string outDir, string tempDir, bool delete, - bool tgz, bool romba, int sevenzip, int gz, int rar, int zip, Logger logger) + bool tgz, bool romba, int sevenzip, int gz, int rar, int zip) { // Get the archive scanning level ArchiveScanLevel asl = ArchiveTools.GetArchiveScanLevelFromNumbers(sevenzip, gz, rar, zip); DateTime start = DateTime.Now; - logger.User("Populating internal DAT..."); + _logger.User("Populating internal DAT..."); // Add all of the input DATs into one huge internal DAT DatFile datdata = new DatFile(); foreach (string datfile in datfiles) { - datdata.Parse(datfile, 99, 99, logger, keep: true, softlist: true); + datdata.Parse(datfile, 99, 99, _logger, keep: true, softlist: true); } - logger.User("Populating complete in " + DateTime.Now.Subtract(start).ToString(@"hh\:mm\:ss\.fffff")); + _logger.User("Populating complete in " + DateTime.Now.Subtract(start).ToString(@"hh\:mm\:ss\.fffff")); // Get all individual files from the inputs start = DateTime.Now; - logger.User("Organizing input files..."); + _logger.User("Organizing input files..."); List newinputs = new List(); foreach (string input in inputs) { @@ -60,10 +59,10 @@ namespace SabreTools } } } - logger.User("Organizing complete in " + DateTime.Now.Subtract(start).ToString(@"hh\:mm\:ss\.fffff")); + _logger.User("Organizing complete in " + DateTime.Now.Subtract(start).ToString(@"hh\:mm\:ss\.fffff")); SimpleSort ss = new SimpleSort(datdata, newinputs, outDir, tempDir, false, false, - false, false, delete, tgz, romba, asl, false, null, logger); + false, false, delete, tgz, romba, asl, false, null, _logger); return ss.Convert(); } @@ -310,26 +309,25 @@ namespace SabreTools /// Integer representing the archive handling level for Zip /// True if the updated DAT should be output, false otherwise /// Populated string representing the name of the skipper to use, a blank string to use the first available checker, null otherwise - /// Logger object for file and console output private static void InitSortVerify(List datfiles, List inputs, string outDir, string tempDir, bool quickScan, bool date, - bool toFolder, bool verify, bool delete, bool tgz, bool romba, int sevenzip, int gz, int rar, int zip, bool updateDat, string headerToCheckAgainst, Logger logger) + bool toFolder, bool verify, bool delete, bool tgz, bool romba, int sevenzip, int gz, int rar, int zip, bool updateDat, string headerToCheckAgainst) { // Get the archive scanning level ArchiveScanLevel asl = ArchiveTools.GetArchiveScanLevelFromNumbers(sevenzip, gz, rar, zip); DateTime start = DateTime.Now; - logger.User("Populating internal DAT..."); + _logger.User("Populating internal DAT..."); // Add all of the input DATs into one huge internal DAT DatFile datdata = new DatFile(); foreach (string datfile in datfiles) { - datdata.Parse(datfile, 99, 99, logger, keep: true, softlist: true); + datdata.Parse(datfile, 99, 99, _logger, keep: true, softlist: true); } - logger.User("Populating complete in " + DateTime.Now.Subtract(start).ToString(@"hh\:mm\:ss\.fffff")); + _logger.User("Populating complete in " + DateTime.Now.Subtract(start).ToString(@"hh\:mm\:ss\.fffff")); SimpleSort ss = new SimpleSort(datdata, inputs, outDir, tempDir, quickScan, date, - toFolder, verify, delete, tgz, romba, asl, updateDat, headerToCheckAgainst, logger); + toFolder, verify, delete, tgz, romba, asl, updateDat, headerToCheckAgainst, _logger); ss.StartProcessing(); } diff --git a/SabreTools/SabreTools.cs b/SabreTools/SabreTools.cs index 3bebd111..efaa6251 100644 --- a/SabreTools/SabreTools.cs +++ b/SabreTools/SabreTools.cs @@ -48,13 +48,16 @@ namespace SabreTools // Feature flags bool help = false, + convert = false, // SimpleSort datFromDir = false, headerer = false, + sort = false, // SimpleSort splitByExt = false, splitByHash = false, splitByType = false, stats = false, - update = false; + update = false, + verify = false; // SimpleSort // User flags bool addBlankFilesForEmptyFolder = false, @@ -63,6 +66,7 @@ namespace SabreTools copyFiles = false, datPrefix = false, dedup = false, + delete = false, // SimpleSort enableGzip = false, excludeOf = false, inplace = false, @@ -70,6 +74,7 @@ namespace SabreTools noMD5 = false, noSHA1 = false, parseArchivesAsFiles = false, + quickScan = false, // SimpleSort quotes = false, remext = false, removeDateFromAutomaticName = false, @@ -80,15 +85,22 @@ namespace SabreTools single = false, softlist = false, superdat = false, + tgz = false, // SimpleSort + toFolder = false, // SimpleSort trim = false, skip = false, + updateDat = false, // SimpleSort usegame = true; DiffMode diffMode = 0x0; OutputFormat outputFormat = 0x0; StatOutputFormat statOutputFormat = StatOutputFormat.None; // User inputs - int maxParallelism = 4; + int gz = 2, // SimpleSort + maxParallelism = 4, + rar = 2, // SimpleSort + sevenzip = 0, // SimpleSort + zip = 0; // SimpleSort long sgt = -1, slt = -1, seq = -1; @@ -124,6 +136,7 @@ namespace SabreTools tempDir = "", url = null, version = null; + List datfiles = new List(); // SimpleSort List inputs = new List(); // Determine which switches are enabled (with values if necessary) @@ -137,6 +150,10 @@ namespace SabreTools case "--help": help = true; break; + case "-cv": + case "--convert": + convert = true; + break; case "-d": case "--d2d": case "--dfd": @@ -154,6 +171,10 @@ namespace SabreTools case "--hash-split": splitByHash = true; break; + case "-ss": + case "--sort": + sort = true; + break; case "-st": case "--stats": stats = true; @@ -162,6 +183,10 @@ namespace SabreTools case "--type-split": splitByType = true; break; + case "-ve": + case "--verify": + verify = true; + break; // User flags case "-ab": @@ -200,6 +225,10 @@ namespace SabreTools case "--dedup": dedup = true; break; + case "-del": + case "--delete": + delete = true; + break; case "-di": case "--diff": diffMode |= DiffMode.All; @@ -216,6 +245,10 @@ namespace SabreTools case "--diff-nd": diffMode |= DiffMode.NoDupes; break; + case "-do": + case "--directory": + toFolder = true; + break; case "-f": case "--files": parseArchivesAsFiles = true; @@ -224,7 +257,7 @@ namespace SabreTools case "--game-prefix": datPrefix = true; break; - case "-gz": + case "-gzf": case "--gz-files": enableGzip = true; break; @@ -312,6 +345,10 @@ namespace SabreTools case "--quotes": quotes = true; break; + case "-qs": + case "--quick": + quickScan = true; + break; case "-r": case "--roms": usegame = false; @@ -348,6 +385,10 @@ namespace SabreTools case "--softlist": softlist = true; break; + case "-tgz": + case "--tgz": + tgz = true; + break; case "-trim": case "--trim": trim = true; @@ -360,12 +401,24 @@ namespace SabreTools case "--update": update = true; break; + case "-upd": + case "--updated-dat": + updateDat = true; + break; case "-xof": case "--exclude-of": excludeOf = true; break; // User inputs + case "-7z": + case "--7z": + i++; + if (!Int32.TryParse(args[i], out sevenzip)) + { + sevenzip = 0; + } + break; case "-ae": case "--add-ext": i++; @@ -396,6 +449,19 @@ namespace SabreTools i++; date = args[i]; break; + case "-dat": + case "--dat": + i++; + if (!File.Exists(args[i])) + { + _logger.Error("DAT must be a valid file: " + args[i]); + Console.WriteLine(); + Build.Help(); + _logger.Close(); + return; + } + datfiles.Add(args[i]); + break; case "-de": case "--desc": i++; @@ -441,6 +507,14 @@ namespace SabreTools i++; gamename = args[i]; break; + case "-gz": + case "--gz": + i++; + if (!Int32.TryParse(args[i], out gz)) + { + gz = 2; + } + break; case "-he": case "--header": i++; @@ -504,6 +578,14 @@ namespace SabreTools i++; prefix = args[i]; break; + case "-rar": + case "--rar": + i++; + if (!Int32.TryParse(args[i], out rar)) + { + rar = 2; + } + break; case "-rd": case "--root-dir": i++; @@ -565,6 +647,14 @@ namespace SabreTools i++; version = args[i]; break; + case "-zip": + case "--zip": + i++; + if (!Int32.TryParse(args[i], out zip)) + { + zip = 0; + } + break; default: string temparg = args[i].Replace("\"", "").Replace("file://", ""); @@ -579,6 +669,13 @@ namespace SabreTools switch (split[0]) { + case "-7z": + case "--7z": + if (!Int32.TryParse(split[1], out sevenzip)) + { + sevenzip = 0; + } + break; case "-ae": case "--add-ext": addext = split[1]; @@ -603,6 +700,18 @@ namespace SabreTools case "--date": date = split[1]; break; + case "-dat": + case "--dat": + if (!File.Exists(split[1])) + { + _logger.Error("DAT must be a valid file: " + split[1]); + Console.WriteLine(); + Build.Help(); + _logger.Close(); + return; + } + datfiles.Add(split[1]); + break; case "-de": case "--desc": description = split[1]; @@ -639,6 +748,13 @@ namespace SabreTools case "--game-name": gamename = split[1]; break; + case "-gz": + case "--gz": + if (!Int32.TryParse(split[1], out gz)) + { + gz = 2; + } + break; case "-h": case "--header": header = split[1]; @@ -696,6 +812,13 @@ namespace SabreTools case "--root": rootdir = split[1]; break; + case "-rar": + case "--rar": + if (!Int32.TryParse(split[1], out rar)) + { + rar = 2; + } + break; case "-rd": case "--root-dir": root = split[1]; @@ -741,6 +864,13 @@ namespace SabreTools case "--version": version = split[1]; break; + case "-zip": + case "--zip": + if (!Int32.TryParse(split[1], out zip)) + { + zip = 0; + } + break; default: if (File.Exists(temparg) || Directory.Exists(temparg)) { @@ -806,8 +936,15 @@ namespace SabreTools // Now take care of each mode in succesion + // Convert a folder to TGZ or TorrentZip + if (convert) + { + InitConvertFolder(datfiles, inputs, outDir, tempDir, delete, tgz, romba, sevenzip, + gz, rar, zip); + } + // Create a DAT from a directory or set of directories - if (datFromDir) + else if (datFromDir) { InitDatFromDir(inputs, filename, @@ -841,6 +978,13 @@ namespace SabreTools InitHeaderer(inputs, restore, outDir); } + // If we're using the sorter + else if (sort) + { + InitSortVerify(datfiles, inputs, outDir, tempDir, quickScan, addFileDates, toFolder, + verify, delete, tgz, romba, sevenzip, gz, rar, zip, updateDat, header); + } + // Split a DAT by extension else if (splitByExt) { @@ -853,18 +997,18 @@ namespace SabreTools InitHashSplit(inputs, outDir); } - // Get statistics on input files - else if (stats) - { - InitStats(inputs, filename, single, showBaddumpColumn, showNodumpColumn, statOutputFormat); - } - // Split a DAT by item type else if (splitByType) { InitTypeSplit(inputs, outDir); } + // Get statistics on input files + else if (stats) + { + InitStats(inputs, filename, single, showBaddumpColumn, showNodumpColumn, statOutputFormat); + } + // Convert, update, merge, diff, and filter a DAT or folder of DATs else if (update) { @@ -874,6 +1018,13 @@ namespace SabreTools romtype, sgt, slt, seq, crc, md5, sha1, status, trim, single, root, outDir, cleanGameNames, softlist, dedup, maxParallelism); } + // If we're using the verifier + else if (verify) + { + InitSortVerify(datfiles, inputs, outDir, tempDir, quickScan, addFileDates, toFolder, + verify, delete, tgz, romba, sevenzip, gz, rar, zip, updateDat, header); + } + // If nothing is set, show the help else { diff --git a/SimpleSort/SimpleSortApp.cs b/SimpleSort/SimpleSortApp.cs index dcc8d21f..0e9dd3ff 100644 --- a/SimpleSort/SimpleSortApp.cs +++ b/SimpleSort/SimpleSortApp.cs @@ -42,18 +42,18 @@ namespace SabreTools // Feature flags bool help = false, - simpleSort = true; + convert = false, + sort = true, + verify = false; // User flags - bool convert = false, - date = false, + bool date = false, delete = false, quickScan = false, romba = false, toFolder = false, tgz = false, - updateDat = false, - verify = false; + updateDat = false; // User inputs int sevenzip = 0, @@ -63,8 +63,8 @@ namespace SabreTools string header = "", outDir = "", tempDir = ""; - List inputs = new List(); List datfiles = new List(); + List inputs = new List(); // Determine which switches are enabled (with values if necessary) for (int i = 0; i < args.Length; i++) @@ -77,9 +77,17 @@ namespace SabreTools case "--help": help = true; break; + case "-c": + case "--convert": + convert = true; + break; case "-ss": case "--sort": - simpleSort = true; + sort = true; + break; + case "-v": + case "--verify": + verify = true; break; // User flags @@ -87,10 +95,6 @@ namespace SabreTools case "--add-date": date = true; break; - case "-c": - case "--convert": - convert = true; - break; case "-d": case "--delete": delete = true; @@ -115,10 +119,6 @@ namespace SabreTools case "--updated-dat": updateDat = true; break; - case "-v": - case "--verify": - verify = true; - break; // User inputs case "-7z": @@ -292,7 +292,7 @@ namespace SabreTools } // If a switch that requires a filename is set and no file is, show the help screen - if (inputs.Count == 0 && ((simpleSort && !verify) || convert)) + if (inputs.Count == 0 && ((sort && !verify) || convert)) { logger.Error("This feature requires at least one input"); Build.Help(); @@ -308,7 +308,7 @@ namespace SabreTools } // If we are doing a simple sort - else if (simpleSort) + else if (sort) { if (datfiles.Count > 0) {