[SabreTools] Add undocumented links to SimpleSort

This commit is contained in:
Matt Nadareski
2016-10-20 16:33:06 -07:00
parent 29e3a88682
commit 64c95b05c9
5 changed files with 192 additions and 43 deletions

View File

@@ -128,7 +128,7 @@ namespace SabreTools.Helper
helptext.Add(" -osl, --output-sl Output in Softwarelist format"); helptext.Add(" -osl, --output-sl Output in Softwarelist format");
helptext.Add(" -otsv, --output-tsv Output in TSV format"); helptext.Add(" -otsv, --output-tsv Output in TSV format");
helptext.Add(" -ox, --output-xml Output in Logiqx XML 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(" -ro, --romba Read files from a Romba input");
helptext.Add(" -f=, --filename= Set the external name of the DAT"); helptext.Add(" -f=, --filename= Set the external name of the DAT");
helptext.Add(" -n=, --name= Set the internal name of the DAT"); helptext.Add(" -n=, --name= Set the internal name of the DAT");

View File

@@ -1006,7 +1006,7 @@ Below are originally from SabreTools / DATabase -
-ox, -output-xml Output in Logiqx XML format (default) -ox, -output-xml Output in Logiqx XML format (default)
Add outputting the created DAT to Logiqx XML format 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 Since GZip files are not commonly used for file storage, this flag allows for
any GZip archives to have their contents hashed instead. any GZip archives to have their contents hashed instead.

View File

@@ -24,27 +24,26 @@ namespace SabreTools
/// <param name="gz">Integer representing the archive handling level for GZip</param> /// <param name="gz">Integer representing the archive handling level for GZip</param>
/// <param name="rar">Integer representing the archive handling level for RAR</param> /// <param name="rar">Integer representing the archive handling level for RAR</param>
/// <param name="zip">Integer representing the archive handling level for Zip</param> /// <param name="zip">Integer representing the archive handling level for Zip</param>
/// <param name="logger">Logger object for file and console output</param>
public static bool InitConvertFolder(List<string> datfiles, List<string> inputs, string outDir, string tempDir, bool delete, public static bool InitConvertFolder(List<string> datfiles, List<string> 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 // Get the archive scanning level
ArchiveScanLevel asl = ArchiveTools.GetArchiveScanLevelFromNumbers(sevenzip, gz, rar, zip); ArchiveScanLevel asl = ArchiveTools.GetArchiveScanLevelFromNumbers(sevenzip, gz, rar, zip);
DateTime start = DateTime.Now; 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 // Add all of the input DATs into one huge internal DAT
DatFile datdata = new DatFile(); DatFile datdata = new DatFile();
foreach (string datfile in datfiles) 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 // Get all individual files from the inputs
start = DateTime.Now; start = DateTime.Now;
logger.User("Organizing input files..."); _logger.User("Organizing input files...");
List<string> newinputs = new List<string>(); List<string> newinputs = new List<string>();
foreach (string input in inputs) 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, 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(); return ss.Convert();
} }
@@ -310,26 +309,25 @@ namespace SabreTools
/// <param name="zip">Integer representing the archive handling level for Zip</param> /// <param name="zip">Integer representing the archive handling level for Zip</param>
/// <param name="updateDat">True if the updated DAT should be output, false otherwise</param> /// <param name="updateDat">True if the updated DAT should be output, false otherwise</param>
/// <param name="headerToCheckAgainst">Populated string representing the name of the skipper to use, a blank string to use the first available checker, null otherwise</param> /// <param name="headerToCheckAgainst">Populated string representing the name of the skipper to use, a blank string to use the first available checker, null otherwise</param>
/// <param name="logger">Logger object for file and console output</param>
private static void InitSortVerify(List<string> datfiles, List<string> inputs, string outDir, string tempDir, bool quickScan, bool date, private static void InitSortVerify(List<string> datfiles, List<string> 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 // Get the archive scanning level
ArchiveScanLevel asl = ArchiveTools.GetArchiveScanLevelFromNumbers(sevenzip, gz, rar, zip); ArchiveScanLevel asl = ArchiveTools.GetArchiveScanLevelFromNumbers(sevenzip, gz, rar, zip);
DateTime start = DateTime.Now; 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 // Add all of the input DATs into one huge internal DAT
DatFile datdata = new DatFile(); DatFile datdata = new DatFile();
foreach (string datfile in datfiles) 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, 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(); ss.StartProcessing();
} }

View File

@@ -48,13 +48,16 @@ namespace SabreTools
// Feature flags // Feature flags
bool help = false, bool help = false,
convert = false, // SimpleSort
datFromDir = false, datFromDir = false,
headerer = false, headerer = false,
sort = false, // SimpleSort
splitByExt = false, splitByExt = false,
splitByHash = false, splitByHash = false,
splitByType = false, splitByType = false,
stats = false, stats = false,
update = false; update = false,
verify = false; // SimpleSort
// User flags // User flags
bool addBlankFilesForEmptyFolder = false, bool addBlankFilesForEmptyFolder = false,
@@ -63,6 +66,7 @@ namespace SabreTools
copyFiles = false, copyFiles = false,
datPrefix = false, datPrefix = false,
dedup = false, dedup = false,
delete = false, // SimpleSort
enableGzip = false, enableGzip = false,
excludeOf = false, excludeOf = false,
inplace = false, inplace = false,
@@ -70,6 +74,7 @@ namespace SabreTools
noMD5 = false, noMD5 = false,
noSHA1 = false, noSHA1 = false,
parseArchivesAsFiles = false, parseArchivesAsFiles = false,
quickScan = false, // SimpleSort
quotes = false, quotes = false,
remext = false, remext = false,
removeDateFromAutomaticName = false, removeDateFromAutomaticName = false,
@@ -80,15 +85,22 @@ namespace SabreTools
single = false, single = false,
softlist = false, softlist = false,
superdat = false, superdat = false,
tgz = false, // SimpleSort
toFolder = false, // SimpleSort
trim = false, trim = false,
skip = false, skip = false,
updateDat = false, // SimpleSort
usegame = true; usegame = true;
DiffMode diffMode = 0x0; DiffMode diffMode = 0x0;
OutputFormat outputFormat = 0x0; OutputFormat outputFormat = 0x0;
StatOutputFormat statOutputFormat = StatOutputFormat.None; StatOutputFormat statOutputFormat = StatOutputFormat.None;
// User inputs // User inputs
int maxParallelism = 4; int gz = 2, // SimpleSort
maxParallelism = 4,
rar = 2, // SimpleSort
sevenzip = 0, // SimpleSort
zip = 0; // SimpleSort
long sgt = -1, long sgt = -1,
slt = -1, slt = -1,
seq = -1; seq = -1;
@@ -124,6 +136,7 @@ namespace SabreTools
tempDir = "", tempDir = "",
url = null, url = null,
version = null; version = null;
List<string> datfiles = new List<string>(); // SimpleSort
List<string> inputs = new List<string>(); List<string> inputs = new List<string>();
// Determine which switches are enabled (with values if necessary) // Determine which switches are enabled (with values if necessary)
@@ -137,6 +150,10 @@ namespace SabreTools
case "--help": case "--help":
help = true; help = true;
break; break;
case "-cv":
case "--convert":
convert = true;
break;
case "-d": case "-d":
case "--d2d": case "--d2d":
case "--dfd": case "--dfd":
@@ -154,6 +171,10 @@ namespace SabreTools
case "--hash-split": case "--hash-split":
splitByHash = true; splitByHash = true;
break; break;
case "-ss":
case "--sort":
sort = true;
break;
case "-st": case "-st":
case "--stats": case "--stats":
stats = true; stats = true;
@@ -162,6 +183,10 @@ namespace SabreTools
case "--type-split": case "--type-split":
splitByType = true; splitByType = true;
break; break;
case "-ve":
case "--verify":
verify = true;
break;
// User flags // User flags
case "-ab": case "-ab":
@@ -200,6 +225,10 @@ namespace SabreTools
case "--dedup": case "--dedup":
dedup = true; dedup = true;
break; break;
case "-del":
case "--delete":
delete = true;
break;
case "-di": case "-di":
case "--diff": case "--diff":
diffMode |= DiffMode.All; diffMode |= DiffMode.All;
@@ -216,6 +245,10 @@ namespace SabreTools
case "--diff-nd": case "--diff-nd":
diffMode |= DiffMode.NoDupes; diffMode |= DiffMode.NoDupes;
break; break;
case "-do":
case "--directory":
toFolder = true;
break;
case "-f": case "-f":
case "--files": case "--files":
parseArchivesAsFiles = true; parseArchivesAsFiles = true;
@@ -224,7 +257,7 @@ namespace SabreTools
case "--game-prefix": case "--game-prefix":
datPrefix = true; datPrefix = true;
break; break;
case "-gz": case "-gzf":
case "--gz-files": case "--gz-files":
enableGzip = true; enableGzip = true;
break; break;
@@ -312,6 +345,10 @@ namespace SabreTools
case "--quotes": case "--quotes":
quotes = true; quotes = true;
break; break;
case "-qs":
case "--quick":
quickScan = true;
break;
case "-r": case "-r":
case "--roms": case "--roms":
usegame = false; usegame = false;
@@ -348,6 +385,10 @@ namespace SabreTools
case "--softlist": case "--softlist":
softlist = true; softlist = true;
break; break;
case "-tgz":
case "--tgz":
tgz = true;
break;
case "-trim": case "-trim":
case "--trim": case "--trim":
trim = true; trim = true;
@@ -360,12 +401,24 @@ namespace SabreTools
case "--update": case "--update":
update = true; update = true;
break; break;
case "-upd":
case "--updated-dat":
updateDat = true;
break;
case "-xof": case "-xof":
case "--exclude-of": case "--exclude-of":
excludeOf = true; excludeOf = true;
break; break;
// User inputs // User inputs
case "-7z":
case "--7z":
i++;
if (!Int32.TryParse(args[i], out sevenzip))
{
sevenzip = 0;
}
break;
case "-ae": case "-ae":
case "--add-ext": case "--add-ext":
i++; i++;
@@ -396,6 +449,19 @@ namespace SabreTools
i++; i++;
date = args[i]; date = args[i];
break; 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 "-de":
case "--desc": case "--desc":
i++; i++;
@@ -441,6 +507,14 @@ namespace SabreTools
i++; i++;
gamename = args[i]; gamename = args[i];
break; break;
case "-gz":
case "--gz":
i++;
if (!Int32.TryParse(args[i], out gz))
{
gz = 2;
}
break;
case "-he": case "-he":
case "--header": case "--header":
i++; i++;
@@ -504,6 +578,14 @@ namespace SabreTools
i++; i++;
prefix = args[i]; prefix = args[i];
break; break;
case "-rar":
case "--rar":
i++;
if (!Int32.TryParse(args[i], out rar))
{
rar = 2;
}
break;
case "-rd": case "-rd":
case "--root-dir": case "--root-dir":
i++; i++;
@@ -565,6 +647,14 @@ namespace SabreTools
i++; i++;
version = args[i]; version = args[i];
break; break;
case "-zip":
case "--zip":
i++;
if (!Int32.TryParse(args[i], out zip))
{
zip = 0;
}
break;
default: default:
string temparg = args[i].Replace("\"", "").Replace("file://", ""); string temparg = args[i].Replace("\"", "").Replace("file://", "");
@@ -579,6 +669,13 @@ namespace SabreTools
switch (split[0]) switch (split[0])
{ {
case "-7z":
case "--7z":
if (!Int32.TryParse(split[1], out sevenzip))
{
sevenzip = 0;
}
break;
case "-ae": case "-ae":
case "--add-ext": case "--add-ext":
addext = split[1]; addext = split[1];
@@ -603,6 +700,18 @@ namespace SabreTools
case "--date": case "--date":
date = split[1]; date = split[1];
break; 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 "-de":
case "--desc": case "--desc":
description = split[1]; description = split[1];
@@ -639,6 +748,13 @@ namespace SabreTools
case "--game-name": case "--game-name":
gamename = split[1]; gamename = split[1];
break; break;
case "-gz":
case "--gz":
if (!Int32.TryParse(split[1], out gz))
{
gz = 2;
}
break;
case "-h": case "-h":
case "--header": case "--header":
header = split[1]; header = split[1];
@@ -696,6 +812,13 @@ namespace SabreTools
case "--root": case "--root":
rootdir = split[1]; rootdir = split[1];
break; break;
case "-rar":
case "--rar":
if (!Int32.TryParse(split[1], out rar))
{
rar = 2;
}
break;
case "-rd": case "-rd":
case "--root-dir": case "--root-dir":
root = split[1]; root = split[1];
@@ -741,6 +864,13 @@ namespace SabreTools
case "--version": case "--version":
version = split[1]; version = split[1];
break; break;
case "-zip":
case "--zip":
if (!Int32.TryParse(split[1], out zip))
{
zip = 0;
}
break;
default: default:
if (File.Exists(temparg) || Directory.Exists(temparg)) if (File.Exists(temparg) || Directory.Exists(temparg))
{ {
@@ -806,8 +936,15 @@ namespace SabreTools
// Now take care of each mode in succesion // 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 // Create a DAT from a directory or set of directories
if (datFromDir) else if (datFromDir)
{ {
InitDatFromDir(inputs, InitDatFromDir(inputs,
filename, filename,
@@ -841,6 +978,13 @@ namespace SabreTools
InitHeaderer(inputs, restore, outDir); 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 // Split a DAT by extension
else if (splitByExt) else if (splitByExt)
{ {
@@ -853,18 +997,18 @@ namespace SabreTools
InitHashSplit(inputs, outDir); InitHashSplit(inputs, outDir);
} }
// Get statistics on input files
else if (stats)
{
InitStats(inputs, filename, single, showBaddumpColumn, showNodumpColumn, statOutputFormat);
}
// Split a DAT by item type // Split a DAT by item type
else if (splitByType) else if (splitByType)
{ {
InitTypeSplit(inputs, outDir); 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 // Convert, update, merge, diff, and filter a DAT or folder of DATs
else if (update) 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); 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 // If nothing is set, show the help
else else
{ {

View File

@@ -42,18 +42,18 @@ namespace SabreTools
// Feature flags // Feature flags
bool help = false, bool help = false,
simpleSort = true; convert = false,
sort = true,
verify = false;
// User flags // User flags
bool convert = false, bool date = false,
date = false,
delete = false, delete = false,
quickScan = false, quickScan = false,
romba = false, romba = false,
toFolder = false, toFolder = false,
tgz = false, tgz = false,
updateDat = false, updateDat = false;
verify = false;
// User inputs // User inputs
int sevenzip = 0, int sevenzip = 0,
@@ -63,8 +63,8 @@ namespace SabreTools
string header = "", string header = "",
outDir = "", outDir = "",
tempDir = ""; tempDir = "";
List<string> inputs = new List<string>();
List<string> datfiles = new List<string>(); List<string> datfiles = new List<string>();
List<string> inputs = new List<string>();
// Determine which switches are enabled (with values if necessary) // Determine which switches are enabled (with values if necessary)
for (int i = 0; i < args.Length; i++) for (int i = 0; i < args.Length; i++)
@@ -77,9 +77,17 @@ namespace SabreTools
case "--help": case "--help":
help = true; help = true;
break; break;
case "-c":
case "--convert":
convert = true;
break;
case "-ss": case "-ss":
case "--sort": case "--sort":
simpleSort = true; sort = true;
break;
case "-v":
case "--verify":
verify = true;
break; break;
// User flags // User flags
@@ -87,10 +95,6 @@ namespace SabreTools
case "--add-date": case "--add-date":
date = true; date = true;
break; break;
case "-c":
case "--convert":
convert = true;
break;
case "-d": case "-d":
case "--delete": case "--delete":
delete = true; delete = true;
@@ -115,10 +119,6 @@ namespace SabreTools
case "--updated-dat": case "--updated-dat":
updateDat = true; updateDat = true;
break; break;
case "-v":
case "--verify":
verify = true;
break;
// User inputs // User inputs
case "-7z": 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 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"); logger.Error("This feature requires at least one input");
Build.Help(); Build.Help();
@@ -308,7 +308,7 @@ namespace SabreTools
} }
// If we are doing a simple sort // If we are doing a simple sort
else if (simpleSort) else if (sort)
{ {
if (datfiles.Count > 0) if (datfiles.Count > 0)
{ {