From 35e8e8a61b6e9a2d5bbc7bb7b0fb0d140c516e2f Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Fri, 9 Sep 2016 15:37:15 -0700 Subject: [PATCH] [DatTools, Style] Make output names even better --- Deheader/Headerer.cs | 2 +- SabreTools.Helper/Tools/DatTools.cs | 41 +++++------------------------ SabreTools.Helper/Tools/Style.cs | 36 +++++++++++++++++-------- SimpleSort/SimpleSort.cs | 2 +- 4 files changed, 34 insertions(+), 47 deletions(-) diff --git a/Deheader/Headerer.cs b/Deheader/Headerer.cs index 18489be1..f87aae69 100644 --- a/Deheader/Headerer.cs +++ b/Deheader/Headerer.cs @@ -244,7 +244,7 @@ namespace SabreTools return false; } - // Otherwise, apply the rule ot the file + // Otherwise, apply the rule to the file string newfile = file + ".new"; Skippers.TransformFile(file, newfile, rule, _logger); diff --git a/SabreTools.Helper/Tools/DatTools.cs b/SabreTools.Helper/Tools/DatTools.cs index f31b0f66..7a321490 100644 --- a/SabreTools.Helper/Tools/DatTools.cs +++ b/SabreTools.Helper/Tools/DatTools.cs @@ -1778,17 +1778,10 @@ namespace SabreTools.Helper romtype, sgt, slt, seq, crc, md5, sha1, nodump, trim, single, root, logger, true, clean, softlist, keepext:(innerDatdata.XSV != null)); - // If the extension matches, append ".new" to the filename - string extension = ((innerDatdata.OutputFormatFlag & OutputFormatFlag.Xml) != 0 || (innerDatdata.OutputFormatFlag & OutputFormatFlag.SabreDat) != 0 ? ".xml" : ".dat"); - if (outputDirectory == "" && Path.GetExtension(inputFileName) == extension) - { - innerDatdata.FileName += ".new"; - } - // If we have roms, output them if (innerDatdata.Files.Count != 0) { - WriteDatfile(innerDatdata, (outputDirectory == "" ? Path.GetDirectoryName(inputFileName) : outputDirectory), logger); + WriteDatfile(innerDatdata, (outputDirectory == "" ? Path.GetDirectoryName(inputFileName) : outputDirectory), logger, overwrite: (outputDirectory == "")); } } else if (Directory.Exists(inputFileName)) @@ -1803,17 +1796,10 @@ namespace SabreTools.Helper innerDatdata = Parse(file, 0, 0, innerDatdata, gamename, romname, romtype, sgt, slt, seq, crc, md5, sha1, nodump, trim, single, root, logger, true, clean, keepext:(datdata.XSV != null)); - // If the extension matches, append ".new" to the filename - string extension = ((innerDatdata.OutputFormatFlag & OutputFormatFlag.Xml) != 0 || (innerDatdata.OutputFormatFlag & OutputFormatFlag.SabreDat) != 0 ? ".xml" : ".dat"); - if (outputDirectory == "" && Path.GetExtension(file) == extension) - { - innerDatdata.FileName += ".new"; - } - // If we have roms, output them if (innerDatdata.Files != null && innerDatdata.Files.Count != 0) { - WriteDatfile(innerDatdata, (outputDirectory == "" ? Path.GetDirectoryName(file) : outputDirectory + Path.GetDirectoryName(file).Remove(0, inputFileName.Length - 1)), logger); + WriteDatfile(innerDatdata, (outputDirectory == "" ? Path.GetDirectoryName(file) : outputDirectory + Path.GetDirectoryName(file).Remove(0, inputFileName.Length - 1)), logger, overwrite: (outputDirectory == "")); } } } @@ -2545,17 +2531,10 @@ namespace SabreTools.Helper romtype, sgt, slt, seq, crc, md5, sha1, nodump, trim, single, root, logger, true, clean, softlist, keepext: (innerDatdata.XSV != null)); - // If the extension matches, append ".new" to the filename - string extension = ((innerDatdata.OutputFormatFlag & OutputFormatFlag.Xml) != 0 || (innerDatdata.OutputFormatFlag & OutputFormatFlag.SabreDat) != 0 ? ".xml" : ".dat"); - if (outputDirectory == "" && Path.GetExtension(inputFileName) == extension) - { - innerDatdata.FileName += ".new"; - } - // If we have roms, output them if (innerDatdata.Files.Count != 0) { - WriteDatfile(innerDatdata, (outputDirectory == "" ? Path.GetDirectoryName(inputFileName) : outputDirectory), logger); + WriteDatfile(innerDatdata, (outputDirectory == "" ? Path.GetDirectoryName(inputFileName) : outputDirectory), logger, overwrite: (outputDirectory == "")); } } else if (Directory.Exists(inputFileName)) @@ -2572,17 +2551,10 @@ namespace SabreTools.Helper innerDatdata = Parse(file, 0, 0, innerDatdata, gamename, romname, romtype, sgt, slt, seq, crc, md5, sha1, nodump, trim, single, root, logger, true, clean, keepext: (datdata.XSV != null)); - // If the extension matches, append ".new" to the filename - string extension = ((innerDatdata.OutputFormatFlag & OutputFormatFlag.Xml) != 0 || (innerDatdata.OutputFormatFlag & OutputFormatFlag.SabreDat) != 0 ? ".xml" : ".dat"); - if (outputDirectory == "" && Path.GetExtension(file) == extension) - { - innerDatdata.FileName += ".new"; - } - // If we have roms, output them if (innerDatdata.Files != null && innerDatdata.Files.Count != 0) { - WriteDatfile(innerDatdata, (outputDirectory == "" ? Path.GetDirectoryName(file) : outputDirectory + Path.GetDirectoryName(file).Remove(0, inputFileName.Length - 1)), logger); + WriteDatfile(innerDatdata, (outputDirectory == "" ? Path.GetDirectoryName(file) : outputDirectory + Path.GetDirectoryName(file).Remove(0, inputFileName.Length - 1)), logger, overwrite: (outputDirectory == "")); } }); } @@ -2685,12 +2657,13 @@ namespace SabreTools.Helper /// True if games should only be compared on game and file name (default), false if system and source are counted /// True if DAT statistics should be output on write, false otherwise (default) /// True if blank roms should be skipped on output, false otherwise (default) + /// True if files should be overwritten (default), false if they should be renamed instead /// True if the DAT was written correctly, false otherwise /// /// The following features have been requested for file output: /// - Have the ability to strip special (non-ASCII) characters from rom information /// - public static bool WriteDatfile(Dat datdata, string outDir, Logger logger, bool norename = true, bool stats = false, bool ignoreblanks = false) + public static bool WriteDatfile(Dat datdata, string outDir, Logger logger, bool norename = true, bool stats = false, bool ignoreblanks = false, bool overwrite = true) { // If there's nothing there, abort if (datdata.Files == null || datdata.Files.Count == 0) @@ -2760,7 +2733,7 @@ namespace SabreTools.Helper SortedDictionary> sortable = BucketByGame(datdata.Files, datdata.MergeRoms, norename, logger); // Get the outfile name - Dictionary outfiles = Style.CreateOutfileNames(outDir, datdata); + Dictionary outfiles = Style.CreateOutfileNames(outDir, datdata, overwrite); try { diff --git a/SabreTools.Helper/Tools/Style.cs b/SabreTools.Helper/Tools/Style.cs index cc98e150..3ffbcdf9 100644 --- a/SabreTools.Helper/Tools/Style.cs +++ b/SabreTools.Helper/Tools/Style.cs @@ -152,8 +152,9 @@ namespace SabreTools.Helper /// /// Output directory /// DAT information + /// True if we ignore existing files (default), false otherwise /// Dictionary of output formats mapped to file names - public static Dictionary CreateOutfileNames(string outDir, Dat datdata) + public static Dictionary CreateOutfileNames(string outDir, Dat datdata, bool overwrite = true) { // Create the output dictionary Dictionary outfileNames = new Dictionary(); @@ -167,39 +168,39 @@ namespace SabreTools.Helper // Get the extensions from the output type if ((datdata.OutputFormatFlag & OutputFormatFlag.Xml) != 0) { - outfileNames.Add(OutputFormatFlag.Xml, CreateOutfileNamesHelper(outDir, ".xml", datdata)); + outfileNames.Add(OutputFormatFlag.Xml, CreateOutfileNamesHelper(outDir, ".xml", datdata, overwrite)); }; if ((datdata.OutputFormatFlag & OutputFormatFlag.ClrMamePro) != 0) { - outfileNames.Add(OutputFormatFlag.ClrMamePro, CreateOutfileNamesHelper(outDir, ".dat", datdata)); + outfileNames.Add(OutputFormatFlag.ClrMamePro, CreateOutfileNamesHelper(outDir, ".dat", datdata, overwrite)); }; if ((datdata.OutputFormatFlag & OutputFormatFlag.RomCenter) != 0) { - outfileNames.Add(OutputFormatFlag.RomCenter, CreateOutfileNamesHelper(outDir, ".rc.dat", datdata)); + outfileNames.Add(OutputFormatFlag.RomCenter, CreateOutfileNamesHelper(outDir, ".rc.dat", datdata, overwrite)); }; if ((datdata.OutputFormatFlag & OutputFormatFlag.DOSCenter) != 0) { - outfileNames.Add(OutputFormatFlag.DOSCenter, CreateOutfileNamesHelper(outDir, ".dc.dat", datdata)); + outfileNames.Add(OutputFormatFlag.DOSCenter, CreateOutfileNamesHelper(outDir, ".dc.dat", datdata, overwrite)); }; if ((datdata.OutputFormatFlag & OutputFormatFlag.MissFile) != 0) { - outfileNames.Add(OutputFormatFlag.MissFile, CreateOutfileNamesHelper(outDir, ".txt", datdata)); + outfileNames.Add(OutputFormatFlag.MissFile, CreateOutfileNamesHelper(outDir, ".txt", datdata, overwrite)); }; if ((datdata.OutputFormatFlag & OutputFormatFlag.SabreDat) != 0) { - outfileNames.Add(OutputFormatFlag.SabreDat, CreateOutfileNamesHelper(outDir, ".sd.xml", datdata)); + outfileNames.Add(OutputFormatFlag.SabreDat, CreateOutfileNamesHelper(outDir, ".sd.xml", datdata, overwrite)); }; if ((datdata.OutputFormatFlag & OutputFormatFlag.RedumpMD5) != 0) { - outfileNames.Add(OutputFormatFlag.RedumpMD5, CreateOutfileNamesHelper(outDir, ".md5", datdata)); + outfileNames.Add(OutputFormatFlag.RedumpMD5, CreateOutfileNamesHelper(outDir, ".md5", datdata, overwrite)); }; if ((datdata.OutputFormatFlag & OutputFormatFlag.RedumpSHA1) != 0) { - outfileNames.Add(OutputFormatFlag.RedumpSHA1, CreateOutfileNamesHelper(outDir, ".sha1", datdata)); + outfileNames.Add(OutputFormatFlag.RedumpSHA1, CreateOutfileNamesHelper(outDir, ".sha1", datdata, overwrite)); }; if ((datdata.OutputFormatFlag & OutputFormatFlag.RedumpSFV) != 0) { - outfileNames.Add(OutputFormatFlag.RedumpSFV, CreateOutfileNamesHelper(outDir, ".sfv", datdata)); + outfileNames.Add(OutputFormatFlag.RedumpSFV, CreateOutfileNamesHelper(outDir, ".sfv", datdata, overwrite)); }; return outfileNames; @@ -211,14 +212,27 @@ namespace SabreTools.Helper /// Output directory /// Extension to use for the file /// DAT information + /// True if we ignore existing files, false otherwise /// String containing the new filename - private static string CreateOutfileNamesHelper(string outDir, string extension, Dat datdata) + private static string CreateOutfileNamesHelper(string outDir, string extension, Dat datdata, bool overwrite) { string filename = (String.IsNullOrEmpty(datdata.FileName) ? datdata.Description : datdata.FileName); string outfile = outDir + filename + extension; outfile = (outfile.Contains(Path.DirectorySeparatorChar.ToString() + Path.DirectorySeparatorChar.ToString()) ? outfile.Replace(Path.DirectorySeparatorChar.ToString() + Path.DirectorySeparatorChar.ToString(), Path.DirectorySeparatorChar.ToString()) : outfile); + if (!overwrite) + { + int i = 1; + while (File.Exists(outfile)) + { + outfile = outDir + filename + "_" + i + extension; + outfile = (outfile.Contains(Path.DirectorySeparatorChar.ToString() + Path.DirectorySeparatorChar.ToString()) ? + outfile.Replace(Path.DirectorySeparatorChar.ToString() + Path.DirectorySeparatorChar.ToString(), Path.DirectorySeparatorChar.ToString()) : + outfile); + i++; + } + } return outfile; } diff --git a/SimpleSort/SimpleSort.cs b/SimpleSort/SimpleSort.cs index 615496e4..df83fd4e 100644 --- a/SimpleSort/SimpleSort.cs +++ b/SimpleSort/SimpleSort.cs @@ -571,7 +571,7 @@ namespace SabreTools // If we have have a non-empty rule, apply it if (rule.Tests != null && rule.Tests.Count != 0) { - // Otherwise, apply the rule ot the file + // Otherwise, apply the rule to the file string newinput = input + ".new"; Skippers.TransformFile(input, newinput, rule, _logger); Rom drom = FileTools.GetSingleFileInfo(newinput);