From ed1676cd359a0e788cde7efdd8f281f9ad3976f3 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Tue, 13 Sep 2016 11:24:02 -0700 Subject: [PATCH] [DatTools, RomTools] Fix type-split output, make parsing for MAME listxml better --- SabreTools.Helper/Tools/DatTools.cs | 10 ++++++++++ SabreTools.Helper/Tools/RomTools.cs | 25 ++++++++++++++++++++++--- SabreTools/Partials/SabreTools_Inits.cs | 4 ++-- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/SabreTools.Helper/Tools/DatTools.cs b/SabreTools.Helper/Tools/DatTools.cs index 2be5eba1..b267a6e6 100644 --- a/SabreTools.Helper/Tools/DatTools.cs +++ b/SabreTools.Helper/Tools/DatTools.cs @@ -900,6 +900,15 @@ namespace SabreTools.Helper switch (xtr.Name) { + // Handle MAME listxml since they're halfway between a SL and a Logiqx XML + case "mame": + if (xtr.GetAttribute("build") != null) + { + datdata.Name = (String.IsNullOrEmpty(datdata.Name) ? xtr.GetAttribute("build") : datdata.Name); + datdata.Description = (String.IsNullOrEmpty(datdata.Description) ? datdata.Name : datdata.Name); + } + xtr.Read(); + break; // New software lists have this behavior case "softwarelist": if (xtr.GetAttribute("name") != null) @@ -920,6 +929,7 @@ namespace SabreTools.Helper { datdata.Version = (String.IsNullOrEmpty(datdata.Version) ? xtr.GetAttribute("version") : datdata.Version); } + xtr.Read(); break; // We want to process the entire subtree of the header case "header": diff --git a/SabreTools.Helper/Tools/RomTools.cs b/SabreTools.Helper/Tools/RomTools.cs index e19cfbc2..cfe60532 100644 --- a/SabreTools.Helper/Tools/RomTools.cs +++ b/SabreTools.Helper/Tools/RomTools.cs @@ -236,11 +236,30 @@ namespace SabreTools.Helper { if (x.Machine.Name == y.Machine.Name) { - if (Path.GetDirectoryName(x.Name) == Path.GetDirectoryName(y.Name)) + if ((x.Type == ItemType.Rom || x.Type == ItemType.Disk) && (y.Type == ItemType.Rom || y.Type == ItemType.Disk)) { - return Style.CompareNumeric(Path.GetFileName(x.Name), Path.GetFileName(y.Name)); + if (Path.GetDirectoryName(x.Name) == Path.GetDirectoryName(y.Name)) + { + return Style.CompareNumeric(Path.GetFileName(x.Name), Path.GetFileName(y.Name)); + } + return Style.CompareNumeric(Path.GetDirectoryName(x.Name), Path.GetDirectoryName(y.Name)); + } + else if ((x.Type == ItemType.Rom || x.Type == ItemType.Disk) && (y.Type != ItemType.Rom && y.Type != ItemType.Disk)) + { + return -1; + } + else if ((x.Type != ItemType.Rom && x.Type != ItemType.Disk) && (y.Type == ItemType.Rom || y.Type == ItemType.Disk)) + { + return 1; + } + else + { + if (Path.GetDirectoryName(x.Name) == Path.GetDirectoryName(y.Name)) + { + return Style.CompareNumeric(Path.GetFileName(x.Name), Path.GetFileName(y.Name)); + } + return Style.CompareNumeric(Path.GetDirectoryName(x.Name), Path.GetDirectoryName(y.Name)); } - return Style.CompareNumeric(Path.GetDirectoryName(x.Name), Path.GetDirectoryName(y.Name)); } return Style.CompareNumeric(x.Machine.Name, y.Machine.Name); } diff --git a/SabreTools/Partials/SabreTools_Inits.cs b/SabreTools/Partials/SabreTools_Inits.cs index 6e88b59a..7897dbb0 100644 --- a/SabreTools/Partials/SabreTools_Inits.cs +++ b/SabreTools/Partials/SabreTools_Inits.cs @@ -499,13 +499,13 @@ namespace SabreTools { if (File.Exists(input)) { - DatTools.SplitByType(Path.GetFullPath(input), outdir, Path.GetDirectoryName(input), _logger); + DatTools.SplitByType(Path.GetFullPath(input), outdir, Path.GetFullPath(Path.GetDirectoryName(input)), _logger); } else if (Directory.Exists(input)) { foreach (string file in Directory.EnumerateFiles(input, "*", SearchOption.AllDirectories)) { - DatTools.SplitByType(file, outdir, (input.EndsWith(Path.DirectorySeparatorChar.ToString()) ? input : input + Path.DirectorySeparatorChar), _logger); + DatTools.SplitByType(file, outdir, Path.GetFullPath((input.EndsWith(Path.DirectorySeparatorChar.ToString()) ? input : input + Path.DirectorySeparatorChar)), _logger); } } else