From 0c10eaa52fa15842e7106e45e7e40e2c9edb31dc Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Mon, 31 Aug 2020 16:46:04 -0700 Subject: [PATCH] Better sort, fix naming collisions --- SabreTools.Library/DatFiles/DatFile.cs | 4 ++-- SabreTools.Library/DatItems/DatItem.cs | 11 ++++++++--- SabreTools.Library/DatItems/Enums.cs | 13 ++++++++----- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs index 700e6bb4..95a11778 100644 --- a/SabreTools.Library/DatFiles/DatFile.cs +++ b/SabreTools.Library/DatFiles/DatFile.cs @@ -1415,7 +1415,7 @@ namespace SabreTools.Library.DatFiles DatItem datItem = (DatItem)item.Clone(); newdevs.AddRange((datItem.Machine.DeviceReferences ?? new List()).Select(d => d.Name).ToList()); datItem.CopyMachineInformation(copyFrom); - if (Items[game].Where(i => i.Name.ToLowerInvariant() == datItem.Name.ToLowerInvariant()).Count() == 0) + if (!Items[game].Contains(datItem)) { foundnew = true; Items.Add(game, datItem); @@ -1473,7 +1473,7 @@ namespace SabreTools.Library.DatFiles newSlotOptions.AddRange(machineSlotOptions); datItem.CopyMachineInformation(copyFrom); - if (Items[game].Where(i => i.Name.ToLowerInvariant() == datItem.Name.ToLowerInvariant()).Count() == 0) + if (!Items[game].Contains(datItem)) { foundnew = true; Items.Add(game, datItem); diff --git a/SabreTools.Library/DatItems/DatItem.cs b/SabreTools.Library/DatItems/DatItem.cs index 76c2b2ea..24abe0b4 100644 --- a/SabreTools.Library/DatItems/DatItem.cs +++ b/SabreTools.Library/DatItems/DatItem.cs @@ -1226,10 +1226,15 @@ namespace SabreTools.Library.DatItems { if (x.Machine.Name == y.Machine.Name) { - if (Path.GetDirectoryName(Sanitizer.RemovePathUnsafeCharacters(x.Name)) == Path.GetDirectoryName(Sanitizer.RemovePathUnsafeCharacters(y.Name))) - return nc.Compare(Path.GetFileName(Sanitizer.RemovePathUnsafeCharacters(x.Name)), Path.GetFileName(Sanitizer.RemovePathUnsafeCharacters(y.Name))); + if (x.ItemType == y.ItemType) + { + if (Path.GetDirectoryName(Sanitizer.RemovePathUnsafeCharacters(x.Name)) == Path.GetDirectoryName(Sanitizer.RemovePathUnsafeCharacters(y.Name))) + return nc.Compare(Path.GetFileName(Sanitizer.RemovePathUnsafeCharacters(x.Name)), Path.GetFileName(Sanitizer.RemovePathUnsafeCharacters(y.Name))); - return nc.Compare(Path.GetDirectoryName(Sanitizer.RemovePathUnsafeCharacters(x.Name)), Path.GetDirectoryName(Sanitizer.RemovePathUnsafeCharacters(y.Name))); + return nc.Compare(Path.GetDirectoryName(Sanitizer.RemovePathUnsafeCharacters(x.Name)), Path.GetDirectoryName(Sanitizer.RemovePathUnsafeCharacters(y.Name))); + } + + return x.ItemType - y.ItemType; } return nc.Compare(x.Machine.Name, y.Machine.Name); diff --git a/SabreTools.Library/DatItems/Enums.cs b/SabreTools.Library/DatItems/Enums.cs index 0cc6b863..0a2b3592 100644 --- a/SabreTools.Library/DatItems/Enums.cs +++ b/SabreTools.Library/DatItems/Enums.cs @@ -453,14 +453,17 @@ namespace SabreTools.Library.DatItems /// public enum ItemType { + // "Actionable" item types Rom = 0, Disk = 1, - Sample = 2, - Release = 3, + Media = 2, + + // "Auxiliary" item types + Archive = 3, BiosSet = 4, - Archive = 5, - Chip = 6, - Media = 7, + Chip = 5, + Release = 6, + Sample = 7, Blank = 99, // This is not a real type, only used internally }