diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs index 0d2e2226..0e1395e0 100644 --- a/SabreTools.Library/DatFiles/DatFile.cs +++ b/SabreTools.Library/DatFiles/DatFile.cs @@ -2953,13 +2953,7 @@ namespace SabreTools.Library.DatFiles } // Check the file extension first as a safeguard - string ext = Path.GetExtension(filename).ToLowerInvariant(); - if (ext.StartsWith(".")) - { - ext = ext.Substring(1); - } - if (ext != "dat" && ext != "csv" && ext != "md5" && ext != "sfv" && ext != "sha1" && ext != "sha256" - && ext != "sha384" && ext != "sha512" && ext != "tsv" && ext != "txt" && ext != "xml") + if (!Utilities.HasValidDatExtension(filename)) { return; } @@ -4597,14 +4591,14 @@ namespace SabreTools.Library.DatFiles List newExtA = new List(); foreach (string s in extA) { - newExtA.Add((s.StartsWith(".") ? s : "." + s).ToUpperInvariant()); + newExtA.Add((s.StartsWith(".") ? s.Substring(1) : s).ToUpperInvariant()); } string newExtAString = string.Join(",", newExtA); List newExtB = new List(); foreach (string s in extB) { - newExtB.Add((s.StartsWith(".") ? s : "." + s).ToUpperInvariant()); + newExtB.Add((s.StartsWith(".") ? s.Substring(1) : s).ToUpperInvariant()); } string newExtBString = string.Join(",", newExtB); @@ -4653,11 +4647,11 @@ namespace SabreTools.Library.DatFiles List items = this[key]; foreach (DatItem item in items) { - if (newExtA.Contains(Path.GetExtension(item.Name.ToUpperInvariant()))) + if (newExtA.Contains(Utilities.GetExtension(item.Name.ToUpperInvariant()))) { datdataA.Add(key, item); } - else if (newExtB.Contains(Path.GetExtension(item.Name.ToUpperInvariant()))) + else if (newExtB.Contains(Utilities.GetExtension(item.Name.ToUpperInvariant()))) { datdataB.Add(key, item); } diff --git a/SabreTools.Library/DatFiles/OfflineList.cs b/SabreTools.Library/DatFiles/OfflineList.cs index aa3a2ad3..3fcc48d0 100644 --- a/SabreTools.Library/DatFiles/OfflineList.cs +++ b/SabreTools.Library/DatFiles/OfflineList.cs @@ -293,11 +293,7 @@ namespace SabreTools.Library.DatFiles } else if (rom.Type == ItemType.Rom) { - string tempext = Path.GetExtension(((Rom)rom).Name); - if (!tempext.StartsWith(".")) - { - tempext = "." + tempext; - } + string tempext = "." + Utilities.GetExtension(((Rom)rom).Name); state += "\t\t\t\n" + (((Rom)rom).CRC != null diff --git a/SabreTools.Library/Tools/Logger.cs b/SabreTools.Library/Tools/Logger.cs index 7b71c51b..2d11166b 100644 --- a/SabreTools.Library/Tools/Logger.cs +++ b/SabreTools.Library/Tools/Logger.cs @@ -61,7 +61,7 @@ namespace SabreTools.Library.Tools _tofile = tofile; _warnings = false; _errors = false; - _filename = Path.GetFileNameWithoutExtension(filename) + " (" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ")" + Path.GetExtension(filename); + _filename = Path.GetFileNameWithoutExtension(filename) + " (" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ")." + Utilities.GetExtension(filename); _filter = filter; if (!Directory.Exists(_basepath)) diff --git a/SabreTools.Library/Tools/Utilities.cs b/SabreTools.Library/Tools/Utilities.cs index e4bcdd8a..a2c328ca 100644 --- a/SabreTools.Library/Tools/Utilities.cs +++ b/SabreTools.Library/Tools/Utilities.cs @@ -865,15 +865,7 @@ namespace SabreTools.Library.Tools } // First line of defense is going to be the extension, for better or worse - string ext = Path.GetExtension(input).ToLowerInvariant(); - if (ext.StartsWith(".")) - { - ext = ext.Substring(1); - } - - if (ext != "7z" && ext != "gz" && ext != "lzma" && ext != "rar" - && ext != "rev" && ext != "r00" && ext != "r01" && ext != "tar" - && ext != "tgz" && ext != "tlz" && ext != "zip" && ext != "zipx") + if (!HasValidArchiveExtension(input)) { return outtype; } @@ -933,17 +925,14 @@ namespace SabreTools.Library.Tools public static DatFormat GetDatFormat(string filename) { // Limit the output formats based on extension - string ext = Path.GetExtension(filename).ToLowerInvariant(); - if (ext.StartsWith(".")) - { - ext = ext.Substring(1); - } - if (ext != "csv" && ext != "dat" && ext != "md5" && ext != "sfv" && ext != "sha1" - && ext != "sha384" && ext != "sha512" && ext != "tsv" && ext != "txt" && ext != "xml") + if (!HasValidDatExtension(filename)) { return 0; } + // Get the extension from the filename + string ext = GetExtension(filename); + // Read the input file, if possible Globals.Logger.Verbose("Attempting to read file to get format: {0}", filename); @@ -2113,6 +2102,37 @@ namespace SabreTools.Library.Tools return outDir; } + /// + /// Get the extension from the path, if possible + /// + /// Path to get extension from + /// Extension, if possible + public static string GetExtension(string path) + { + // Check null or empty first + if (String.IsNullOrWhiteSpace(path)) + { + return null; + } + + // Get the extension from the path, if possible + string ext = Path.GetExtension(path)?.ToLowerInvariant(); + + // Check if the extension is null or empty + if (String.IsNullOrWhiteSpace(ext)) + { + return null; + } + + // Make sure that extensions are valid + if (ext.StartsWith(".")) + { + ext = ext.Substring(1); + } + + return ext; + } + /// /// Get the proper output path for a given input file and output directory /// @@ -2256,6 +2276,67 @@ namespace SabreTools.Library.Tools return size; } + /// + /// Get if the given path has a valid DAT extension + /// + /// Path to check + /// True if the extension is valid, false otherwise + public static bool HasValidArchiveExtension(string path) + { + // Get the extension from the path, if possible + string ext = GetExtension(path); + + // Check against the list of known archive extensions + switch (ext) + { + case "7z": + case "gz": + case "lzma": + case "rar": + case "rev": + case "r00": + case "r01": + case "tar": + case "tgz": + case "tlz": + case "zip": + case "zipx": + return true; + default: + return false; + } + } + + /// + /// Get if the given path has a valid archive extension + /// + /// Path to check + /// True if the extension is valid, false otherwise + public static bool HasValidDatExtension(string path) + { + // Get the extension from the path, if possible + string ext = GetExtension(path); + + // Check against the list of known DAT extensions + switch (ext) + { + case "csv": + case "dat": + case "md5": + case "sfv": + case "sha1": + case "sha256": + case "sha384": + case "sha512": + case "tsv": + case "txt": + case "xml": + return true; + default: + return false; + } + } + /// /// Get if a string contains Unicode characters ///