diff --git a/SabreTools.Helper/Data/Build.cs b/SabreTools.Helper/Data/Build.cs index fca9b5f9..bd9e0e00 100644 --- a/SabreTools.Helper/Data/Build.cs +++ b/SabreTools.Helper/Data/Build.cs @@ -276,6 +276,7 @@ namespace SabreTools.Helper helptext.Add(" -gz={2} Set scanning level for GZip archives"); helptext.Add(" -rar={2} Set scanning level for RAR archives"); helptext.Add(" -zip={1} Set scanning level for ZIP archives"); + helptext.Add(" -ud, --update-dat Output updated DAT"); helptext.Add(""); helptext.Add("Archive scanning levels:"); helptext.Add(" 0 Hash archive and contents"); diff --git a/SimpleSort/SimpleSort.cs b/SimpleSort/SimpleSort.cs index 6194c268..b17c8492 100644 --- a/SimpleSort/SimpleSort.cs +++ b/SimpleSort/SimpleSort.cs @@ -18,6 +18,7 @@ namespace SabreTools private bool _verify; private bool _tgz; private bool _romba; + private bool _updateDat; private ArchiveScanLevel _7z; private ArchiveScanLevel _gz; private ArchiveScanLevel _rar; @@ -45,10 +46,11 @@ 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 + /// True if the updated DAT should be output, false otherwise /// Logger object for file and console output public SimpleSort(Dat datdata, List inputs, string outdir, string tempdir, bool quickScan, bool toFolder, bool verify, bool tgz, bool romba, int sevenzip, - int gz, int rar, int zip, Logger logger) + int gz, int rar, int zip, bool updateDat, Logger logger) { _datdata = datdata; _inputs = inputs; @@ -63,6 +65,7 @@ namespace SabreTools _gz = (ArchiveScanLevel)(gz < 0 || gz > 2 ? 0 : gz); _rar = (ArchiveScanLevel)(rar < 0 || rar > 2 ? 0 : rar); _zip = (ArchiveScanLevel)(zip < 0 || zip > 2 ? 0 : zip); + _updateDat = updateDat; _logger = logger; _cursorTop = Console.CursorTop; @@ -114,6 +117,7 @@ namespace SabreTools simpleSort = true, tgz = false, toFolder = false, + updateDat = false, verify = false; int sevenzip = 0, gz = 2, @@ -150,6 +154,10 @@ namespace SabreTools case "--tgz": tgz = true; break; + case "-ud": + case "--updated-dat": + updateDat = true; + break; case "-v": case "--verify": verify = true; @@ -246,7 +254,7 @@ namespace SabreTools { if (datfiles.Count > 0) { - InitSimpleSort(datfiles, inputs, outdir, tempdir, quickScan, toFolder, verify, tgz, romba, sevenzip, gz, rar, zip, logger); + InitSimpleSort(datfiles, inputs, outdir, tempdir, quickScan, toFolder, verify, tgz, romba, sevenzip, gz, rar, zip, updateDat, logger); } else { @@ -283,9 +291,10 @@ 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 + /// True if the updated DAT should be output, false otherwise /// Logger object for file and console output - private static void InitSimpleSort(List datfiles, List inputs, string outdir, string tempdir, - bool quickScan, bool toFolder, bool verify, bool tgz, bool romba, int sevenzip, int gz, int rar, int zip, Logger logger) + private static void InitSimpleSort(List datfiles, List inputs, string outdir, string tempdir, bool quickScan, + bool toFolder, bool verify, bool tgz, bool romba, int sevenzip, int gz, int rar, int zip, bool updateDat, Logger logger) { // Add all of the input DATs into one huge internal DAT Dat datdata = new Dat(); @@ -294,7 +303,7 @@ namespace SabreTools datdata = DatTools.Parse(datfile, 99, 99, datdata, logger); } - SimpleSort ss = new SimpleSort(datdata, inputs, outdir, tempdir, quickScan, toFolder, verify, tgz, romba, sevenzip, gz, rar, zip, logger); + SimpleSort ss = new SimpleSort(datdata, inputs, outdir, tempdir, quickScan, toFolder, verify, tgz, romba, sevenzip, gz, rar, zip, updateDat, logger); ss.StartProcessing(); } @@ -462,7 +471,14 @@ namespace SabreTools _logger.User("Stats of the matched ROMs:"); Stats.OutputStats(_matched, _logger, true); - // Diff the matched with the input DAT(s) and output if flag is set + // Now output the fixdat based on the original input if asked + if (_updateDat) + { + _datdata.FileName = "fixDat_" + _datdata.FileName; + _datdata.Name = "fixDat_" + _datdata.Name; + _datdata.Description = "fixDat_" + _datdata.Description; + Output.WriteDatfile(_datdata, "", _logger); + } return success; }