diff --git a/RombaSharp/Partials/RombaSharp_Inits.cs b/RombaSharp/Partials/RombaSharp_Inits.cs index fc86d07f..8a4ade34 100644 --- a/RombaSharp/Partials/RombaSharp_Inits.cs +++ b/RombaSharp/Partials/RombaSharp_Inits.cs @@ -178,7 +178,7 @@ namespace SabreTools // Create the sorting object to use and rebuild the needed files ArchiveScanLevel asl = ArchiveTools.GetArchiveScanLevelFromNumbers(0, 0, 0, 0); - SimpleSort ss = new SimpleSort(need, onlyDirs, _depots.Keys.ToList()[0], _tmpdir, false, false, false, false, false, true, true, asl, false, _logger); + SimpleSort ss = new SimpleSort(need, onlyDirs, _depots.Keys.ToList()[0], _tmpdir, false, false, false, false, false, true, true, asl, false, null, _logger); ss.StartProcessing(); } @@ -217,7 +217,7 @@ namespace SabreTools List onlineDepots = _depots.Where(d => d.Value.Item2).Select(d => d.Key).ToList(); // Now scan all of those depots and rebuild - SimpleSort ss = new SimpleSort(datFile, onlineDepots, outputFolder, _tmpdir, false, false, false, false, false, copy, copy, asl, false, _logger); + SimpleSort ss = new SimpleSort(datFile, onlineDepots, outputFolder, _tmpdir, false, false, false, false, false, copy, copy, asl, false, null, _logger); ss.StartProcessing(); } } diff --git a/SabreTools.Helper/Data/Build.cs b/SabreTools.Helper/Data/Build.cs index 7526d36b..671c0e5d 100644 --- a/SabreTools.Helper/Data/Build.cs +++ b/SabreTools.Helper/Data/Build.cs @@ -293,6 +293,7 @@ namespace SabreTools.Helper helptext.Add(" -tgz Enable TorrentGZ output"); helptext.Add(" -r, --romba Enable Romba depot dir output"); helptext.Add(" -do, --directory Output files as uncompressed"); + helptext.Add(" -h=, --header= Set a header skipper to use, blank means all"); helptext.Add(" -7z={0} Set scanning level for 7z archives"); helptext.Add(" -gz={2} Set scanning level for GZip archives"); helptext.Add(" -rar={2} Set scanning level for RAR archives"); diff --git a/SabreTools.Helper/Objects/SimpleSort.cs b/SabreTools.Helper/Objects/SimpleSort.cs index 59566e72..52147cdd 100644 --- a/SabreTools.Helper/Objects/SimpleSort.cs +++ b/SabreTools.Helper/Objects/SimpleSort.cs @@ -22,6 +22,7 @@ namespace SabreTools.Helper private bool _romba; private bool _updateDat; private ArchiveScanLevel _archiveScanLevel; + private string _headerToCheckAgainst; private Logger _logger; private int _maxDegreeOfParallelism = 4; // Hardcoded for now, should be an input later @@ -46,10 +47,11 @@ namespace SabreTools.Helper /// True if files should be output in Romba depot folders, false otherwise /// ArchiveScanLevel representing the archive handling levels /// 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 public SimpleSort(DatFile datdata, List inputs, string outDir, string tempDir, bool quickScan, bool date, bool toFolder, bool verify, bool delete, bool tgz, bool romba, - ArchiveScanLevel archiveScanLevel, bool updateDat, Logger logger) + ArchiveScanLevel archiveScanLevel, bool updateDat, string headerToCheckAgainst, Logger logger) { _datdata = datdata; _inputs = inputs; @@ -64,6 +66,7 @@ namespace SabreTools.Helper _romba = romba; _archiveScanLevel = archiveScanLevel; _updateDat = updateDat; + _headerToCheckAgainst = headerToCheckAgainst; _logger = logger; _cursorTop = Console.CursorTop; @@ -133,7 +136,7 @@ namespace SabreTools.Helper { _datdata.PopulateDatFromDir(input, false /* noMD5 */, false /* noSHA1 */, true /* bare */, false /* archivesAsFiles */, true /* enableGzip */, false /* addBlanks */, false /* addDate */, "" /* tempDir */, false /* copyFiles */, - null /* headerToCheckAgainst */, 4 /* maxDegreeOfParallelism */, _logger); + _headerToCheckAgainst, 4 /* maxDegreeOfParallelism */, _logger); } // Setup the fixdat @@ -369,7 +372,7 @@ namespace SabreTools.Helper } // Now get the transformed file if it exists - SkipperRule rule = Skipper.GetMatchingRule(input, "", _logger); + SkipperRule rule = Skipper.GetMatchingRule(input, _headerToCheckAgainst, _logger); // If we have have a non-empty rule, apply it if (rule.Tests != null && rule.Tests.Count != 0) @@ -824,7 +827,7 @@ namespace SabreTools.Helper // Now attempt to see if the file has a header FileStream input = File.OpenRead(file); - SkipperRule rule = Skipper.GetMatchingRule(input, "", _logger); + SkipperRule rule = Skipper.GetMatchingRule(input, _headerToCheckAgainst, _logger); // If there's a match, get the new information from the stream if (rule.Tests != null && rule.Tests.Count != 0) diff --git a/SabreTools/Partials/SabreTools_Inits.cs b/SabreTools/Partials/SabreTools_Inits.cs index f5b670d3..02a247ab 100644 --- a/SabreTools/Partials/SabreTools_Inits.cs +++ b/SabreTools/Partials/SabreTools_Inits.cs @@ -63,7 +63,7 @@ namespace SabreTools 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, logger); + false, false, delete, tgz, romba, asl, false, null, logger); return ss.Convert(); } @@ -304,9 +304,10 @@ namespace SabreTools /// Integer representing the archive handling level for RAR /// 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, Logger logger) + bool toFolder, bool verify, bool delete, bool tgz, bool romba, int sevenzip, int gz, int rar, int zip, bool updateDat, string headerToCheckAgainst, Logger logger) { // Get the archive scanning level ArchiveScanLevel asl = ArchiveTools.GetArchiveScanLevelFromNumbers(sevenzip, gz, rar, zip); @@ -323,7 +324,7 @@ namespace SabreTools 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, logger); + toFolder, verify, delete, tgz, romba, asl, updateDat, headerToCheckAgainst, logger); ss.StartProcessing(); } diff --git a/SimpleSort/SimpleSortApp.cs b/SimpleSort/SimpleSortApp.cs index 58e36382..ca04d0dc 100644 --- a/SimpleSort/SimpleSortApp.cs +++ b/SimpleSort/SimpleSortApp.cs @@ -56,7 +56,8 @@ namespace SabreTools gz = 2, rar = 2, zip = 0; - string outDir = "", + string header = "", + outDir = "", tempDir = ""; List inputs = new List(); List datfiles = new List(); @@ -116,6 +117,11 @@ namespace SabreTools gz = 2; } break; + case "-he": + case "--header": + i++; + header = args[i]; + break; case "-out": case "--out": i++; @@ -202,6 +208,10 @@ namespace SabreTools gz = 2; } break; + case "-h": + case "--header": + header = split[1]; + break; case "-out": case "--out": outDir = split[1]; @@ -290,7 +300,7 @@ namespace SabreTools if (datfiles.Count > 0) { InitSortVerify(datfiles, inputs, outDir, tempDir, quickScan, date, toFolder, - verify, delete, tgz, romba, sevenzip, gz, rar, zip, updateDat, logger); + verify, delete, tgz, romba, sevenzip, gz, rar, zip, updateDat, header, logger); } else { @@ -364,7 +374,7 @@ namespace SabreTools 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, logger); + false, false, delete, tgz, romba, asl, false, null, logger); return ss.Convert(); } @@ -387,9 +397,10 @@ namespace SabreTools /// Integer representing the archive handling level for RAR /// 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, Logger logger) + bool toFolder, bool verify, bool delete, bool tgz, bool romba, int sevenzip, int gz, int rar, int zip, bool updateDat, string headerToCheckAgainst, Logger logger) { // Get the archive scanning level ArchiveScanLevel asl = ArchiveTools.GetArchiveScanLevelFromNumbers(sevenzip, gz, rar, zip); @@ -406,7 +417,7 @@ namespace SabreTools 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, logger); + toFolder, verify, delete, tgz, romba, asl, updateDat, headerToCheckAgainst, logger); ss.StartProcessing(); } }