Port AddRomsFromBios to IDDB

This commit is contained in:
Matt Nadareski
2024-03-19 21:48:40 -04:00
parent 251883b54e
commit 7657a54ff2
2 changed files with 50 additions and 2 deletions

View File

@@ -1206,6 +1206,53 @@ namespace SabreTools.DatFiles
#region Splitting
/// <summary>
/// Use romof tags to add roms to the children
/// </summary>
public void AddRomsFromBios()
{
List<string> games = [.. SortedKeys];
foreach (string game in games)
{
var items = GetDatItemsForBucket(game);
// If the game has no items in it, we want to continue
if (items == null || items.Length == 0)
continue;
// Get the machine for the first item
var machine = GetMachineForItem(items[0].Item1);
if (machine.Item2 == null)
continue;
// Determine if the game has a parent or not
(long, string?) parent = (-1, null);
if (!string.IsNullOrEmpty(machine.Item2.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)))
{
string? romOf = machine.Item2.GetStringFieldValue(Models.Metadata.Machine.RomOfKey);
var romOfMachine = GetMachine(romOf);
parent = (romOfMachine.Item1, romOf);
}
// If the parent doesnt exist, we want to continue
if (string.IsNullOrEmpty(parent.Item2))
continue;
// If the parent doesn't have any items, we want to continue
var parentItems = GetDatItemsForBucket(parent.Item2!);
if (parentItems == null || parentItems.Length == 0)
continue;
// If the parent exists and has items, we copy the items from the parent to the current game
foreach ((long, DatItem) item in parentItems)
{
DatItem datItem = (item.Item2.Clone() as DatItem)!;
if (!items.Where(i => i.Item2.GetName() == datItem.GetName()).Any() && !items.Any(i => i.Item2 == datItem))
AddItem(datItem, machine.Item1);
}
}
}
/// <summary>
/// Use device_ref and optionally slotoption tags to add roms to the children
/// </summary>

View File

@@ -131,6 +131,7 @@ namespace SabreTools.Filtering
// Now we want to loop through all of the games and set the correct information
AddRomsFromChildren(datFile, skipDedup: false);
datFile.ItemsDB.AddRomsFromChildren(true, false);
// Now that we have looped through the cloneof tags, we loop through the romof tags
RemoveBiosRomsFromChild(datFile, false);
@@ -164,6 +165,7 @@ namespace SabreTools.Filtering
// Now that we have looped through the cloneof tags, we loop through the romof tags
AddRomsFromBios(datFile);
datFile.ItemsDB.AddRomsFromBios();
// Then, remove the romof and cloneof tags so it's not picked up by the manager
RemoveTagsFromChild(datFile);
@@ -183,6 +185,7 @@ namespace SabreTools.Filtering
// Now we want to loop through all of the games and set the correct information
AddRomsFromChildren(datFile, skipDedup: true);
datFile.ItemsDB.AddRomsFromChildren(true, true);
// Now that we have looped through the cloneof tags, we loop through the romof tags
RemoveBiosRomsFromChild(datFile, false);
@@ -293,8 +296,6 @@ namespace SabreTools.Filtering
}
}
// TODO: Add AddRomsFromBiosDB
/// <summary>
/// Use device_ref and optionally slotoption tags to add roms to the children
/// </summary>