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)
{