Make Source inherent to DatItem instead of passing through

This commit is contained in:
Matt Nadareski
2026-04-02 17:06:01 -04:00
parent 61ea4b2668
commit d3f5dccf5b
58 changed files with 468 additions and 184 deletions

View File

@@ -26,7 +26,7 @@ namespace SabreTools.Metadata.DatFiles.Test
datItem.SetName("rom.bin");
datItem.Write(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
datItem.Machine = machine;
datItem.Write(DatItem.SourceKey, source);
datItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
datFile.AddItem(datItem, statsOnly: false);
@@ -54,7 +54,7 @@ namespace SabreTools.Metadata.DatFiles.Test
datItem.SetName("rom.bin");
datItem.Write(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
datItem.Machine = machine;
datItem.Write(DatItem.SourceKey, source);
datItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
long sourceIndex = datFile.AddSourceDB(source);
@@ -84,7 +84,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem datItem = new Rom();
datItem.Machine = machine;
datItem.Write(DatItem.SourceKey, source);
datItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
datFile.AddItem(datItem, statsOnly: false);
@@ -131,12 +131,12 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem rom = new Rom();
rom.SetName("rom.bin");
rom.Machine = machine;
rom.Write(DatItem.SourceKey, source);
rom.Source = source;
DatItem disk = new Disk();
disk.SetName("disk");
disk.Machine = machine;
disk.Write(DatItem.SourceKey, source);
disk.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
datFile.AddItem(rom, statsOnly: false);
@@ -270,7 +270,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem datItem = new Rom();
datItem.Machine = machine;
datItem.Write(DatItem.SourceKey, source);
datItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
datFile.AddItem(datItem, statsOnly: false);

View File

@@ -27,21 +27,21 @@ namespace SabreTools.Metadata.DatFiles.Test
parentItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
parentItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
parentItem.Machine = parentMachine;
parentItem.Write(DatItem.SourceKey, source);
parentItem.Source = source;
DatItem matchChildItem = new Rom();
matchChildItem.SetName("match_child_rom");
matchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
matchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
matchChildItem.Machine = childMachine;
matchChildItem.Write(DatItem.SourceKey, source);
matchChildItem.Source = source;
DatItem noMatchChildItem = new Rom();
noMatchChildItem.SetName("no_match_child_rom");
noMatchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
noMatchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "beefdead");
noMatchChildItem.Machine = childMachine;
noMatchChildItem.Write(DatItem.SourceKey, source);
noMatchChildItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
datFile.AddItem(parentItem, statsOnly: false);
@@ -72,21 +72,21 @@ namespace SabreTools.Metadata.DatFiles.Test
parentItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
parentItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
parentItem.Machine = parentMachine;
parentItem.Write(DatItem.SourceKey, source);
parentItem.Source = source;
DatItem matchChildItem = new Rom();
matchChildItem.SetName("match_child_rom");
matchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
matchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
matchChildItem.Machine = childMachine;
matchChildItem.Write(DatItem.SourceKey, source);
matchChildItem.Source = source;
DatItem noMatchChildItem = new Rom();
noMatchChildItem.SetName("no_match_child_rom");
noMatchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
noMatchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "beefdead");
noMatchChildItem.Machine = childMachine;
noMatchChildItem.Write(DatItem.SourceKey, source);
noMatchChildItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
datFile.AddItem(parentItem, statsOnly: false);
@@ -117,21 +117,21 @@ namespace SabreTools.Metadata.DatFiles.Test
parentItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
parentItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
parentItem.Machine = parentMachine;
parentItem.Write(DatItem.SourceKey, source);
parentItem.Source = source;
DatItem matchChildItem = new Rom();
matchChildItem.SetName("match_child_rom");
matchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
matchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
matchChildItem.Machine = childMachine;
matchChildItem.Write(DatItem.SourceKey, source);
matchChildItem.Source = source;
DatItem noMatchChildItem = new Rom();
noMatchChildItem.SetName("no_match_child_rom");
noMatchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
noMatchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "beefdead");
noMatchChildItem.Machine = childMachine;
noMatchChildItem.Write(DatItem.SourceKey, source);
noMatchChildItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
long biosMachineIndex = datFile.AddMachineDB(parentMachine);
@@ -165,21 +165,21 @@ namespace SabreTools.Metadata.DatFiles.Test
parentItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
parentItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
parentItem.Machine = parentMachine;
parentItem.Write(DatItem.SourceKey, source);
parentItem.Source = source;
DatItem matchChildItem = new Rom();
matchChildItem.SetName("match_child_rom");
matchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
matchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
matchChildItem.Machine = childMachine;
matchChildItem.Write(DatItem.SourceKey, source);
matchChildItem.Source = source;
DatItem noMatchChildItem = new Rom();
noMatchChildItem.SetName("no_match_child_rom");
noMatchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
noMatchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "beefdead");
noMatchChildItem.Machine = childMachine;
noMatchChildItem.Write(DatItem.SourceKey, source);
noMatchChildItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
long biosMachineIndex = datFile.AddMachineDB(parentMachine);
@@ -217,21 +217,21 @@ namespace SabreTools.Metadata.DatFiles.Test
parentItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
parentItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
parentItem.Machine = parentMachine;
parentItem.Write(DatItem.SourceKey, source);
parentItem.Source = source;
DatItem matchChildItem = new Rom();
matchChildItem.SetName("match_child_rom");
matchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
matchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
matchChildItem.Machine = childMachine;
matchChildItem.Write(DatItem.SourceKey, source);
matchChildItem.Source = source;
DatItem noMatchChildItem = new Rom();
noMatchChildItem.SetName("no_match_child_rom");
noMatchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
noMatchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "beefdead");
noMatchChildItem.Machine = childMachine;
noMatchChildItem.Write(DatItem.SourceKey, source);
noMatchChildItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
datFile.AddItem(parentItem, statsOnly: false);
@@ -262,21 +262,21 @@ namespace SabreTools.Metadata.DatFiles.Test
parentItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
parentItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
parentItem.Machine = parentMachine;
parentItem.Write(DatItem.SourceKey, source);
parentItem.Source = source;
DatItem matchChildItem = new Rom();
matchChildItem.SetName("match_child_rom");
matchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
matchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
matchChildItem.Machine = childMachine;
matchChildItem.Write(DatItem.SourceKey, source);
matchChildItem.Source = source;
DatItem noMatchChildItem = new Rom();
noMatchChildItem.SetName("no_match_child_rom");
noMatchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
noMatchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "beefdead");
noMatchChildItem.Machine = childMachine;
noMatchChildItem.Write(DatItem.SourceKey, source);
noMatchChildItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
long biosMachineIndex = datFile.AddMachineDB(parentMachine);
@@ -318,29 +318,29 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem deviceItem = new Sample();
deviceItem.SetName("device_item");
deviceItem.Machine = deviceMachine;
deviceItem.Write(DatItem.SourceKey, source);
deviceItem.Source = source;
DatItem slotOptionItem = new Sample();
slotOptionItem.SetName("slot_option_item");
slotOptionItem.Machine = slotOptionMachine;
slotOptionItem.Write(DatItem.SourceKey, source);
slotOptionItem.Source = source;
DatItem datItem = new Rom();
datItem.SetName("rom");
datItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
datItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
datItem.Machine = itemMachine;
datItem.Write(DatItem.SourceKey, source);
datItem.Source = source;
DatItem deviceRef = new DeviceRef();
deviceRef.SetName("device");
deviceRef.Machine = itemMachine;
deviceRef.Write(DatItem.SourceKey, source);
deviceRef.Source = source;
DatItem slotOption = new SlotOption();
slotOption.SetName("slotoption");
slotOption.Machine = itemMachine;
slotOption.Write(DatItem.SourceKey, source);
slotOption.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
datFile.AddItem(deviceItem, statsOnly: false);
@@ -430,21 +430,21 @@ namespace SabreTools.Metadata.DatFiles.Test
parentItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
parentItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
parentItem.Machine = parentMachine;
parentItem.Write(DatItem.SourceKey, source);
parentItem.Source = source;
DatItem matchChildItem = new Rom();
matchChildItem.SetName("match_child_rom");
matchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
matchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
matchChildItem.Machine = childMachine;
matchChildItem.Write(DatItem.SourceKey, source);
matchChildItem.Source = source;
DatItem noMatchChildItem = new Rom();
noMatchChildItem.SetName("no_match_child_rom");
noMatchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
noMatchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "beefdead");
noMatchChildItem.Machine = childMachine;
noMatchChildItem.Write(DatItem.SourceKey, source);
noMatchChildItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
datFile.AddItem(parentItem, statsOnly: false);
@@ -475,21 +475,21 @@ namespace SabreTools.Metadata.DatFiles.Test
parentItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
parentItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
parentItem.Machine = parentMachine;
parentItem.Write(DatItem.SourceKey, source);
parentItem.Source = source;
DatItem matchChildItem = new Rom();
matchChildItem.SetName("match_child_rom");
matchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
matchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
matchChildItem.Machine = childMachine;
matchChildItem.Write(DatItem.SourceKey, source);
matchChildItem.Source = source;
DatItem noMatchChildItem = new Rom();
noMatchChildItem.SetName("no_match_child_rom");
noMatchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
noMatchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "beefdead");
noMatchChildItem.Machine = childMachine;
noMatchChildItem.Write(DatItem.SourceKey, source);
noMatchChildItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
long biosMachineIndex = datFile.AddMachineDB(parentMachine);
@@ -524,11 +524,11 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem biosItem = new Rom();
biosItem.Machine = biosMachine;
biosItem.Write(DatItem.SourceKey, source);
biosItem.Source = source;
DatItem deviceItem = new Rom();
deviceItem.Machine = deviceMachine;
deviceItem.Write(DatItem.SourceKey, source);
deviceItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
datFile.AddItem(biosItem, statsOnly: false);
@@ -592,21 +592,21 @@ namespace SabreTools.Metadata.DatFiles.Test
parentItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
parentItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
parentItem.Machine = parentMachine;
parentItem.Write(DatItem.SourceKey, source);
parentItem.Source = source;
DatItem matchChildItem = new Rom();
matchChildItem.SetName("match_child_rom");
matchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
matchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
matchChildItem.Machine = childMachine;
matchChildItem.Write(DatItem.SourceKey, source);
matchChildItem.Source = source;
DatItem noMatchChildItem = new Rom();
noMatchChildItem.SetName("no_match_child_rom");
noMatchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
noMatchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "beefdead");
noMatchChildItem.Machine = childMachine;
noMatchChildItem.Write(DatItem.SourceKey, source);
noMatchChildItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
datFile.AddItem(parentItem, statsOnly: false);
@@ -642,21 +642,21 @@ namespace SabreTools.Metadata.DatFiles.Test
parentItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
parentItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
parentItem.Machine = parentMachine;
parentItem.Write(DatItem.SourceKey, source);
parentItem.Source = source;
DatItem matchChildItem = new Rom();
matchChildItem.SetName("match_child_rom");
matchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
matchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
matchChildItem.Machine = childMachine;
matchChildItem.Write(DatItem.SourceKey, source);
matchChildItem.Source = source;
DatItem noMatchChildItem = new Rom();
noMatchChildItem.SetName("no_match_child_rom");
noMatchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
noMatchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "beefdead");
noMatchChildItem.Machine = childMachine;
noMatchChildItem.Write(DatItem.SourceKey, source);
noMatchChildItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
long biosMachineIndex = datFile.AddMachineDB(parentMachine);
@@ -699,21 +699,21 @@ namespace SabreTools.Metadata.DatFiles.Test
parentItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
parentItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
parentItem.Machine = parentMachine;
parentItem.Write(DatItem.SourceKey, source);
parentItem.Source = source;
DatItem matchChildItem = new Rom();
matchChildItem.SetName("match_child_rom");
matchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
matchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
matchChildItem.Machine = childMachine;
matchChildItem.Write(DatItem.SourceKey, source);
matchChildItem.Source = source;
DatItem noMatchChildItem = new Rom();
noMatchChildItem.SetName("no_match_child_rom");
noMatchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
noMatchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "beefdead");
noMatchChildItem.Machine = childMachine;
noMatchChildItem.Write(DatItem.SourceKey, source);
noMatchChildItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
datFile.AddItem(parentItem, statsOnly: false);
@@ -748,21 +748,21 @@ namespace SabreTools.Metadata.DatFiles.Test
parentItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
parentItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
parentItem.Machine = parentMachine;
parentItem.Write(DatItem.SourceKey, source);
parentItem.Source = source;
DatItem matchChildItem = new Rom();
matchChildItem.SetName("match_child_rom");
matchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
matchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
matchChildItem.Machine = childMachine;
matchChildItem.Write(DatItem.SourceKey, source);
matchChildItem.Source = source;
DatItem noMatchChildItem = new Rom();
noMatchChildItem.SetName("no_match_child_rom");
noMatchChildItem.Write<long>(Data.Models.Metadata.Rom.SizeKey, 12345);
noMatchChildItem.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "beefdead");
noMatchChildItem.Machine = childMachine;
noMatchChildItem.Write(DatItem.SourceKey, source);
noMatchChildItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
long biosMachineIndex = datFile.AddMachineDB(parentMachine);
@@ -799,7 +799,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem datItem = new Rom();
datItem.Machine = machine;
datItem.Write(DatItem.SourceKey, source);
datItem.Source = source;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
datFile.AddItem(datItem, statsOnly: false);

