diff --git a/SabreTools.Helper/Objects/DATFromDir.cs b/SabreTools.Helper/Objects/DATFromDir.cs index 0226522b..22604c5b 100644 --- a/SabreTools.Helper/Objects/DATFromDir.cs +++ b/SabreTools.Helper/Objects/DATFromDir.cs @@ -217,19 +217,10 @@ namespace SabreTools // Define the temporary directory string tempSubDir = Path.GetFullPath(Path.Combine(_tempDir, Path.GetRandomFileName())) + Path.DirectorySeparatorChar; - // If we're copying files, copy it first and get the new filename - string newitem = item; - if (_copyFiles) - { - newitem = Path.Combine(_tempDir, Path.GetRandomFileName(), Path.GetFileName(item)); - Directory.CreateDirectory(Path.GetDirectoryName(newitem)); - File.Copy(item, newitem, true); - } - // Special case for if we are in Romba mode (all names are supposed to be SHA-1 hashes) if (_datdata.Romba) { - Rom rom = FileTools.GetTorrentGZFileInfo(newitem, _logger); + Rom rom = FileTools.GetTorrentGZFileInfo(item, _logger); // If the rom is valid, write it out if (rom.Name != null) @@ -258,33 +249,44 @@ namespace SabreTools return; } + // If we're copying files, copy it first and get the new filename + string newItem = item; + string newBasePath = _basePath; + if (_copyFiles) + { + newBasePath = Path.Combine(_tempDir, Path.GetRandomFileName()); + newItem = Path.GetFullPath(Path.Combine(newBasePath, Path.GetFullPath(item).Remove(0, _basePath.Length + 1))); + Directory.CreateDirectory(Path.GetDirectoryName(newItem)); + File.Copy(item, newItem, true); + } + // If both deep hash skip flags are set, do a quickscan if (_noMD5 && _noSHA1) { - ArchiveType? type = FileTools.GetCurrentArchiveType(newitem, _logger); + ArchiveType? type = FileTools.GetCurrentArchiveType(newItem, _logger); // If we have an archive, scan it if (type != null && !_archivesAsFiles) { - List extracted = FileTools.GetArchiveFileInfo(newitem, _logger); + List extracted = FileTools.GetArchiveFileInfo(newItem, _logger); foreach (Rom rom in extracted) { - ProcessFileHelper(newitem, + ProcessFileHelper(newItem, rom, _basePath, (Path.GetDirectoryName(Path.GetFullPath(item)) + Path.DirectorySeparatorChar).Remove(0, _basePath.Length) + Path.GetFileNameWithoutExtension(item)); } } // Otherwise, just get the info on the file itself - else if (File.Exists(newitem)) + else if (File.Exists(newItem)) { - ProcessFile(newitem, _basePath, ""); + ProcessFile(newItem, newBasePath, ""); } } // Otherwise, attempt to extract the files to the temporary directory else { - bool encounteredErrors = FileTools.ExtractArchive(newitem, + bool encounteredErrors = FileTools.ExtractArchive(newItem, tempSubDir, (_archivesAsFiles ? ArchiveScanLevel.External : ArchiveScanLevel.Internal), (!_archivesAsFiles && _enableGzip ? ArchiveScanLevel.Internal : ArchiveScanLevel.External), @@ -310,9 +312,9 @@ namespace SabreTools }); } // Otherwise, just get the info on the file itself - else if (File.Exists(newitem)) + else if (File.Exists(newItem)) { - ProcessFile(newitem, _basePath, ""); + ProcessFile(newItem, newBasePath, ""); } // Cue to delete the file if it's a copy @@ -320,11 +322,11 @@ namespace SabreTools { try { - Directory.Delete(Path.GetDirectoryName(newitem), true); + Directory.Delete(Path.GetDirectoryName(newItem), true); } catch { - _clean.Add(newitem); + _clean.Add(newItem); } } diff --git a/SabreTools.Helper/Tools/Style.cs b/SabreTools.Helper/Tools/Style.cs index f4a1a6e6..77080e7a 100644 --- a/SabreTools.Helper/Tools/Style.cs +++ b/SabreTools.Helper/Tools/Style.cs @@ -118,7 +118,7 @@ namespace SabreTools.Helper /// String with characters replaced public static string RussianToLatin(string input) { - string [,] charmap = { + string[,] charmap = { { "А", "A" }, { "Б", "B" }, { "В", "V" }, { "Г", "G" }, { "Д", "D" }, { "Е", "E" }, { "Ё", "Yo" }, { "Ж", "Zh" }, { "З", "Z" }, { "И", "I" }, { "Й", "J" }, { "К", "K" }, { "Л", "L" }, { "М", "M" }, { "Н", "N" }, @@ -441,6 +441,15 @@ namespace SabreTools.Helper /// public static int CompareNumeric(string s, string other) { + if ((s == null || s.Replace(" ", string.Empty).Length == 0) && (other != null && other.Replace(" ", string.Empty).Length > 0)) + { + return -1; + } + if ((s != null && s.Replace(" ", string.Empty).Length > 0) && (other == null || other.Replace(" ", string.Empty).Length == 0)) + { + return 1; + } + if (s != null && other != null && (s = s.Replace(" ", string.Empty)).Length > 0 && (other = other.Replace(" ", string.Empty)).Length > 0)