diff --git a/SabreTools.Helper/Dats/DatItem.cs b/SabreTools.Helper/Dats/DatItem.cs index ece44f97..23f08b8c 100644 --- a/SabreTools.Helper/Dats/DatItem.cs +++ b/SabreTools.Helper/Dats/DatItem.cs @@ -19,6 +19,7 @@ namespace SabreTools.Helper.Dats // Standard item information protected string _name; + private string _merge; protected ItemType _itemType; protected DupeType _dupeType; @@ -51,6 +52,11 @@ namespace SabreTools.Helper.Dats get { return _name; } set { _name = value; } } + public string MergeTag + { + get { return _merge; } + set { _merge = value; } + } public ItemType Type { get { return _itemType; } diff --git a/SabreTools.Helper/Dats/Disk.cs b/SabreTools.Helper/Dats/Disk.cs index 1f31f5ab..4343c8e4 100644 --- a/SabreTools.Helper/Dats/Disk.cs +++ b/SabreTools.Helper/Dats/Disk.cs @@ -11,7 +11,6 @@ namespace SabreTools.Helper.Dats // Disk information protected string _md5; protected string _sha1; - // private string _merge; protected ItemStatus _itemStatus; #endregion diff --git a/SabreTools.Helper/Dats/Partials/DatFile.Bucketing.cs b/SabreTools.Helper/Dats/Partials/DatFile.Bucketing.cs index 2de842b6..45e6b18d 100644 --- a/SabreTools.Helper/Dats/Partials/DatFile.Bucketing.cs +++ b/SabreTools.Helper/Dats/Partials/DatFile.Bucketing.cs @@ -809,6 +809,17 @@ namespace SabreTools.Helper.Dats List items = this[game]; foreach (DatItem item in items) { + // If the item doesn't have a valid merge tag OR the merged file doesn't exist in the parent, then add it + if (item.MergeTag == null || !this[parent].Select(i => i.Name).Contains(item.MergeTag)) + { + // TODO: Remove hack for just disks at a later date + item.Name = (item.Type != ItemType.Disk ? item.Machine.Name + "\\" : "") + item.Name; + item.Machine = parentMachine; + + this[parent].Add(item); + } + + /* // If the parent doesn't already contain the item, add it if (!this[parent].Contains(item)) { @@ -818,6 +829,7 @@ namespace SabreTools.Helper.Dats this[parent].Add(item); } + */ } // Then, remove the old game so it's not picked up by the writer diff --git a/SabreTools.Helper/Dats/Partials/DatFile.Parsers.cs b/SabreTools.Helper/Dats/Partials/DatFile.Parsers.cs index 1ad45e13..c97597d5 100644 --- a/SabreTools.Helper/Dats/Partials/DatFile.Parsers.cs +++ b/SabreTools.Helper/Dats/Partials/DatFile.Parsers.cs @@ -1630,6 +1630,9 @@ namespace SabreTools.Helper.Dats case "disk": empty = false; + // If the rom has a merge tag, add it + string merge = subreader.GetAttribute("merge"); + // If the rom has a status, flag it its = ItemStatus.None; if (subreader.GetAttribute("flags") == "good" || subreader.GetAttribute("status") == "good") @@ -1709,6 +1712,7 @@ namespace SabreTools.Helper.Dats Name = subreader.GetAttribute("name"), MD5 = subreader.GetAttribute("md5")?.ToLowerInvariant(), SHA1 = subreader.GetAttribute("sha1")?.ToLowerInvariant(), + MergeTag = merge, ItemStatus = its, Machine = machine, @@ -1737,6 +1741,7 @@ namespace SabreTools.Helper.Dats MD5 = subreader.GetAttribute("md5")?.ToLowerInvariant(), SHA1 = subreader.GetAttribute("sha1")?.ToLowerInvariant(), ItemStatus = its, + MergeTag = merge, Date = date, Machine = machine,