View File

@@ -36,7 +36,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem rom = new Rom();
rom.SetName("rom");
rom.Write(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
rom.Write(DatItem.SourceKey, source);
rom.Source = source;
rom.Machine = machine;
DatFile? datFile = new Logiqx(datFile: null, useGame: false);
@@ -76,7 +76,7 @@ namespace SabreTools.Metadata.DatFiles.Test
machine.Name = "game-1";
DatItem datItem = new Rom();
datItem.Write<Source?>(DatItem.SourceKey, source);
datItem.Source = source;
datItem.Machine = machine;
DatFile datFile = new Logiqx(datFile: null, useGame: false);
@@ -1961,7 +1961,7 @@ namespace SabreTools.Metadata.DatFiles.Test
romA.Write(Data.Models.Metadata.Rom.SizeKey, 12345);
romA.Write(Data.Models.Metadata.Rom.CRCKey, "crc");
romA.Machine = (Machine)machine.Clone();
romA.Write(DatItem.SourceKey, (Source)source.Clone());
romA.Source = (Source)source.Clone();
List<DatItem> datItems = [romA];
@@ -1989,14 +1989,14 @@ namespace SabreTools.Metadata.DatFiles.Test
romA.Write(Data.Models.Metadata.Rom.SizeKey, 12345);
romA.Write(Data.Models.Metadata.Rom.CRCKey, "crc");
romA.Machine = (Machine)machine.Clone();
romA.Write(DatItem.SourceKey, (Source)source.Clone());
romA.Source = (Source)source.Clone();
Rom romB = new Rom();
romB.SetName("romB");
romB.Write(Data.Models.Metadata.Rom.SizeKey, 23456);
romB.Write(Data.Models.Metadata.Rom.CRCKey, "crc2");
romB.Machine = (Machine)machine.Clone();
romB.Write(DatItem.SourceKey, (Source)source.Clone());
romB.Source = (Source)source.Clone();
List<DatItem> datItems = [romA, romB];
@@ -2031,14 +2031,14 @@ namespace SabreTools.Metadata.DatFiles.Test
romA.Write(Data.Models.Metadata.Rom.SizeKey, 12345);
romA.Write(Data.Models.Metadata.Rom.CRCKey, "crc");
romA.Machine = (Machine)machine.Clone();
romA.Write(DatItem.SourceKey, (Source)source.Clone());
romA.Source = (Source)source.Clone();
Rom romB = new Rom();
romB.SetName("rom");
romB.Write(Data.Models.Metadata.Rom.SizeKey, 12345);
romB.Write(Data.Models.Metadata.Rom.CRCKey, "crc");
romB.Machine = (Machine)machine.Clone();
romB.Write(DatItem.SourceKey, (Source)source.Clone());
romB.Source = (Source)source.Clone();
List<DatItem> datItems = [romA, romB];
@@ -2066,14 +2066,14 @@ namespace SabreTools.Metadata.DatFiles.Test
romA.Write(Data.Models.Metadata.Rom.SizeKey, 12345);
romA.Write(Data.Models.Metadata.Rom.CRCKey, "crc");
romA.Machine = (Machine)machine.Clone();
romA.Write(DatItem.SourceKey, (Source)source.Clone());
romA.Source = (Source)source.Clone();
Rom romB = new Rom();
romB.SetName("rom");
romB.Write(Data.Models.Metadata.Rom.SizeKey, 23456);
romB.Write(Data.Models.Metadata.Rom.CRCKey, "crc2");
romB.Machine = (Machine)machine.Clone();
romB.Write(DatItem.SourceKey, (Source)source.Clone());
romB.Source = (Source)source.Clone();
List<DatItem> datItems = [romA, romB];
@@ -2123,7 +2123,7 @@ namespace SabreTools.Metadata.DatFiles.Test
romA.Write(Data.Models.Metadata.Rom.SizeKey, 12345);
romA.Write(Data.Models.Metadata.Rom.CRCKey, "crc");
romA.Machine = (Machine)machine.Clone();
romA.Write(DatItem.SourceKey, (Source)source.Clone());
romA.Source = (Source)source.Clone();
List<KeyValuePair<long, DatItem>> mappings =
[
@@ -2153,14 +2153,14 @@ namespace SabreTools.Metadata.DatFiles.Test
romA.Write(Data.Models.Metadata.Rom.SizeKey, 12345);
romA.Write(Data.Models.Metadata.Rom.CRCKey, "crc");
romA.Machine = (Machine)machine.Clone();
romA.Write(DatItem.SourceKey, (Source)source.Clone());
romA.Source = (Source)source.Clone();
Rom romB = new Rom();
romB.SetName("romB");
romB.Write(Data.Models.Metadata.Rom.SizeKey, 23456);
romB.Write(Data.Models.Metadata.Rom.CRCKey, "crc2");
romB.Machine = (Machine)machine.Clone();
romB.Write(DatItem.SourceKey, (Source)source.Clone());
romB.Source = (Source)source.Clone();
List<KeyValuePair<long, DatItem>> mappings =
[
@@ -2237,14 +2237,14 @@ namespace SabreTools.Metadata.DatFiles.Test
romA.Write(Data.Models.Metadata.Rom.SizeKey, 12345);
romA.Write(Data.Models.Metadata.Rom.CRCKey, "crc");
romA.Machine = (Machine)machine.Clone();
romA.Write(DatItem.SourceKey, (Source)source.Clone());
romA.Source = (Source)source.Clone();
Rom romB = new Rom();
romB.SetName("rom");
romB.Write(Data.Models.Metadata.Rom.SizeKey, 23456);
romB.Write(Data.Models.Metadata.Rom.CRCKey, "crc2");
romB.Machine = (Machine)machine.Clone();
romB.Write(DatItem.SourceKey, (Source)source.Clone());
romB.Source = (Source)source.Clone();
List<KeyValuePair<long, DatItem>> mappings =
[

View File

@@ -19,7 +19,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem disk = new Disk();
disk.SetName("item");
disk.Write<string?>(Data.Models.Metadata.Disk.SHA1Key, "deadbeef");
disk.Write<Source?>(DatItem.SourceKey, source);
disk.Source = source;
disk.Machine = machine;
var dict = new ItemDictionary();
@@ -39,7 +39,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem disk = new Disk();
disk.SetName("item");
disk.Write<Source?>(DatItem.SourceKey, source);
disk.Source = source;
disk.Machine = machine;
var dict = new ItemDictionary();
@@ -60,7 +60,7 @@ namespace SabreTools.Metadata.DatFiles.Test
var file = new File();
file.SetName("item");
file.SHA1 = "deadbeef";
file.Write<Source?>(DatItem.SourceKey, source);
file.Source = source;
file.Machine = machine;
var dict = new ItemDictionary();
@@ -79,7 +79,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem file = new File();
file.SetName("item");
file.Write<Source?>(DatItem.SourceKey, source);
file.Source = source;
file.Machine = machine;
var dict = new ItemDictionary();
@@ -99,7 +99,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem media = new Media();
media.SetName("item");
media.Write<string?>(Data.Models.Metadata.Media.SHA1Key, "deadbeef");
media.Write<Source?>(DatItem.SourceKey, source);
media.Source = source;
media.Machine = machine;
var dict = new ItemDictionary();
@@ -118,7 +118,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem media = new Media();
media.SetName("item");
media.Write<Source?>(DatItem.SourceKey, source);
media.Source = source;
media.Machine = machine;
var dict = new ItemDictionary();
@@ -139,7 +139,7 @@ namespace SabreTools.Metadata.DatFiles.Test
rom.SetName("item");
rom.Write<long?>(Data.Models.Metadata.Rom.SizeKey, 12345);
rom.Write<string?>(Data.Models.Metadata.Rom.SHA1Key, "deadbeef");
rom.Write<Source?>(DatItem.SourceKey, source);
rom.Source = source;
rom.Machine = machine;
var dict = new ItemDictionary();
@@ -162,7 +162,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem rom = new Rom();
rom.SetName("item");
rom.Write<long?>(Data.Models.Metadata.Rom.SizeKey, 12345);
rom.Write<Source?>(DatItem.SourceKey, source);
rom.Source = source;
rom.Machine = machine;
var dict = new ItemDictionary();
@@ -185,7 +185,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem rom = new Rom();
rom.SetName("item");
rom.Write<string?>(Data.Models.Metadata.Rom.SHA1Key, "deadbeef");
rom.Write<Source?>(DatItem.SourceKey, source);
rom.Source = source;
rom.Machine = machine;
var dict = new ItemDictionary();
@@ -207,7 +207,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem rom = new Rom();
rom.SetName("item");
rom.Write<Source?>(DatItem.SourceKey, source);
rom.Source = source;
rom.Machine = machine;
var dict = new ItemDictionary();
@@ -229,7 +229,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem item = new Rom();
item.SetName("item");
item.Write<Source?>(DatItem.SourceKey, source);
item.Source = source;
item.Machine = machine;
var dict = new ItemDictionary();
@@ -246,7 +246,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem item = new Rom();
item.SetName("item");
item.Write<Source?>(DatItem.SourceKey, source);
item.Source = source;
item.Machine = machine;
var dict = new ItemDictionary();
@@ -305,7 +305,7 @@ namespace SabreTools.Metadata.DatFiles.Test
machine.Name = "machine";
DatItem item = new Rom();
item.Write<Source?>(DatItem.SourceKey, source);
item.Source = source;
item.Machine = machine;
var dict = new ItemDictionary();
@@ -325,7 +325,7 @@ namespace SabreTools.Metadata.DatFiles.Test
machine.Name = "machine";
DatItem item = new Rom();
item.Write<Source?>(DatItem.SourceKey, source);
item.Source = source;
item.Machine = machine;
var dict = new ItemDictionary();
@@ -346,7 +346,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem item = new Rom();
item.Write<bool?>(DatItem.RemoveKey, true);
item.Write<Source?>(DatItem.SourceKey, source);
item.Source = source;
item.Machine = machine;
var dict = new ItemDictionary();
@@ -367,7 +367,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatItem item = new Rom();
item.Write<bool?>(DatItem.RemoveKey, true);
item.Write<Source?>(DatItem.SourceKey, source);
item.Source = source;
item.Machine = machine;
var dict = new ItemDictionary();
@@ -387,7 +387,7 @@ namespace SabreTools.Metadata.DatFiles.Test
machine.Name = "machine";
DatItem item = new Rom();
item.Write<Source?>(DatItem.SourceKey, source);
item.Source = source;
item.Machine = machine;
var dict = new ItemDictionary();
@@ -577,13 +577,13 @@ namespace SabreTools.Metadata.DatFiles.Test
var romA = new Rom();
romA.Name = "same-name";
romA.Write(Data.Models.Metadata.Rom.CRCKey, "BEEFDEAD");
romA.Write<Source?>(DatItem.SourceKey, new Source(0));
romA.Source = new Source(0);
romA.CopyMachineInformation(machineA);
var romB = new Rom();
romB.Name = "same-name";
romB.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF");
romB.Write<Source?>(DatItem.SourceKey, new Source(1));
romB.Source = new Source(1);
romB.CopyMachineInformation(machineB);
var actual = dict.GetDuplicateStatus(romA, romB);
@@ -604,13 +604,13 @@ namespace SabreTools.Metadata.DatFiles.Test
var romA = new Rom();
romA.Name = "same-name";
romA.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF");
romA.Write<Source?>(DatItem.SourceKey, new Source(0));
romA.Source = new Source(0);
romA.CopyMachineInformation(machineA);
var romB = new Rom();
romB.Name = "same-name";
romB.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF");
romB.Write<Source?>(DatItem.SourceKey, new Source(1));
romB.Source = new Source(1);
romB.CopyMachineInformation(machineB);
var actual = dict.GetDuplicateStatus(romA, romB);
@@ -631,13 +631,13 @@ namespace SabreTools.Metadata.DatFiles.Test
var romA = new Rom();
romA.Name = "same-name";
romA.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF");
romA.Write<Source?>(DatItem.SourceKey, new Source(0));
romA.Source = new Source(0);
romA.CopyMachineInformation(machineA);
var romB = new Rom();
romB.Name = "same-name";
romB.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF");
romB.Write<Source?>(DatItem.SourceKey, new Source(1));
romB.Source = new Source(1);
romB.CopyMachineInformation(machineB);
var actual = dict.GetDuplicateStatus(romA, romB);
@@ -658,13 +658,13 @@ namespace SabreTools.Metadata.DatFiles.Test
var romA = new Rom();
romA.Name = "same-name";
romA.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF");
romA.Write<Source?>(DatItem.SourceKey, new Source(0));
romA.Source = new Source(0);
romA.CopyMachineInformation(machineA);
var romB = new Rom();
romB.Name = "same-name";
romB.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF");
romB.Write<Source?>(DatItem.SourceKey, new Source(0));
romB.Source = new Source(0);
romB.CopyMachineInformation(machineB);
var actual = dict.GetDuplicateStatus(romA, romB);
@@ -685,13 +685,13 @@ namespace SabreTools.Metadata.DatFiles.Test
var romA = new Rom();
romA.Name = "same-name";
romA.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF");
romA.Write<Source?>(DatItem.SourceKey, new Source(0));
romA.Source = new Source(0);
romA.CopyMachineInformation(machineA);
var romB = new Rom();
romB.Name = "same-name";
romB.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF");
romB.Write<Source?>(DatItem.SourceKey, new Source(0));
romB.Source = new Source(0);
romB.CopyMachineInformation(machineB);
var actual = dict.GetDuplicateStatus(romA, romB);
@@ -796,7 +796,7 @@ namespace SabreTools.Metadata.DatFiles.Test
item.SetName("rom");
item.Write<long?>(Data.Models.Metadata.Rom.SizeKey, 12345);
item.Write<string?>(Data.Models.Metadata.Rom.CRCKey, "deadbeef");
item.Write<Source?>(DatItem.SourceKey, source);
item.Source = source;
item.Machine = machine;
var dict = new ItemDictionary();

View File

@@ -480,7 +480,7 @@ namespace SabreTools.Metadata.DatFiles
Array.ForEach(filtered, item =>
{
var datItem = new Rom(item, machine, source);
datItem.Write<Source?>(DatItem.SourceKey, source);
datItem.Source = source;
datItem.CopyMachineInformation(machine);
AddItem(datItem, statsOnly);
@@ -692,7 +692,7 @@ namespace SabreTools.Metadata.DatFiles
var partFeatureItem = new PartFeature(partFeature);
partFeatureItem.Write<Part?>(DipSwitch.PartKey, partItem);
partFeatureItem.Write<Source?>(DatItem.SourceKey, source);
partFeatureItem.Source = source;
partFeatureItem.CopyMachineInformation(machine);
AddItem(partFeatureItem, statsOnly);

View File

@@ -1169,8 +1169,8 @@ namespace SabreTools.Metadata.DatFiles
// Compare on source if renaming
if (!norename)
{
int xSourceIndex = x.Read<Source?>(DatItem.SourceKey)?.Index ?? 0;
int ySourceIndex = y.Read<Source?>(DatItem.SourceKey)?.Index ?? 0;
int xSourceIndex = x.Source?.Index ?? 0;
int ySourceIndex = y.Source?.Index ?? 0;
if (xSourceIndex != ySourceIndex)
return xSourceIndex - ySourceIndex;
}

View File

@@ -406,7 +406,7 @@ namespace SabreTools.Metadata.DatFiles.Formats
return;
datItem.CopyMachineInformation(machine);
datItem.Write<Source?>(DatItem.SourceKey, source);
datItem.Source = source;
AddItem(datItem, statsOnly);
AddItemDB(datItem, machineIndex, sourceIndex, statsOnly);
}

View File

@@ -223,7 +223,7 @@ namespace SabreTools.Metadata.DatFiles.Formats
}
item.CopyMachineInformation(machine);
item.Write<Source?>(DatItem.SourceKey, source);
item.Source = source;
AddItem(item, statsOnly);
// AddItemDB(item, machineIndex, sourceIndex, statsOnly);
}

View File

@@ -433,8 +433,8 @@ namespace SabreTools.Metadata.DatFiles
return output;
// Get the sources for comparison
var selfSource = self.Read<Source?>(DatItem.SourceKey);
var lastSource = last.Read<Source?>(DatItem.SourceKey);
var selfSource = self.Source;
var lastSource = last.Source;
// Get the machines for comparison
var selfMachine = self.Machine;
@@ -542,8 +542,8 @@ namespace SabreTools.Metadata.DatFiles
savedItem.Write(DatItem.DupeTypeKey, dupetype);
// Get the sources associated with the items
var savedSource = savedItem.Read<Source?>(DatItem.SourceKey);
var itemSource = datItem.Read<Source?>(DatItem.SourceKey);
var savedSource = savedItem.Source;
var itemSource = datItem.Source;
// Get the machines associated with the items
var savedMachine = savedItem.Machine;
@@ -552,7 +552,7 @@ namespace SabreTools.Metadata.DatFiles
// If the current source has a lower ID than the saved, use the saved source
if (itemSource?.Index < savedSource?.Index)
{
datItem.Write<Source?>(DatItem.SourceKey, savedSource.Clone() as Source);
datItem.Source = savedSource.Clone() as Source;
savedItem.CopyMachineInformation(datItem);
savedItem.SetName(datItem.GetName());
}
@@ -733,7 +733,7 @@ namespace SabreTools.Metadata.DatFiles
// Get the machine and source
var machine = datItem.Machine;
var source = datItem.Read<Source?>(DatItem.SourceKey);
var source = datItem.Source;
// Get the bucket key
return datItem.GetKey(bucketBy, machine, source, lower, norename);
@@ -772,7 +772,7 @@ namespace SabreTools.Metadata.DatFiles
// Get the machine and source
var machine = item.Machine;
var source = item.Read<Source?>(DatItem.SourceKey);
var source = item.Source;
// We want to get the key most appropriate for the given sorting type
string newkey = item.GetKey(bucketBy, machine, source, lower, norename);
@@ -845,8 +845,8 @@ namespace SabreTools.Metadata.DatFiles
// Compare on source if renaming
if (!norename)
{
int xSourceIndex = x.Read<Source?>(DatItem.SourceKey)?.Index ?? 0;
int ySourceIndex = y.Read<Source?>(DatItem.SourceKey)?.Index ?? 0;
int xSourceIndex = x.Source?.Index ?? 0;
int ySourceIndex = y.Source?.Index ?? 0;
if (xSourceIndex != ySourceIndex)
return xSourceIndex - ySourceIndex;
}

View File

@@ -34,7 +34,7 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
disk.Machine = machine;
disk.Write(Disk.PartKey, part);
disk.Write(DatItem.RemoveKey, (bool?)false);
disk.Write(DatItem.SourceKey, source);
disk.Source = source;
Rom actual = disk.ConvertToRom();
@@ -61,7 +61,7 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
Assert.NotNull(actualPart);
Assert.Equal("name", actualPart.Name);
Source? actualSource = actual.Read<Source?>(DatItem.SourceKey);
Source? actualSource = actual.Source;
Assert.NotNull(actualSource);
Assert.Equal(0, actualSource.Index);
Assert.Equal("XXXXXX", actualSource.Name);

View File

@@ -29,9 +29,9 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
file.Write(DatItem.DupeTypeKey, DupeType.All | DupeType.External);
file.Machine = machine;
file.Write(DatItem.RemoveKey, (bool?)false);
file.Write(DatItem.SourceKey, source);
file.Source = source;
file.Machine = machine;
file.Write(DatItem.SourceKey, source);
file.Source = source;
Rom actual = file.ConvertToRom();
@@ -49,7 +49,7 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
Assert.Equal(false, actual.ReadBool(DatItem.RemoveKey));
Source? actualSource = actual.Read<Source?>(DatItem.SourceKey);
Source? actualSource = actual.Source;
Assert.NotNull(actualSource);
Assert.Equal(0, actualSource.Index);
Assert.Equal("XXXXXX", actualSource.Name);

View File

@@ -24,7 +24,7 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
media.Write(DatItem.DupeTypeKey, DupeType.All | DupeType.External);
media.Machine = machine;
media.Write(DatItem.RemoveKey, (bool?)false);
media.Write(DatItem.SourceKey, source);
media.Source = source;
Rom actual = media.ConvertToRom();
@@ -41,7 +41,7 @@ namespace SabreTools.Metadata.DatItems.Formats.Test
Assert.Equal(false, actual.ReadBool(DatItem.RemoveKey));
Source? actualSource = actual.Read<Source?>(DatItem.SourceKey);
Source? actualSource = actual.Source;
Assert.NotNull(actualSource);
Assert.Equal(0, actualSource.Index);
Assert.Equal("XXXXXX", actualSource.Name);

View File

@@ -68,11 +68,6 @@ namespace SabreTools.Metadata.DatItems
/// </summary>
public const string RemoveKey = "REMOVE";
/// <summary>
/// Source information
/// </summary>
public const string SourceKey = "SOURCE";
#endregion
#region Fields
@@ -87,6 +82,11 @@ namespace SabreTools.Metadata.DatItems
/// </summary>
public Machine? Machine { get; set; }
/// <summary>
/// Source information
/// </summary>
public Source? Source { get; set; }
#endregion
#region Logging
@@ -199,12 +199,6 @@ namespace SabreTools.Metadata.DatItems
if (other is not DatItem otherItem)
return false;
// Compare machines
if ((Machine is null) ^ (otherItem.Machine is null))
return false;
if (Machine is not null && !Machine.Equals(otherItem.Machine))
return false;
// Compare internal models
return _internal.Equals(otherItem);
}
@@ -220,18 +214,8 @@ namespace SabreTools.Metadata.DatItems
if (other is null)
return false;
// Get the types for comparison
Data.Models.Metadata.ItemType selfType = ItemType;
Data.Models.Metadata.ItemType otherType = other.ItemType;
// If we don't have a matched type, return false
if (selfType != otherType)
return false;
// Compare machines
if ((Machine is null) ^ (other.Machine is null))
return false;
if (Machine is not null && !Machine.Equals(other.Machine))
if (ItemType != other.ItemType)
return false;
// Compare the internal models

View File

@@ -50,7 +50,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Adjuster(Data.Models.Metadata.Adjuster item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -28,7 +28,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Analog(Data.Models.Metadata.Analog item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -28,7 +28,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Archive(Data.Models.Metadata.Archive item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -40,7 +40,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public BiosSet(Data.Models.Metadata.BiosSet item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -18,7 +18,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Blank(Data.Models.Metadata.Blank item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -46,7 +46,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Chip(Data.Models.Metadata.Chip item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -46,7 +46,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Condition(Data.Models.Metadata.Condition item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -34,7 +34,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public ConfLocation(Data.Models.Metadata.ConfLocation item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -56,7 +56,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public ConfSetting(Data.Models.Metadata.ConfSetting item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -91,7 +91,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Configuration(Data.Models.Metadata.Configuration item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -64,7 +64,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Control(Data.Models.Metadata.Control item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -45,7 +45,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public DataArea(Data.Models.Metadata.DataArea item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -86,7 +86,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Device(Data.Models.Metadata.Device item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -28,7 +28,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public DeviceRef(Data.Models.Metadata.DeviceRef item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -34,7 +34,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public DipLocation(Data.Models.Metadata.DipLocation item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -119,7 +119,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public DipSwitch(Data.Models.Metadata.DipSwitch item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -56,7 +56,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public DipValue(Data.Models.Metadata.DipValue item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -100,7 +100,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Disk(Data.Models.Metadata.Disk item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}
@@ -133,7 +133,7 @@ namespace SabreTools.Metadata.DatItems.Formats
rom.Machine = Machine?.Clone() as Machine;
rom.Write(Rom.PartKey, Read<Part>(PartKey)?.Clone() as Part);
rom.Write(RemoveKey, ReadBool(RemoveKey));
rom.Write<Source?>(SourceKey, Read<Source?>(SourceKey)?.Clone() as Source);
rom.Source = Source?.Clone() as Source;
return rom;
}

View File

@@ -29,7 +29,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public DiskArea(Data.Models.Metadata.DiskArea item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -87,7 +87,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Display(Data.Models.Metadata.Display item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}
@@ -138,7 +138,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Display(Data.Models.Metadata.Video item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -94,7 +94,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Driver(Data.Models.Metadata.Driver item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -28,7 +28,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Extension(Data.Models.Metadata.Extension item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -52,7 +52,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Feature(Data.Models.Metadata.Feature item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -123,7 +123,7 @@ namespace SabreTools.Metadata.DatItems.Formats
file.Write(DupeTypeKey, Read<DupeType>(DupeTypeKey));
file.Machine = Machine!.Clone() as Machine ?? new Machine();
file.Write(RemoveKey, ReadBool(RemoveKey));
file.Write<Source?>(SourceKey, Read<Source?>(SourceKey));
file.Source = Source?.Clone() as Source;
return file;
}
@@ -146,7 +146,7 @@ namespace SabreTools.Metadata.DatItems.Formats
rom.Write(DupeTypeKey, Read<DupeType>(DupeTypeKey));
rom.Machine = Machine?.Clone() as Machine;
rom.Write(RemoveKey, ReadBool(RemoveKey));
rom.Write<Source?>(SourceKey, Read<Source?>(SourceKey));
rom.Source = Source?.Clone() as Source;
return rom;
}

View File

@@ -34,7 +34,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Info(Data.Models.Metadata.Info item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -67,7 +67,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Input(Data.Models.Metadata.Input item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -34,7 +34,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Instance(Data.Models.Metadata.Instance item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -48,7 +48,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Media(Data.Models.Metadata.Media item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}
@@ -70,7 +70,7 @@ namespace SabreTools.Metadata.DatItems.Formats
rom.Write(DupeTypeKey, Read<DupeType>(DupeTypeKey));
rom.Machine = Machine?.Clone() as Machine;
rom.Write(RemoveKey, ReadBool(RemoveKey));
rom.Write<Source?>(SourceKey, Read<Source?>(SourceKey));
rom.Source = Source?.Clone() as Source;
return rom;
}

View File

@@ -45,7 +45,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Part(Data.Models.Metadata.Part item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -65,7 +65,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public PartFeature(Data.Models.Metadata.Feature item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -48,7 +48,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Port(Data.Models.Metadata.Port item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -40,7 +40,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public RamOption(Data.Models.Metadata.RamOption item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -34,7 +34,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Release(Data.Models.Metadata.Release item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -18,7 +18,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public ReleaseDetails(Data.Models.Metadata.ReleaseDetails item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}
#endregion

View File

@@ -175,7 +175,7 @@ namespace SabreTools.Metadata.DatItems.Formats
Write<string?>(Data.Models.Metadata.Rom.RemarkKey, rom.ReadString(Data.Models.Metadata.Rom.RemarkKey));
Write<string?>(Data.Models.Metadata.Rom.SHA1Key, rom.ReadString(Data.Models.Metadata.Rom.SHA1Key));
Write<string?>(Data.Models.Metadata.Rom.StartKey, rom.ReadString(Data.Models.Metadata.Rom.StartKey));
Write<Source?>(SourceKey, source);
Source = source;
var original = item.Read<Data.Models.Metadata.Original>(Dump.OriginalKey);
if (original is not null)
@@ -307,7 +307,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Rom(Data.Models.Metadata.Rom item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -28,7 +28,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Sample(Data.Models.Metadata.Sample item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -18,7 +18,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Serials(Data.Models.Metadata.Serials item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -34,7 +34,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public SharedFeat(Data.Models.Metadata.SharedFeat item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -48,7 +48,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Slot(Data.Models.Metadata.Slot item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -40,7 +40,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public SlotOption(Data.Models.Metadata.SlotOption item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -50,7 +50,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public SoftwareList(Data.Models.Metadata.SoftwareList item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -24,7 +24,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Sound(Data.Models.Metadata.Sound item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -18,7 +18,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public SourceDetails(Data.Models.Metadata.SourceDetails item, Machine machine, Source source) : this(item)
{
Write<Source?>(SourceKey, source);
Source = source;
CopyMachineInformation(machine);
}

View File

@@ -193,6 +193,32 @@ namespace SabreTools.Metadata.DatItems
if (other is null)
return false;
// Properties
if ((Description is null) ^ (other.Description is null))
return false;
if (Description is not null && !Description.Equals(other.Description, StringComparison.OrdinalIgnoreCase))
return false;
if (IsBios != other.IsBios)
return false;
if (IsDevice != other.IsDevice)
return false;
if (IsMechanical != other.IsMechanical)
return false;
if ((Name is null) ^ (other.Name is null))
return false;
if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase))
return false;
if (Runnable != other.Runnable)
return false;
if (Supported != other.Supported)
return false;
// Compare internal models
return _internal.EqualTo(other._internal);
}

View File

@@ -13,6 +13,7 @@ namespace SabreTools.Metadata
/// <summary>
/// Check equality of two DictionaryBase objects
/// </summary>
/// TODO: Fix equality checking with case sensitivity of string properties
public static bool EqualTo(this DictionaryBase self, DictionaryBase other)
{
// Check types first
@@ -59,6 +60,279 @@ namespace SabreTools.Metadata
if (self.GetName() != other.GetName())
return false;
// Handle individual type properties
if (self is Adjuster selfAdjuster && other is Adjuster cloneAdjuster)
{
if (selfAdjuster.Default != cloneAdjuster.Default)
return false;
}
else if (self is Analog selfAnalog && other is Analog cloneAnalog)
{
if (selfAnalog.Mask != cloneAnalog.Mask)
return false;
}
else if (self is Archive selfArchive && other is Archive cloneArchive)
{
if (selfArchive.Description != cloneArchive.Description)
return false;
}
else if (self is BiosSet selfBiosSet && other is BiosSet cloneBiosSet)
{
if (selfBiosSet.Default != cloneBiosSet.Default)
return false;
if (selfBiosSet.Description != cloneBiosSet.Description)
return false;
}
else if (self is Chip selfChip && other is Chip cloneChip)
{
if (selfChip.ChipType != cloneChip.ChipType)
return false;
if (selfChip.SoundOnly != cloneChip.SoundOnly)
return false;
if (selfChip.Tag != cloneChip.Tag)
return false;
}
else if (self is Condition selfCondition && other is Condition cloneCondition)
{
if (selfCondition.Mask != cloneCondition.Mask)
return false;
if (selfCondition.Relation != cloneCondition.Relation)
return false;
if (selfCondition.Tag != cloneCondition.Tag)
return false;
if (selfCondition.Value != cloneCondition.Value)
return false;
}
else if (self is Configuration selfConfiguration && other is Configuration cloneConfiguration)
{
if (selfConfiguration.Mask != cloneConfiguration.Mask)
return false;
if (selfConfiguration.Tag != cloneConfiguration.Tag)
return false;
}
else if (self is ConfLocation selfConfLocation && other is ConfLocation cloneConfLocation)
{
if (selfConfLocation.Inverted != cloneConfLocation.Inverted)
return false;
}
else if (self is ConfSetting selfConfSetting && other is ConfSetting cloneConfSetting)
{
if (selfConfSetting.Default != cloneConfSetting.Default)
return false;
if (selfConfSetting.Value != cloneConfSetting.Value)
return false;
}
else if (self is Control selfControl && other is Control cloneControl)
{
if (selfControl.ControlType != cloneControl.ControlType)
return false;
if (selfControl.Reverse != cloneControl.Reverse)
return false;
}
else if (self is DataArea selfDataArea && other is DataArea cloneDataArea)
{
if (selfDataArea.Endianness != cloneDataArea.Endianness)
return false;
}
else if (self is Device selfDevice && other is Device cloneDevice)
{
if (selfDevice.DeviceType != cloneDevice.DeviceType)
return false;
if (selfDevice.FixedImage != cloneDevice.FixedImage)
return false;
if (selfDevice.Interface != cloneDevice.Interface)
return false;
if (selfDevice.Mandatory != cloneDevice.Mandatory)
return false;
if (selfDevice.Tag != cloneDevice.Tag)
return false;
}
else if (self is DipLocation selfDipLocation && other is DipLocation cloneDipLocation)
{
if (selfDipLocation.Inverted != cloneDipLocation.Inverted)
return false;
}
else if (self is DipSwitch selfDipSwitch && other is DipSwitch cloneDipSwitch)
{
if (selfDipSwitch.Default != cloneDipSwitch.Default)
return false;
if (selfDipSwitch.Mask != cloneDipSwitch.Mask)
return false;
if (selfDipSwitch.Tag != cloneDipSwitch.Tag)
return false;
}
else if (self is DipValue selfDipValue && other is DipValue cloneDipValue)
{
if (selfDipValue.Default != cloneDipValue.Default)
return false;
if (selfDipValue.Value != cloneDipValue.Value)
return false;
}
else if (self is Display selfDisplay && other is Display cloneDisplay)
{
if (selfDisplay.DisplayType != cloneDisplay.DisplayType)
return false;
if (selfDisplay.FlipX != cloneDisplay.FlipX)
return false;
if (selfDisplay.Tag != cloneDisplay.Tag)
return false;
}
else if (self is Driver selfDriver && other is Driver cloneDriver)
{
if (selfDriver.Blit != cloneDriver.Blit)
return false;
if (selfDriver.Cocktail != cloneDriver.Cocktail)
return false;
if (selfDriver.Color != cloneDriver.Color)
return false;
if (selfDriver.Emulation != cloneDriver.Emulation)
return false;
if (selfDriver.Incomplete != cloneDriver.Incomplete)
return false;
if (selfDriver.NoSoundHardware != cloneDriver.NoSoundHardware)
return false;
if (selfDriver.RequiresArtwork != cloneDriver.RequiresArtwork)
return false;
if (selfDriver.SaveState != cloneDriver.SaveState)
return false;
if (selfDriver.Sound != cloneDriver.Sound)
return false;
if (selfDriver.Status != cloneDriver.Status)
return false;
if (selfDriver.Unofficial != cloneDriver.Unofficial)
return false;
}
else if (self is Feature selfFeature && other is Feature cloneFeature)
{
if (selfFeature.FeatureType != cloneFeature.FeatureType)
return false;
if (selfFeature.Overall != cloneFeature.Overall)
return false;
if (selfFeature.Status != cloneFeature.Status)
return false;
if (selfFeature.Value != cloneFeature.Value)
return false;
}
else if (self is Header selfHeader && other is Header cloneHeader)
{
if (selfHeader.BiosMode != cloneHeader.BiosMode)
return false;
if (selfHeader.Debug != cloneHeader.Debug)
return false;
if (selfHeader.Description != cloneHeader.Description)
return false;
if (selfHeader.ForceMerging != cloneHeader.ForceMerging)
return false;
if (selfHeader.ForceNodump != cloneHeader.ForceNodump)
return false;
if (selfHeader.ForcePacking != cloneHeader.ForcePacking)
return false;
if (selfHeader.ForceZipping != cloneHeader.ForceZipping)
return false;
if (selfHeader.LockBiosMode != cloneHeader.LockBiosMode)
return false;
if (selfHeader.LockRomMode != cloneHeader.LockRomMode)
return false;
if (selfHeader.LockSampleMode != cloneHeader.LockSampleMode)
return false;
if (selfHeader.RomMode != cloneHeader.RomMode)
return false;
if (selfHeader.SampleMode != cloneHeader.SampleMode)
return false;
}
else if (self is Info selfInfo && other is Info cloneInfo)
{
if (selfInfo.Value != cloneInfo.Value)
return false;
}
else if (self is Input selfInput && other is Input cloneInput)
{
if (selfInput.Service != cloneInput.Service)
return false;
if (selfInput.Tilt != cloneInput.Tilt)
return false;
}
else if (self is Instance selfInstance && other is Instance cloneInstance)
{
if (selfInstance.BriefName != cloneInstance.BriefName)
return false;
}
else if (self is Machine selfMachine && other is Machine cloneMachine)
{
if (selfMachine.Description != cloneMachine.Description)
return false;
if (selfMachine.IsBios != cloneMachine.IsBios)
return false;
if (selfMachine.IsDevice != cloneMachine.IsDevice)
return false;
if (selfMachine.IsMechanical != cloneMachine.IsMechanical)
return false;
if (selfMachine.Runnable != cloneMachine.Runnable)
return false;
if (selfMachine.Supported != cloneMachine.Supported)
return false;
}
else if (self is Original selfOriginal && other is Original cloneOriginal)
{
if (selfOriginal.Content != cloneOriginal.Content)
return false;
}
else if (self is Part selfPart && other is Part clonePart)
{
if (selfPart.Interface != clonePart.Interface)
return false;
}
else if (self is Port selfPort && other is Port clonePort)
{
if (selfPort.Tag != clonePort.Tag)
return false;
}
else if (self is RamOption selfRamOption && other is RamOption cloneRamOption)
{
if (selfRamOption.Content != cloneRamOption.Content)
return false;
if (selfRamOption.Default != cloneRamOption.Default)
return false;
}
else if (self is Release selfRelease && other is Release cloneRelease)
{
if (selfRelease.Default != cloneRelease.Default)
return false;
}
else if (self is SharedFeat selfSharedFeat && other is SharedFeat cloneSharedFeat)
{
if (selfSharedFeat.Value != cloneSharedFeat.Value)
return false;
}
else if (self is SlotOption selfSlotOption && other is SlotOption cloneSlotOption)
{
if (selfSlotOption.Default != cloneSlotOption.Default)
return false;
if (selfSlotOption.DevName != cloneSlotOption.DevName)
return false;
}
else if (self is Software selfSoftware && other is Software cloneSoftware)
{
if (selfSoftware.Description != cloneSoftware.Description)
return false;
if (selfSoftware.Supported != cloneSoftware.Supported)
return false;
}
else if (self is SoftwareList selfSoftwareList && other is SoftwareList cloneSoftwareList)
{
if (selfSoftwareList.Description != cloneSoftwareList.Description)
return false;
if (selfSoftwareList.Status != cloneSoftwareList.Status)
return false;
if (selfSoftwareList.Tag != cloneSoftwareList.Tag)
return false;
}
else if (self is Video selfVideo && other is Video cloneVideo)
{
if (selfVideo.Screen != cloneVideo.Screen)
return false;
}
// Check all pairs to see if they're equal
foreach (var kvp in self)
{