diff --git a/SabreTools.Core/DictionaryBaseExtensions.cs b/SabreTools.Core/DictionaryBaseExtensions.cs
index ea4775da..319c52bc 100644
--- a/SabreTools.Core/DictionaryBaseExtensions.cs
+++ b/SabreTools.Core/DictionaryBaseExtensions.cs
@@ -799,6 +799,26 @@ namespace SabreTools.Core
#endregion
+ #region Reading
+
+ ///
+ /// Read an item array from a given key, if possible
+ ///
+ public static T[]? ReadItemArray(this DictionaryBase self, string key) where T : DictionaryBase
+ {
+ var items = self.Read(key);
+ if (items == default)
+ {
+ var single = self.Read(key);
+ if (single != default)
+ items = [single];
+ }
+
+ return items;
+ }
+
+ #endregion
+
#region Suffix Generation
///
diff --git a/SabreTools.DatFiles.Test/DatFileTests.FromMetadata.cs b/SabreTools.DatFiles.Test/DatFileTests.FromMetadata.cs
index 32bd3add..1506093e 100644
--- a/SabreTools.DatFiles.Test/DatFileTests.FromMetadata.cs
+++ b/SabreTools.DatFiles.Test/DatFileTests.FromMetadata.cs
@@ -37,7 +37,7 @@ namespace SabreTools.DatFiles.Test
[Fact]
public void ConvertFromMetadata_FilledHeader()
{
- Models.Metadata.Header? header = CreateHeader();
+ Models.Metadata.Header? header = CreateMetadataHeader();
Models.Metadata.Machine[]? machines = null;
Models.Metadata.MetadataFile? item = new Models.Metadata.MetadataFile
{
@@ -55,7 +55,7 @@ namespace SabreTools.DatFiles.Test
public void ConvertFromMetadata_FilledMachine()
{
Models.Metadata.Header? header = null;
- Models.Metadata.Machine machine = CreateMachine();
+ Models.Metadata.Machine machine = CreateMetadataMachine();
Models.Metadata.Machine[]? machines = [machine];
Models.Metadata.MetadataFile? item = new Models.Metadata.MetadataFile
{
@@ -184,7 +184,7 @@ namespace SabreTools.DatFiles.Test
#region Creation Helpers
- private static Models.Metadata.Header CreateHeader()
+ private static Models.Metadata.Header CreateMetadataHeader()
{
Models.OfflineList.CanOpen canOpen = new Models.OfflineList.CanOpen
{
@@ -248,101 +248,101 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Machine CreateMachine()
+ private static Models.Metadata.Machine CreateMetadataMachine()
{
return new Models.Metadata.Machine
{
- [Models.Metadata.Machine.AdjusterKey] = new Models.Metadata.Adjuster[] { CreateAdjuster() },
- [Models.Metadata.Machine.ArchiveKey] = new Models.Metadata.Archive[] { CreateArchive() },
- [Models.Metadata.Machine.BiosSetKey] = new Models.Metadata.BiosSet[] { CreateBiosSet() },
+ [Models.Metadata.Machine.AdjusterKey] = new Models.Metadata.Adjuster[] { CreateMetadataAdjuster() },
+ [Models.Metadata.Machine.ArchiveKey] = new Models.Metadata.Archive[] { CreateMetadataArchive() },
+ [Models.Metadata.Machine.BiosSetKey] = new Models.Metadata.BiosSet[] { CreateMetadataBiosSet() },
[Models.Metadata.Machine.BoardKey] = "board",
[Models.Metadata.Machine.ButtonsKey] = "buttons",
[Models.Metadata.Machine.CategoryKey] = "category",
- [Models.Metadata.Machine.ChipKey] = new Models.Metadata.Chip[] { CreateChip() },
+ [Models.Metadata.Machine.ChipKey] = new Models.Metadata.Chip[] { CreateMetadataChip() },
[Models.Metadata.Machine.CloneOfKey] = "cloneof",
[Models.Metadata.Machine.CloneOfIdKey] = "cloneofid",
[Models.Metadata.Machine.CommentKey] = "comment",
[Models.Metadata.Machine.CompanyKey] = "company",
- [Models.Metadata.Machine.ConfigurationKey] = new Models.Metadata.Configuration[] { CreateConfiguration() },
+ [Models.Metadata.Machine.ConfigurationKey] = new Models.Metadata.Configuration[] { CreateMetadataConfiguration() },
[Models.Metadata.Machine.ControlKey] = "control",
[Models.Metadata.Machine.CountryKey] = "country",
[Models.Metadata.Machine.DescriptionKey] = "description",
- [Models.Metadata.Machine.DeviceKey] = new Models.Metadata.Device[] { CreateDevice() },
- [Models.Metadata.Machine.DeviceRefKey] = new Models.Metadata.DeviceRef[] { CreateDeviceRef() },
- [Models.Metadata.Machine.DipSwitchKey] = new Models.Metadata.DipSwitch[] { CreateDipSwitch() },
+ [Models.Metadata.Machine.DeviceKey] = new Models.Metadata.Device[] { CreateMetadataDevice() },
+ [Models.Metadata.Machine.DeviceRefKey] = new Models.Metadata.DeviceRef[] { CreateMetadataDeviceRef() },
+ [Models.Metadata.Machine.DipSwitchKey] = new Models.Metadata.DipSwitch[] { CreateMetadataDipSwitch() },
[Models.Metadata.Machine.DirNameKey] = "dirname",
- [Models.Metadata.Machine.DiskKey] = new Models.Metadata.Disk[] { CreateDisk() },
+ [Models.Metadata.Machine.DiskKey] = new Models.Metadata.Disk[] { CreateMetadataDisk() },
[Models.Metadata.Machine.DisplayCountKey] = "displaycount",
- [Models.Metadata.Machine.DisplayKey] = new Models.Metadata.Display[] { CreateDisplay() },
+ [Models.Metadata.Machine.DisplayKey] = new Models.Metadata.Display[] { CreateMetadataDisplay() },
[Models.Metadata.Machine.DisplayTypeKey] = "displaytype",
- [Models.Metadata.Machine.DriverKey] = CreateDriver(),
- [Models.Metadata.Machine.DumpKey] = new Models.Metadata.Dump[] { CreateDump() },
+ [Models.Metadata.Machine.DriverKey] = CreateMetadataDriver(),
+ [Models.Metadata.Machine.DumpKey] = new Models.Metadata.Dump[] { CreateMetadataDump() },
[Models.Metadata.Machine.DuplicateIDKey] = "duplicateid",
[Models.Metadata.Machine.EmulatorKey] = "emulator",
[Models.Metadata.Machine.ExtraKey] = "extra",
[Models.Metadata.Machine.FavoriteKey] = "favorite",
- [Models.Metadata.Machine.FeatureKey] = new Models.Metadata.Feature[] { CreateFeature() },
+ [Models.Metadata.Machine.FeatureKey] = new Models.Metadata.Feature[] { CreateMetadataFeature() },
[Models.Metadata.Machine.GenMSXIDKey] = "genmsxid",
[Models.Metadata.Machine.HistoryKey] = "history",
[Models.Metadata.Machine.IdKey] = "id",
[Models.Metadata.Machine.Im1CRCKey] = ZeroHash.CRC32Str,
[Models.Metadata.Machine.Im2CRCKey] = ZeroHash.CRC32Str,
[Models.Metadata.Machine.ImageNumberKey] = "imagenumber",
- [Models.Metadata.Machine.InfoKey] = new Models.Metadata.Info[] { CreateInfo() },
- [Models.Metadata.Machine.InputKey] = CreateInput(),
+ [Models.Metadata.Machine.InfoKey] = new Models.Metadata.Info[] { CreateMetadataInfo() },
+ [Models.Metadata.Machine.InputKey] = CreateMetadataInput(),
[Models.Metadata.Machine.IsBiosKey] = "yes",
[Models.Metadata.Machine.IsDeviceKey] = "yes",
[Models.Metadata.Machine.IsMechanicalKey] = "yes",
[Models.Metadata.Machine.LanguageKey] = "language",
[Models.Metadata.Machine.LocationKey] = "location",
[Models.Metadata.Machine.ManufacturerKey] = "manufacturer",
- [Models.Metadata.Machine.MediaKey] = new Models.Metadata.Media[] { CreateMedia() },
+ [Models.Metadata.Machine.MediaKey] = new Models.Metadata.Media[] { CreateMetadataMedia() },
[Models.Metadata.Machine.NameKey] = "name",
[Models.Metadata.Machine.NotesKey] = "notes",
- [Models.Metadata.Machine.PartKey] = new Models.Metadata.Part[] { CreatePart() },
+ [Models.Metadata.Machine.PartKey] = new Models.Metadata.Part[] { CreateMetadataPart() },
[Models.Metadata.Machine.PlayedCountKey] = "playedcount",
[Models.Metadata.Machine.PlayedTimeKey] = "playedtime",
[Models.Metadata.Machine.PlayersKey] = "players",
- [Models.Metadata.Machine.PortKey] = new Models.Metadata.Port[] { CreatePort() },
+ [Models.Metadata.Machine.PortKey] = new Models.Metadata.Port[] { CreateMetadataPort() },
[Models.Metadata.Machine.PublisherKey] = "publisher",
- [Models.Metadata.Machine.RamOptionKey] = new Models.Metadata.RamOption[] { CreateRamOption() },
+ [Models.Metadata.Machine.RamOptionKey] = new Models.Metadata.RamOption[] { CreateMetadataRamOption() },
[Models.Metadata.Machine.RebuildToKey] = "rebuildto",
- [Models.Metadata.Machine.ReleaseKey] = new Models.Metadata.Release[] { CreateRelease() },
+ [Models.Metadata.Machine.ReleaseKey] = new Models.Metadata.Release[] { CreateMetadataRelease() },
[Models.Metadata.Machine.ReleaseNumberKey] = "releasenumber",
- [Models.Metadata.Machine.RomKey] = new Models.Metadata.Rom[] { CreateRom() },
+ [Models.Metadata.Machine.RomKey] = new Models.Metadata.Rom[] { CreateMetadataRom() },
[Models.Metadata.Machine.RomOfKey] = "romof",
[Models.Metadata.Machine.RotationKey] = "rotation",
[Models.Metadata.Machine.RunnableKey] = "yes",
- [Models.Metadata.Machine.SampleKey] = new Models.Metadata.Sample[] { CreateSample() },
+ [Models.Metadata.Machine.SampleKey] = new Models.Metadata.Sample[] { CreateMetadataSample() },
[Models.Metadata.Machine.SampleOfKey] = "sampleof",
[Models.Metadata.Machine.SaveTypeKey] = "savetype",
- [Models.Metadata.Machine.SharedFeatKey] = new Models.Metadata.SharedFeat[] { CreateSharedFeat() },
- [Models.Metadata.Machine.SlotKey] = new Models.Metadata.Slot[] { CreateSlot() },
- [Models.Metadata.Machine.SoftwareListKey] = new Models.Metadata.SoftwareList[] { CreateSoftwareList() },
- [Models.Metadata.Machine.SoundKey] = CreateSound(),
+ [Models.Metadata.Machine.SharedFeatKey] = new Models.Metadata.SharedFeat[] { CreateMetadataSharedFeat() },
+ [Models.Metadata.Machine.SlotKey] = new Models.Metadata.Slot[] { CreateMetadataSlot() },
+ [Models.Metadata.Machine.SoftwareListKey] = new Models.Metadata.SoftwareList[] { CreateMetadataSoftwareList() },
+ [Models.Metadata.Machine.SoundKey] = CreateMetadataSound(),
[Models.Metadata.Machine.SourceFileKey] = "sourcefile",
[Models.Metadata.Machine.SourceRomKey] = "sourcerom",
[Models.Metadata.Machine.StatusKey] = "status",
[Models.Metadata.Machine.SupportedKey] = "yes",
[Models.Metadata.Machine.SystemKey] = "system",
[Models.Metadata.Machine.TagsKey] = "tags",
- [Models.Metadata.Machine.TruripKey] = CreateTrurip(),
- [Models.Metadata.Machine.VideoKey] = new Models.Metadata.Video[] { CreateVideo() },
+ [Models.Metadata.Machine.TruripKey] = CreateMetadataTrurip(),
+ [Models.Metadata.Machine.VideoKey] = new Models.Metadata.Video[] { CreateMetadataVideo() },
[Models.Metadata.Machine.YearKey] = "year",
};
}
- private static Models.Metadata.Adjuster CreateAdjuster()
+ private static Models.Metadata.Adjuster CreateMetadataAdjuster()
{
return new Models.Metadata.Adjuster
{
- [Models.Metadata.Adjuster.ConditionKey] = CreateCondition(),
+ [Models.Metadata.Adjuster.ConditionKey] = CreateMetadataCondition(),
[Models.Metadata.Adjuster.DefaultKey] = true,
[Models.Metadata.Adjuster.NameKey] = "name",
};
}
- private static Models.Metadata.Analog CreateAnalog()
+ private static Models.Metadata.Analog CreateMetadataAnalog()
{
return new Models.Metadata.Analog
{
@@ -350,7 +350,7 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Archive CreateArchive()
+ private static Models.Metadata.Archive CreateMetadataArchive()
{
return new Models.Metadata.Archive
{
@@ -358,7 +358,7 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.BiosSet CreateBiosSet()
+ private static Models.Metadata.BiosSet CreateMetadataBiosSet()
{
return new Models.Metadata.BiosSet
{
@@ -368,11 +368,11 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Chip CreateChip()
+ private static Models.Metadata.Chip CreateMetadataChip()
{
return new Models.Metadata.Chip
{
- [Models.Metadata.Chip.ClockKey] = 12345,
+ [Models.Metadata.Chip.ClockKey] = 12345L,
[Models.Metadata.Chip.FlagsKey] = "flags",
[Models.Metadata.Chip.NameKey] = "name",
[Models.Metadata.Chip.SoundOnlyKey] = "yes",
@@ -381,20 +381,20 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Configuration CreateConfiguration()
+ private static Models.Metadata.Configuration CreateMetadataConfiguration()
{
return new Models.Metadata.Configuration
{
- [Models.Metadata.Configuration.ConditionKey] = CreateCondition(),
- [Models.Metadata.Configuration.ConfLocationKey] = new Models.Metadata.ConfLocation[] { CreateConfLocation() },
- [Models.Metadata.Configuration.ConfSettingKey] = new Models.Metadata.ConfSetting[] { CreateConfSetting() },
+ [Models.Metadata.Configuration.ConditionKey] = CreateMetadataCondition(),
+ [Models.Metadata.Configuration.ConfLocationKey] = new Models.Metadata.ConfLocation[] { CreateMetadataConfLocation() },
+ [Models.Metadata.Configuration.ConfSettingKey] = new Models.Metadata.ConfSetting[] { CreateMetadataConfSetting() },
[Models.Metadata.Configuration.MaskKey] = "mask",
[Models.Metadata.Configuration.NameKey] = "name",
[Models.Metadata.Configuration.TagKey] = "tag",
};
}
- private static Models.Metadata.Condition CreateCondition()
+ private static Models.Metadata.Condition CreateMetadataCondition()
{
return new Models.Metadata.Condition
{
@@ -405,7 +405,7 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.ConfLocation CreateConfLocation()
+ private static Models.Metadata.ConfLocation CreateMetadataConfLocation()
{
return new Models.Metadata.ConfLocation
{
@@ -415,29 +415,29 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.ConfSetting CreateConfSetting()
+ private static Models.Metadata.ConfSetting CreateMetadataConfSetting()
{
return new Models.Metadata.ConfSetting
{
- [Models.Metadata.ConfSetting.ConditionKey] = CreateCondition(),
+ [Models.Metadata.ConfSetting.ConditionKey] = CreateMetadataCondition(),
[Models.Metadata.ConfSetting.DefaultKey] = "yes",
[Models.Metadata.ConfSetting.NameKey] = "name",
[Models.Metadata.ConfSetting.ValueKey] = "value",
};
}
- private static Models.Metadata.Control CreateControl()
+ private static Models.Metadata.Control CreateMetadataControl()
{
return new Models.Metadata.Control
{
- [Models.Metadata.Control.ButtonsKey] = 12345,
- [Models.Metadata.Control.KeyDeltaKey] = 12345,
- [Models.Metadata.Control.MaximumKey] = 12345,
- [Models.Metadata.Control.MinimumKey] = 12345,
- [Models.Metadata.Control.PlayerKey] = 12345,
- [Models.Metadata.Control.ReqButtonsKey] = 12345,
+ [Models.Metadata.Control.ButtonsKey] = 12345L,
+ [Models.Metadata.Control.KeyDeltaKey] = 12345L,
+ [Models.Metadata.Control.MaximumKey] = 12345L,
+ [Models.Metadata.Control.MinimumKey] = 12345L,
+ [Models.Metadata.Control.PlayerKey] = 12345L,
+ [Models.Metadata.Control.ReqButtonsKey] = 12345L,
[Models.Metadata.Control.ReverseKey] = "yes",
- [Models.Metadata.Control.SensitivityKey] = 12345,
+ [Models.Metadata.Control.SensitivityKey] = 12345L,
[Models.Metadata.Control.ControlTypeKey] = "lightgun",
[Models.Metadata.Control.WaysKey] = "ways",
[Models.Metadata.Control.Ways2Key] = "ways2",
@@ -445,13 +445,13 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Device CreateDevice()
+ private static Models.Metadata.Device CreateMetadataDevice()
{
return new Models.Metadata.Device
{
- [Models.Metadata.Device.ExtensionKey] = new Models.Metadata.Extension[] { CreateExtension() },
+ [Models.Metadata.Device.ExtensionKey] = new Models.Metadata.Extension[] { CreateMetadataExtension() },
[Models.Metadata.Device.FixedImageKey] = "fixedimage",
- [Models.Metadata.Device.InstanceKey] = CreateInstance(),
+ [Models.Metadata.Device.InstanceKey] = CreateMetadataInstance(),
[Models.Metadata.Device.InterfaceKey] = "interface",
[Models.Metadata.Device.MandatoryKey] = 1,
[Models.Metadata.Device.TagKey] = "tag",
@@ -459,7 +459,7 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.DeviceRef CreateDeviceRef()
+ private static Models.Metadata.DeviceRef CreateMetadataDeviceRef()
{
return new Models.Metadata.DeviceRef
{
@@ -467,7 +467,7 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.DipLocation CreateDipLocation()
+ private static Models.Metadata.DipLocation CreateMetadataDipLocation()
{
return new Models.Metadata.DipLocation
{
@@ -477,14 +477,14 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.DipSwitch CreateDipSwitch()
+ private static Models.Metadata.DipSwitch CreateMetadataDipSwitch()
{
return new Models.Metadata.DipSwitch
{
- [Models.Metadata.DipSwitch.ConditionKey] = CreateCondition(),
+ [Models.Metadata.DipSwitch.ConditionKey] = CreateMetadataCondition(),
[Models.Metadata.DipSwitch.DefaultKey] = "yes",
- [Models.Metadata.DipSwitch.DipLocationKey] = new Models.Metadata.DipLocation[] { CreateDipLocation() },
- [Models.Metadata.DipSwitch.DipValueKey] = new Models.Metadata.DipValue[] { CreateDipValue() },
+ [Models.Metadata.DipSwitch.DipLocationKey] = new Models.Metadata.DipLocation[] { CreateMetadataDipLocation() },
+ [Models.Metadata.DipSwitch.DipValueKey] = new Models.Metadata.DipValue[] { CreateMetadataDipValue() },
[Models.Metadata.DipSwitch.EntryKey] = new string[] { "entry" },
[Models.Metadata.DipSwitch.MaskKey] = "mask",
[Models.Metadata.DipSwitch.NameKey] = "name",
@@ -492,30 +492,30 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.DipValue CreateDipValue()
+ private static Models.Metadata.DipValue CreateMetadataDipValue()
{
return new Models.Metadata.DipValue
{
- [Models.Metadata.DipValue.ConditionKey] = CreateCondition(),
+ [Models.Metadata.DipValue.ConditionKey] = CreateMetadataCondition(),
[Models.Metadata.DipValue.DefaultKey] = "yes",
[Models.Metadata.DipValue.NameKey] = "name",
[Models.Metadata.DipValue.ValueKey] = "value",
};
}
- private static Models.Metadata.DataArea CreateDataArea()
+ private static Models.Metadata.DataArea CreateMetadataDataArea()
{
return new Models.Metadata.DataArea
{
[Models.Metadata.DataArea.EndiannessKey] = "big",
[Models.Metadata.DataArea.NameKey] = "name",
[Models.Metadata.DataArea.RomKey] = new Models.Metadata.Rom[] { new Models.Metadata.Rom() },
- [Models.Metadata.DataArea.SizeKey] = 12345,
+ [Models.Metadata.DataArea.SizeKey] = 12345L,
[Models.Metadata.DataArea.WidthKey] = 64,
};
}
- private static Models.Metadata.Disk CreateDisk()
+ private static Models.Metadata.Disk CreateMetadataDisk()
{
return new Models.Metadata.Disk
{
@@ -531,7 +531,7 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.DiskArea CreateDiskArea()
+ private static Models.Metadata.DiskArea CreateMetadataDiskArea()
{
return new Models.Metadata.DiskArea
{
@@ -540,28 +540,28 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Display CreateDisplay()
+ private static Models.Metadata.Display CreateMetadataDisplay()
{
return new Models.Metadata.Display
{
[Models.Metadata.Display.FlipXKey] = "yes",
- [Models.Metadata.Display.HBEndKey] = 12345,
- [Models.Metadata.Display.HBStartKey] = 12345,
- [Models.Metadata.Display.HeightKey] = 12345,
- [Models.Metadata.Display.HTotalKey] = 12345,
- [Models.Metadata.Display.PixClockKey] = 12345,
- [Models.Metadata.Display.RefreshKey] = 12345,
+ [Models.Metadata.Display.HBEndKey] = 12345L,
+ [Models.Metadata.Display.HBStartKey] = 12345L,
+ [Models.Metadata.Display.HeightKey] = 12345L,
+ [Models.Metadata.Display.HTotalKey] = 12345L,
+ [Models.Metadata.Display.PixClockKey] = 12345L,
+ [Models.Metadata.Display.RefreshKey] = 12345L,
[Models.Metadata.Display.RotateKey] = 90,
[Models.Metadata.Display.TagKey] = "tag",
[Models.Metadata.Display.DisplayTypeKey] = "vector",
- [Models.Metadata.Display.VBEndKey] = 12345,
- [Models.Metadata.Display.VBStartKey] = 12345,
- [Models.Metadata.Display.VTotalKey] = 12345,
- [Models.Metadata.Display.WidthKey] = 12345,
+ [Models.Metadata.Display.VBEndKey] = 12345L,
+ [Models.Metadata.Display.VBStartKey] = 12345L,
+ [Models.Metadata.Display.VTotalKey] = 12345L,
+ [Models.Metadata.Display.WidthKey] = 12345L,
};
}
- private static Models.Metadata.Driver CreateDriver()
+ private static Models.Metadata.Driver CreateMetadataDriver()
{
return new Models.Metadata.Driver
{
@@ -580,11 +580,11 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Dump CreateDump()
+ private static Models.Metadata.Dump CreateMetadataDump()
{
return new Models.Metadata.Dump
{
- [Models.Metadata.Dump.OriginalKey] = CreateOriginal(),
+ [Models.Metadata.Dump.OriginalKey] = CreateMetadataOriginal(),
// The following are searched for in order
// For the purposes of this test, only RomKey will be populated
@@ -595,7 +595,7 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Extension CreateExtension()
+ private static Models.Metadata.Extension CreateMetadataExtension()
{
return new Models.Metadata.Extension
{
@@ -603,7 +603,7 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Feature CreateFeature()
+ private static Models.Metadata.Feature CreateMetadataFeature()
{
return new Models.Metadata.Feature
{
@@ -615,7 +615,7 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Info CreateInfo()
+ private static Models.Metadata.Info CreateMetadataInfo()
{
return new Models.Metadata.Info
{
@@ -624,20 +624,20 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Input CreateInput()
+ private static Models.Metadata.Input CreateMetadataInput()
{
return new Models.Metadata.Input
{
- [Models.Metadata.Input.ButtonsKey] = 12345,
- [Models.Metadata.Input.CoinsKey] = 12345,
- [Models.Metadata.Input.ControlKey] = new Models.Metadata.Control[] { CreateControl() },
- [Models.Metadata.Input.PlayersKey] = 12345,
+ [Models.Metadata.Input.ButtonsKey] = 12345L,
+ [Models.Metadata.Input.CoinsKey] = 12345L,
+ [Models.Metadata.Input.ControlKey] = new Models.Metadata.Control[] { CreateMetadataControl() },
+ [Models.Metadata.Input.PlayersKey] = 12345L,
[Models.Metadata.Input.ServiceKey] = "yes",
[Models.Metadata.Input.TiltKey] = "yes",
};
}
- private static Models.Metadata.Instance CreateInstance()
+ private static Models.Metadata.Instance CreateMetadataInstance()
{
return new Models.Metadata.Instance
{
@@ -646,7 +646,7 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Media CreateMedia()
+ private static Models.Metadata.Media CreateMetadataMedia()
{
return new Models.Metadata.Media
{
@@ -658,7 +658,7 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Original CreateOriginal()
+ private static Models.Metadata.Original CreateMetadataOriginal()
{
return new Models.Metadata.Original
{
@@ -667,29 +667,29 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Part CreatePart()
+ private static Models.Metadata.Part CreateMetadataPart()
{
return new Models.Metadata.Part
{
- [Models.Metadata.Part.DataAreaKey] = new Models.Metadata.DataArea[] { CreateDataArea() },
- [Models.Metadata.Part.DiskAreaKey] = new Models.Metadata.DiskArea[] { CreateDiskArea() },
+ [Models.Metadata.Part.DataAreaKey] = new Models.Metadata.DataArea[] { CreateMetadataDataArea() },
+ [Models.Metadata.Part.DiskAreaKey] = new Models.Metadata.DiskArea[] { CreateMetadataDiskArea() },
[Models.Metadata.Part.DipSwitchKey] = new Models.Metadata.DipSwitch[] { new Models.Metadata.DipSwitch() },
- [Models.Metadata.Part.FeatureKey] = new Models.Metadata.Feature[] { CreateFeature() },
+ [Models.Metadata.Part.FeatureKey] = new Models.Metadata.Feature[] { CreateMetadataFeature() },
[Models.Metadata.Part.InterfaceKey] = "interface",
[Models.Metadata.Part.NameKey] = "name",
};
}
- private static Models.Metadata.Port CreatePort()
+ private static Models.Metadata.Port CreateMetadataPort()
{
return new Models.Metadata.Port
{
- [Models.Metadata.Port.AnalogKey] = new Models.Metadata.Analog[] { CreateAnalog() },
+ [Models.Metadata.Port.AnalogKey] = new Models.Metadata.Analog[] { CreateMetadataAnalog() },
[Models.Metadata.Port.TagKey] = "tag",
};
}
- private static Models.Metadata.RamOption CreateRamOption()
+ private static Models.Metadata.RamOption CreateMetadataRamOption()
{
return new Models.Metadata.RamOption
{
@@ -699,7 +699,7 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Release CreateRelease()
+ private static Models.Metadata.Release CreateMetadataRelease()
{
return new Models.Metadata.Release
{
@@ -711,7 +711,7 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Rom CreateRom()
+ private static Models.Metadata.Rom CreateMetadataRom()
{
return new Models.Metadata.Rom
{
@@ -733,7 +733,7 @@ namespace SabreTools.DatFiles.Test
[Models.Metadata.Rom.DateKey] = "date",
[Models.Metadata.Rom.DisposeKey] = "yes",
[Models.Metadata.Rom.ExtensionKey] = "extension",
- [Models.Metadata.Rom.FileCountKey] = 12345,
+ [Models.Metadata.Rom.FileCountKey] = 12345L,
[Models.Metadata.Rom.FileIsAvailableKey] = true,
[Models.Metadata.Rom.FlagsKey] = "flags",
[Models.Metadata.Rom.FormatKey] = "format",
@@ -779,7 +779,7 @@ namespace SabreTools.DatFiles.Test
[Models.Metadata.Rom.SHA256Key] = ZeroHash.SHA256Str,
[Models.Metadata.Rom.SHA384Key] = ZeroHash.SHA384Str,
[Models.Metadata.Rom.SHA512Key] = ZeroHash.SHA512Str,
- [Models.Metadata.Rom.SizeKey] = 12345,
+ [Models.Metadata.Rom.SizeKey] = 12345L,
[Models.Metadata.Rom.SoundOnlyKey] = "yes",
[Models.Metadata.Rom.SourceKey] = "source",
[Models.Metadata.Rom.SpamSumKey] = ZeroHash.SpamSumStr,
@@ -810,7 +810,7 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Sample CreateSample()
+ private static Models.Metadata.Sample CreateMetadataSample()
{
return new Models.Metadata.Sample
{
@@ -818,7 +818,7 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.SharedFeat CreateSharedFeat()
+ private static Models.Metadata.SharedFeat CreateMetadataSharedFeat()
{
return new Models.Metadata.SharedFeat
{
@@ -827,16 +827,16 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Slot CreateSlot()
+ private static Models.Metadata.Slot CreateMetadataSlot()
{
return new Models.Metadata.Slot
{
[Models.Metadata.Slot.NameKey] = "name",
- [Models.Metadata.Slot.SlotOptionKey] = new Models.Metadata.SlotOption[] { CreateSlotOption() },
+ [Models.Metadata.Slot.SlotOptionKey] = new Models.Metadata.SlotOption[] { CreateMetadataSlotOption() },
};
}
- private static Models.Metadata.SlotOption CreateSlotOption()
+ private static Models.Metadata.SlotOption CreateMetadataSlotOption()
{
return new Models.Metadata.SlotOption
{
@@ -846,24 +846,24 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Software CreateSoftware()
+ private static Models.Metadata.Software CreateMetadataSoftware()
{
return new Models.Metadata.Software
{
[Models.Metadata.Software.CloneOfKey] = "cloneof",
[Models.Metadata.Software.DescriptionKey] = "description",
- [Models.Metadata.Software.InfoKey] = new Models.Metadata.Info[] { CreateInfo() },
+ [Models.Metadata.Software.InfoKey] = new Models.Metadata.Info[] { CreateMetadataInfo() },
[Models.Metadata.Software.NameKey] = "name",
[Models.Metadata.Software.NotesKey] = "notes",
- [Models.Metadata.Software.PartKey] = new Models.Metadata.Part[] { CreatePart() },
+ [Models.Metadata.Software.PartKey] = new Models.Metadata.Part[] { CreateMetadataPart() },
[Models.Metadata.Software.PublisherKey] = "publisher",
- [Models.Metadata.Software.SharedFeatKey] = new Models.Metadata.SharedFeat[] { CreateSharedFeat() },
+ [Models.Metadata.Software.SharedFeatKey] = new Models.Metadata.SharedFeat[] { CreateMetadataSharedFeat() },
[Models.Metadata.Software.SupportedKey] = "yes",
[Models.Metadata.Software.YearKey] = "year",
};
}
- private static Models.Metadata.SoftwareList CreateSoftwareList()
+ private static Models.Metadata.SoftwareList CreateMetadataSoftwareList()
{
return new Models.Metadata.SoftwareList
{
@@ -871,21 +871,21 @@ namespace SabreTools.DatFiles.Test
[Models.Metadata.SoftwareList.FilterKey] = "filter",
[Models.Metadata.SoftwareList.NameKey] = "name",
[Models.Metadata.SoftwareList.NotesKey] = "notes",
- [Models.Metadata.SoftwareList.SoftwareKey] = new Models.Metadata.Software[] { CreateSoftware() },
+ [Models.Metadata.SoftwareList.SoftwareKey] = new Models.Metadata.Software[] { CreateMetadataSoftware() },
[Models.Metadata.SoftwareList.StatusKey] = "original",
[Models.Metadata.SoftwareList.TagKey] = "tag",
};
}
- private static Models.Metadata.Sound CreateSound()
+ private static Models.Metadata.Sound CreateMetadataSound()
{
return new Models.Metadata.Sound
{
- [Models.Metadata.Sound.ChannelsKey] = 12345,
+ [Models.Metadata.Sound.ChannelsKey] = 12345L,
};
}
- private static Models.Logiqx.Trurip CreateTrurip()
+ private static Models.Logiqx.Trurip CreateMetadataTrurip()
{
return new Models.Logiqx.Trurip
{
@@ -906,17 +906,17 @@ namespace SabreTools.DatFiles.Test
};
}
- private static Models.Metadata.Video CreateVideo()
+ private static Models.Metadata.Video CreateMetadataVideo()
{
return new Models.Metadata.Video
{
- [Models.Metadata.Video.AspectXKey] = 12345,
- [Models.Metadata.Video.AspectYKey] = 12345,
- [Models.Metadata.Video.HeightKey] = 12345,
+ [Models.Metadata.Video.AspectXKey] = 12345L,
+ [Models.Metadata.Video.AspectYKey] = 12345L,
+ [Models.Metadata.Video.HeightKey] = 12345L,
[Models.Metadata.Video.OrientationKey] = "vertical",
- [Models.Metadata.Video.RefreshKey] = 12345,
+ [Models.Metadata.Video.RefreshKey] = 12345L,
[Models.Metadata.Video.ScreenKey] = "vector",
- [Models.Metadata.Video.WidthKey] = 12345,
+ [Models.Metadata.Video.WidthKey] = 12345L,
};
}
@@ -1061,7 +1061,7 @@ namespace SabreTools.DatFiles.Test
private static void ValidateChip(Chip? chip)
{
Assert.NotNull(chip);
- Assert.Equal(12345, chip.GetInt64FieldValue(Models.Metadata.Chip.ClockKey));
+ Assert.Equal(12345L, chip.GetInt64FieldValue(Models.Metadata.Chip.ClockKey));
Assert.Equal("flags", chip.GetStringFieldValue(Models.Metadata.Chip.FlagsKey));
Assert.Equal("name", chip.GetStringFieldValue(Models.Metadata.Chip.NameKey));
Assert.True(chip.GetBoolFieldValue(Models.Metadata.Chip.SoundOnlyKey));
@@ -1121,14 +1121,14 @@ namespace SabreTools.DatFiles.Test
private static void ValidateControl(Control? control)
{
Assert.NotNull(control);
- Assert.Equal(12345, control.GetInt64FieldValue(Models.Metadata.Control.ButtonsKey));
- Assert.Equal(12345, control.GetInt64FieldValue(Models.Metadata.Control.KeyDeltaKey));
- Assert.Equal(12345, control.GetInt64FieldValue(Models.Metadata.Control.MaximumKey));
- Assert.Equal(12345, control.GetInt64FieldValue(Models.Metadata.Control.MinimumKey));
- Assert.Equal(12345, control.GetInt64FieldValue(Models.Metadata.Control.PlayerKey));
- Assert.Equal(12345, control.GetInt64FieldValue(Models.Metadata.Control.ReqButtonsKey));
+ Assert.Equal(12345L, control.GetInt64FieldValue(Models.Metadata.Control.ButtonsKey));
+ Assert.Equal(12345L, control.GetInt64FieldValue(Models.Metadata.Control.KeyDeltaKey));
+ Assert.Equal(12345L, control.GetInt64FieldValue(Models.Metadata.Control.MaximumKey));
+ Assert.Equal(12345L, control.GetInt64FieldValue(Models.Metadata.Control.MinimumKey));
+ Assert.Equal(12345L, control.GetInt64FieldValue(Models.Metadata.Control.PlayerKey));
+ Assert.Equal(12345L, control.GetInt64FieldValue(Models.Metadata.Control.ReqButtonsKey));
Assert.True(control.GetBoolFieldValue(Models.Metadata.Control.ReverseKey));
- Assert.Equal(12345, control.GetInt64FieldValue(Models.Metadata.Control.SensitivityKey));
+ Assert.Equal(12345L, control.GetInt64FieldValue(Models.Metadata.Control.SensitivityKey));
Assert.Equal("lightgun", control.GetStringFieldValue(Models.Metadata.Control.ControlTypeKey));
Assert.Equal("ways", control.GetStringFieldValue(Models.Metadata.Control.WaysKey));
Assert.Equal("ways2", control.GetStringFieldValue(Models.Metadata.Control.Ways2Key));
@@ -1140,7 +1140,7 @@ namespace SabreTools.DatFiles.Test
Assert.NotNull(dataArea);
Assert.Equal("big", dataArea.GetStringFieldValue(Models.Metadata.DataArea.EndiannessKey));
Assert.Equal("name", dataArea.GetStringFieldValue(Models.Metadata.DataArea.NameKey));
- Assert.Equal(12345, dataArea.GetInt64FieldValue(Models.Metadata.DataArea.SizeKey));
+ Assert.Equal(12345L, dataArea.GetInt64FieldValue(Models.Metadata.DataArea.SizeKey));
Assert.Equal(64, dataArea.GetInt64FieldValue(Models.Metadata.DataArea.WidthKey));
}
@@ -1238,19 +1238,19 @@ namespace SabreTools.DatFiles.Test
{
Assert.NotNull(display);
Assert.True(display.GetBoolFieldValue(Models.Metadata.Display.FlipXKey));
- Assert.Equal(12345, display.GetInt64FieldValue(Models.Metadata.Display.HBEndKey));
- Assert.Equal(12345, display.GetInt64FieldValue(Models.Metadata.Display.HBStartKey));
- Assert.Equal(12345, display.GetInt64FieldValue(Models.Metadata.Display.HeightKey));
- Assert.Equal(12345, display.GetInt64FieldValue(Models.Metadata.Display.HTotalKey));
- Assert.Equal(12345, display.GetInt64FieldValue(Models.Metadata.Display.PixClockKey));
- Assert.Equal(12345, display.GetInt64FieldValue(Models.Metadata.Display.RefreshKey));
+ Assert.Equal(12345L, display.GetInt64FieldValue(Models.Metadata.Display.HBEndKey));
+ Assert.Equal(12345L, display.GetInt64FieldValue(Models.Metadata.Display.HBStartKey));
+ Assert.Equal(12345L, display.GetInt64FieldValue(Models.Metadata.Display.HeightKey));
+ Assert.Equal(12345L, display.GetInt64FieldValue(Models.Metadata.Display.HTotalKey));
+ Assert.Equal(12345L, display.GetInt64FieldValue(Models.Metadata.Display.PixClockKey));
+ Assert.Equal(12345L, display.GetInt64FieldValue(Models.Metadata.Display.RefreshKey));
Assert.Equal(90, display.GetInt64FieldValue(Models.Metadata.Display.RotateKey));
Assert.Equal("tag", display.GetStringFieldValue(Models.Metadata.Display.TagKey));
Assert.Equal("vector", display.GetStringFieldValue(Models.Metadata.Display.DisplayTypeKey));
- Assert.Equal(12345, display.GetInt64FieldValue(Models.Metadata.Display.VBEndKey));
- Assert.Equal(12345, display.GetInt64FieldValue(Models.Metadata.Display.VBStartKey));
- Assert.Equal(12345, display.GetInt64FieldValue(Models.Metadata.Display.VTotalKey));
- Assert.Equal(12345, display.GetInt64FieldValue(Models.Metadata.Display.WidthKey));
+ Assert.Equal(12345L, display.GetInt64FieldValue(Models.Metadata.Display.VBEndKey));
+ Assert.Equal(12345L, display.GetInt64FieldValue(Models.Metadata.Display.VBStartKey));
+ Assert.Equal(12345L, display.GetInt64FieldValue(Models.Metadata.Display.VTotalKey));
+ Assert.Equal(12345L, display.GetInt64FieldValue(Models.Metadata.Display.WidthKey));
}
private static void ValidateDriver(Driver? driver)
@@ -1296,9 +1296,9 @@ namespace SabreTools.DatFiles.Test
private static void ValidateInput(Input? input)
{
Assert.NotNull(input);
- Assert.Equal(12345, input.GetInt64FieldValue(Models.Metadata.Input.ButtonsKey));
- Assert.Equal(12345, input.GetInt64FieldValue(Models.Metadata.Input.CoinsKey));
- Assert.Equal(12345, input.GetInt64FieldValue(Models.Metadata.Input.PlayersKey));
+ Assert.Equal(12345L, input.GetInt64FieldValue(Models.Metadata.Input.ButtonsKey));
+ Assert.Equal(12345L, input.GetInt64FieldValue(Models.Metadata.Input.CoinsKey));
+ Assert.Equal(12345L, input.GetInt64FieldValue(Models.Metadata.Input.PlayersKey));
Assert.True(input.GetBoolFieldValue(Models.Metadata.Input.ServiceKey));
Assert.True(input.GetBoolFieldValue(Models.Metadata.Input.TiltKey));
@@ -1395,7 +1395,7 @@ namespace SabreTools.DatFiles.Test
Assert.Equal("date", rom.GetStringFieldValue(Models.Metadata.Rom.DateKey));
Assert.True(rom.GetBoolFieldValue(Models.Metadata.Rom.DisposeKey));
Assert.Equal("extension", rom.GetStringFieldValue(Models.Metadata.Rom.ExtensionKey));
- Assert.Equal(12345, rom.GetInt64FieldValue(Models.Metadata.Rom.FileCountKey));
+ Assert.Equal(12345L, rom.GetInt64FieldValue(Models.Metadata.Rom.FileCountKey));
Assert.True(rom.GetBoolFieldValue(Models.Metadata.Rom.FileIsAvailableKey));
Assert.Equal("flags", rom.GetStringFieldValue(Models.Metadata.Rom.FlagsKey));
Assert.Equal("format", rom.GetStringFieldValue(Models.Metadata.Rom.FormatKey));
@@ -1441,7 +1441,7 @@ namespace SabreTools.DatFiles.Test
Assert.Equal(ZeroHash.SHA256Str, rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key));
Assert.Equal(ZeroHash.SHA384Str, rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key));
Assert.Equal(ZeroHash.SHA512Str, rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key));
- Assert.Equal(12345, rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey));
+ Assert.Equal(12345L, rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey));
Assert.True(rom.GetBoolFieldValue(Models.Metadata.Rom.SoundOnlyKey));
Assert.Equal("source", rom.GetStringFieldValue(Models.Metadata.Rom.SourceKey));
Assert.Equal(ZeroHash.SpamSumStr, rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey));
@@ -1518,7 +1518,7 @@ namespace SabreTools.DatFiles.Test
private static void ValidateSound(Sound? sound)
{
Assert.NotNull(sound);
- Assert.Equal(12345, sound.GetInt64FieldValue(Models.Metadata.Sound.ChannelsKey));
+ Assert.Equal(12345L, sound.GetInt64FieldValue(Models.Metadata.Sound.ChannelsKey));
}
// TODO: Figure out why so many fields are omitted
@@ -1544,12 +1544,12 @@ namespace SabreTools.DatFiles.Test
private static void ValidateVideo(Display? display)
{
Assert.NotNull(display);
- Assert.Equal(12345, display.GetInt64FieldValue(Models.Metadata.Video.AspectXKey));
- Assert.Equal(12345, display.GetInt64FieldValue(Models.Metadata.Video.AspectYKey));
+ Assert.Equal(12345L, display.GetInt64FieldValue(Models.Metadata.Video.AspectXKey));
+ Assert.Equal(12345L, display.GetInt64FieldValue(Models.Metadata.Video.AspectYKey));
Assert.Equal("vector", display.GetStringFieldValue(Models.Metadata.Display.DisplayTypeKey));
- Assert.Equal(12345, display.GetInt64FieldValue(Models.Metadata.Display.HeightKey));
- Assert.Equal(12345, display.GetInt64FieldValue(Models.Metadata.Display.RefreshKey));
- Assert.Equal(12345, display.GetInt64FieldValue(Models.Metadata.Display.WidthKey));
+ Assert.Equal(12345L, display.GetInt64FieldValue(Models.Metadata.Display.HeightKey));
+ Assert.Equal(12345L, display.GetInt64FieldValue(Models.Metadata.Display.RefreshKey));
+ Assert.Equal(12345L, display.GetInt64FieldValue(Models.Metadata.Display.WidthKey));
Assert.Equal(90, display.GetInt64FieldValue(Models.Metadata.Display.RotateKey));
}
diff --git a/SabreTools.DatFiles.Test/DatFileTests.ToMetadata.cs b/SabreTools.DatFiles.Test/DatFileTests.ToMetadata.cs
index beb53a27..6330a81e 100644
--- a/SabreTools.DatFiles.Test/DatFileTests.ToMetadata.cs
+++ b/SabreTools.DatFiles.Test/DatFileTests.ToMetadata.cs
@@ -1,7 +1,1102 @@
+using System.Collections.Generic;
+using SabreTools.DatItems;
+using SabreTools.DatItems.Formats;
+using SabreTools.Hashing;
+using Xunit;
+
namespace SabreTools.DatFiles.Test
{
public partial class DatFileTests
{
-
+ #region ConvertToMetadata
+
+ [Fact]
+ public void ConvertToMetadata_Empty()
+ {
+ DatFile datFile = new Formats.Logiqx(null, deprecated: false);
+
+ Models.Metadata.MetadataFile? actual = datFile.ConvertToMetadata();
+ Assert.Null(actual);
+ }
+
+ [Fact]
+ public void ConvertToMetadata_FilledHeader()
+ {
+ DatHeader header = CreateHeader();
+
+ DatFile datFile = new Formats.Logiqx(null, deprecated: false);
+ datFile.SetHeader(header);
+ datFile.Items.Add("key", new Rom());
+
+ Models.Metadata.MetadataFile? actual = datFile.ConvertToMetadata();
+ Assert.NotNull(actual);
+
+ Models.Metadata.Header? actualHeader = actual.Read(Models.Metadata.MetadataFile.HeaderKey);
+ ValidateMetadataHeader(actualHeader);
+ }
+
+ [Fact]
+ public void ConvertToMetadata_FilledMachine()
+ {
+ Machine machine = CreateMachine();
+
+ List datItems =
+ [
+ CreateAdjuster(machine),
+ CreateArchive(machine),
+ CreateBiosSet(machine),
+ CreateChip(machine),
+ CreateConfiguration(machine),
+ CreateDevice(machine),
+ CreateDeviceRef(machine),
+ CreateDipSwitch(machine),
+ CreateDipSwitchWithPart(machine),
+ CreateDisk(machine),
+ CreateDiskWithDiskAreaPart(machine),
+ CreateDisplay(machine),
+ CreateDriver(machine),
+ CreateFeature(machine),
+ CreateInfo(machine),
+ CreateInput(machine),
+ CreateMedia(machine),
+ CreatePartFeature(machine),
+ CreatePort(machine),
+ CreateRamOption(machine),
+ CreateRelease(machine),
+ CreateRom(machine),
+ CreateRomWithDiskAreaPart(machine),
+ CreateSample(machine),
+ CreateSharedFeat(machine),
+ CreateSlot(machine),
+ CreateSoftwareList(machine),
+ CreateSound(machine),
+ CreateVideo(machine),
+ ];
+
+ DatFile datFile = new Formats.SabreJSON(null);
+ datFile.Items.Add("key", datItems);
+
+ Models.Metadata.MetadataFile? actual = datFile.ConvertToMetadata();
+ Assert.NotNull(actual);
+
+ Models.Metadata.Machine[]? machines = actual.Read(Models.Metadata.MetadataFile.MachineKey);
+ Assert.NotNull(machines);
+ Models.Metadata.Machine actualMachine = Assert.Single(machines);
+ ValidateMetadataMachine(actualMachine);
+ }
+
+ #endregion
+
+ #region Creation Helpers
+
+ private static DatHeader CreateHeader()
+ {
+ DatHeader item = new DatHeader(CreateMetadataHeader());
+
+ item.SetFieldValue(Models.Metadata.Header.CanOpenKey, ["ext"]);
+ item.SetFieldValue(Models.Metadata.Header.ImagesKey,
+ new Models.OfflineList.Images() { Height = "height" });
+ item.SetFieldValue(Models.Metadata.Header.InfosKey,
+ new Models.OfflineList.Infos() { Comment = new Models.OfflineList.Comment() });
+ item.SetFieldValue(Models.Metadata.Header.NewDatKey,
+ new Models.OfflineList.NewDat() { DatUrl = new Models.OfflineList.DatUrl() });
+ item.SetFieldValue(Models.Metadata.Header.SearchKey,
+ new Models.OfflineList.Search() { To = [] });
+
+ return item;
+ }
+
+ private static Machine CreateMachine()
+ {
+ Machine item = new Machine(CreateMetadataMachine());
+ item.SetFieldValue(Models.Metadata.Machine.TruripKey, CreateTrurip());
+ return item;
+ }
+
+ private static Adjuster CreateAdjuster(Machine machine)
+ {
+ Adjuster item = new Adjuster(CreateMetadataAdjuster());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Archive CreateArchive(Machine machine)
+ {
+ Archive item = new Archive(CreateMetadataArchive());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static BiosSet CreateBiosSet(Machine machine)
+ {
+ BiosSet item = new BiosSet(CreateMetadataBiosSet());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Chip CreateChip(Machine machine)
+ {
+ Chip item = new Chip(CreateMetadataChip());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Configuration CreateConfiguration(Machine machine)
+ {
+ Configuration item = new Configuration(CreateMetadataConfiguration());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Device CreateDevice(Machine machine)
+ {
+ Device item = new Device(CreateMetadataDevice());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static DataArea CreateDataArea(Machine machine)
+ {
+ DataArea item = new DataArea(CreateMetadataDataArea());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static DeviceRef CreateDeviceRef(Machine machine)
+ {
+ DeviceRef item = new DeviceRef(CreateMetadataDeviceRef());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static DipSwitch CreateDipSwitch(Machine machine)
+ {
+ DipSwitch item = new DipSwitch(CreateMetadataDipSwitch());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static DipSwitch CreateDipSwitchWithPart(Machine machine)
+ {
+ DipSwitch item = new DipSwitch(CreateMetadataDipSwitch());
+ item.CopyMachineInformation(machine);
+ item.SetFieldValue(DipSwitch.PartKey, CreatePart(machine));
+ return item;
+ }
+
+ private static Disk CreateDisk(Machine machine)
+ {
+ Disk item = new Disk(CreateMetadataDisk());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Disk CreateDiskWithDiskAreaPart(Machine machine)
+ {
+ Disk item = new Disk(CreateMetadataDisk());
+ item.CopyMachineInformation(machine);
+ item.SetFieldValue(Disk.DiskAreaKey, CreateDiskArea(machine));
+ item.SetFieldValue(Disk.PartKey, CreatePart(machine));
+ return item;
+ }
+
+ private static DiskArea CreateDiskArea(Machine machine)
+ {
+ DiskArea item = new DiskArea(CreateMetadataDiskArea());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Display CreateDisplay(Machine machine)
+ {
+ Display item = new Display(CreateMetadataDisplay());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Driver CreateDriver(Machine machine)
+ {
+ Driver item = new Driver(CreateMetadataDriver());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Feature CreateFeature(Machine machine)
+ {
+ Feature item = new Feature(CreateMetadataFeature());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Info CreateInfo(Machine machine)
+ {
+ Info item = new Info(CreateMetadataInfo());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Input CreateInput(Machine machine)
+ {
+ Input item = new Input(CreateMetadataInput());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Media CreateMedia(Machine machine)
+ {
+ Media item = new Media(CreateMetadataMedia());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Part CreatePart(Machine machine)
+ {
+ Part item = new Part(CreateMetadataPart());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static PartFeature CreatePartFeature(Machine machine)
+ {
+ PartFeature item = new PartFeature(CreateMetadataFeature());
+ item.CopyMachineInformation(machine);
+ item.SetFieldValue(PartFeature.PartKey, CreatePart(machine));
+ return item;
+ }
+
+ private static Port CreatePort(Machine machine)
+ {
+ Port item = new Port(CreateMetadataPort());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static RamOption CreateRamOption(Machine machine)
+ {
+ RamOption item = new RamOption(CreateMetadataRamOption());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Release CreateRelease(Machine machine)
+ {
+ Release item = new Release(CreateMetadataRelease());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ // TODO: Create variant that results in a Dump
+ private static Rom CreateRom(Machine machine)
+ {
+ Rom item = new Rom(CreateMetadataRom());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Rom CreateRomWithDiskAreaPart(Machine machine)
+ {
+ Rom item = new Rom(CreateMetadataRom());
+ item.CopyMachineInformation(machine);
+ item.SetFieldValue(Rom.DataAreaKey, CreateDataArea(machine));
+ item.SetFieldValue(Rom.PartKey, CreatePart(machine));
+ return item;
+ }
+
+ private static Sample CreateSample(Machine machine)
+ {
+ Sample item = new Sample(CreateMetadataSample());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static SharedFeat CreateSharedFeat(Machine machine)
+ {
+ SharedFeat item = new SharedFeat(CreateMetadataSharedFeat());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Slot CreateSlot(Machine machine)
+ {
+ Slot item = new Slot(CreateMetadataSlot());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static SoftwareList CreateSoftwareList(Machine machine)
+ {
+ SoftwareList item = new SoftwareList(CreateMetadataSoftwareList());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Sound CreateSound(Machine machine)
+ {
+ Sound item = new Sound(CreateMetadataSound());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ private static Trurip CreateTrurip()
+ {
+ return new Trurip
+ {
+ TitleID = "titleid",
+ // Publisher = "publisher",
+ Developer = "developer",
+ // Year = "year",
+ Genre = "genre",
+ Subgenre = "subgenre",
+ Ratings = "ratings",
+ Score = "score",
+ // Players = "players",
+ Enabled = "enabled",
+ Crc = true,
+ // Source = "source",
+ // CloneOf = "cloneof",
+ RelatedTo = "relatedto",
+ };
+ }
+
+ private static Display CreateVideo(Machine machine)
+ {
+ Display item = new Display(CreateMetadataVideo());
+ item.CopyMachineInformation(machine);
+ return item;
+ }
+
+ #endregion
+
+ #region Validation Helpers
+
+ private static void ValidateMetadataHeader(Models.Metadata.Header? header)
+ {
+ Assert.NotNull(header);
+ Assert.Equal("author", header.ReadString(Models.Metadata.Header.AuthorKey));
+ Assert.Equal("merged", header.ReadString(Models.Metadata.Header.BiosModeKey));
+ Assert.Equal("build", header.ReadString(Models.Metadata.Header.BuildKey));
+ Assert.NotNull(header.Read(Models.Metadata.Header.CanOpenKey));
+ Assert.Equal("category", header.ReadString(Models.Metadata.Header.CategoryKey));
+ Assert.Equal("comment", header.ReadString(Models.Metadata.Header.CommentKey));
+ Assert.Equal("date", header.ReadString(Models.Metadata.Header.DateKey));
+ Assert.Equal("datversion", header.ReadString(Models.Metadata.Header.DatVersionKey));
+ Assert.True(header.ReadBool(Models.Metadata.Header.DebugKey));
+ Assert.Equal("description", header.ReadString(Models.Metadata.Header.DescriptionKey));
+ Assert.Equal("email", header.ReadString(Models.Metadata.Header.EmailKey));
+ Assert.Equal("emulatorversion", header.ReadString(Models.Metadata.Header.EmulatorVersionKey));
+ Assert.Equal("merged", header.ReadString(Models.Metadata.Header.ForceMergingKey));
+ Assert.Equal("required", header.ReadString(Models.Metadata.Header.ForceNodumpKey));
+ Assert.Equal("zip", header.ReadString(Models.Metadata.Header.ForcePackingKey));
+ Assert.True(header.ReadBool(Models.Metadata.Header.ForceZippingKey));
+ Assert.Equal("header", header.ReadString(Models.Metadata.Header.HeaderKey));
+ Assert.Equal("homepage", header.ReadString(Models.Metadata.Header.HomepageKey));
+ Assert.Equal("id", header.ReadString(Models.Metadata.Header.IdKey));
+ Assert.NotNull(header.Read(Models.Metadata.Header.ImagesKey));
+ Assert.Equal("imfolder", header.ReadString(Models.Metadata.Header.ImFolderKey));
+ Assert.NotNull(header.Read(Models.Metadata.Header.InfosKey));
+ Assert.True(header.ReadBool(Models.Metadata.Header.LockBiosModeKey));
+ Assert.True(header.ReadBool(Models.Metadata.Header.LockRomModeKey));
+ Assert.True(header.ReadBool(Models.Metadata.Header.LockSampleModeKey));
+ Assert.Equal("mameconfig", header.ReadString(Models.Metadata.Header.MameConfigKey));
+ Assert.Equal("name", header.ReadString(Models.Metadata.Header.NameKey));
+ Assert.NotNull(header.Read(Models.Metadata.Header.NewDatKey));
+ Assert.Equal("notes", header.ReadString(Models.Metadata.Header.NotesKey));
+ Assert.Equal("plugin", header.ReadString(Models.Metadata.Header.PluginKey));
+ Assert.Equal("refname", header.ReadString(Models.Metadata.Header.RefNameKey));
+ Assert.Equal("merged", header.ReadString(Models.Metadata.Header.RomModeKey));
+ Assert.Equal("romtitle", header.ReadString(Models.Metadata.Header.RomTitleKey));
+ Assert.Equal("rootdir", header.ReadString(Models.Metadata.Header.RootDirKey));
+ Assert.Equal("merged", header.ReadString(Models.Metadata.Header.SampleModeKey));
+ Assert.Equal("schemalocation", header.ReadString(Models.Metadata.Header.SchemaLocationKey));
+ Assert.Equal("screenshotsheight", header.ReadString(Models.Metadata.Header.ScreenshotsHeightKey));
+ Assert.Equal("screenshotsWidth", header.ReadString(Models.Metadata.Header.ScreenshotsWidthKey));
+ Assert.NotNull(header.Read(Models.Metadata.Header.SearchKey));
+ Assert.Equal("system", header.ReadString(Models.Metadata.Header.SystemKey));
+ Assert.Equal("timestamp", header.ReadString(Models.Metadata.Header.TimestampKey));
+ Assert.Equal("type", header.ReadString(Models.Metadata.Header.TypeKey));
+ Assert.Equal("url", header.ReadString(Models.Metadata.Header.UrlKey));
+ Assert.Equal("version", header.ReadString(Models.Metadata.Header.VersionKey));
+ }
+
+ // TODO: Add reading all item types here
+ private static void ValidateMetadataMachine(Models.Metadata.Machine machine)
+ {
+ Assert.Equal("board", machine.ReadString(Models.Metadata.Machine.BoardKey));
+ Assert.Equal("buttons", machine.ReadString(Models.Metadata.Machine.ButtonsKey));
+ Assert.Equal("category", machine.ReadString(Models.Metadata.Machine.CategoryKey));
+ Assert.Equal("cloneof", machine.ReadString(Models.Metadata.Machine.CloneOfKey));
+ Assert.Equal("cloneofid", machine.ReadString(Models.Metadata.Machine.CloneOfIdKey));
+ Assert.Equal("comment", machine.ReadString(Models.Metadata.Machine.CommentKey));
+ Assert.Equal("company", machine.ReadString(Models.Metadata.Machine.CompanyKey));
+ Assert.Equal("control", machine.ReadString(Models.Metadata.Machine.ControlKey));
+ Assert.Equal("country", machine.ReadString(Models.Metadata.Machine.CountryKey));
+ Assert.Equal("description", machine.ReadString(Models.Metadata.Machine.DescriptionKey));
+ Assert.Equal("dirname", machine.ReadString(Models.Metadata.Machine.DirNameKey));
+ Assert.Equal("displaycount", machine.ReadString(Models.Metadata.Machine.DisplayCountKey));
+ Assert.Equal("displaytype", machine.ReadString(Models.Metadata.Machine.DisplayTypeKey));
+ Assert.Equal("duplicateid", machine.ReadString(Models.Metadata.Machine.DuplicateIDKey));
+ Assert.Equal("emulator", machine.ReadString(Models.Metadata.Machine.EmulatorKey));
+ Assert.Equal("extra", machine.ReadString(Models.Metadata.Machine.ExtraKey));
+ Assert.Equal("favorite", machine.ReadString(Models.Metadata.Machine.FavoriteKey));
+ Assert.Equal("genmsxid", machine.ReadString(Models.Metadata.Machine.GenMSXIDKey));
+ Assert.Equal("history", machine.ReadString(Models.Metadata.Machine.HistoryKey));
+ Assert.Equal("id", machine.ReadString(Models.Metadata.Machine.IdKey));
+ Assert.Equal(ZeroHash.CRC32Str, machine.ReadString(Models.Metadata.Machine.Im1CRCKey));
+ Assert.Equal(ZeroHash.CRC32Str, machine.ReadString(Models.Metadata.Machine.Im2CRCKey));
+ Assert.Equal("imagenumber", machine.ReadString(Models.Metadata.Machine.ImageNumberKey));
+ Assert.Equal("yes", machine.ReadString(Models.Metadata.Machine.IsBiosKey));
+ Assert.Equal("yes", machine.ReadString(Models.Metadata.Machine.IsDeviceKey));
+ Assert.Equal("yes", machine.ReadString(Models.Metadata.Machine.IsMechanicalKey));
+ Assert.Equal("language", machine.ReadString(Models.Metadata.Machine.LanguageKey));
+ Assert.Equal("location", machine.ReadString(Models.Metadata.Machine.LocationKey));
+ Assert.Equal("manufacturer", machine.ReadString(Models.Metadata.Machine.ManufacturerKey));
+ Assert.Equal("name", machine.ReadString(Models.Metadata.Machine.NameKey));
+ Assert.Equal("notes", machine.ReadString(Models.Metadata.Machine.NotesKey));
+ Assert.Equal("playedcount", machine.ReadString(Models.Metadata.Machine.PlayedCountKey));
+ Assert.Equal("playedtime", machine.ReadString(Models.Metadata.Machine.PlayedTimeKey));
+ Assert.Equal("players", machine.ReadString(Models.Metadata.Machine.PlayersKey));
+ Assert.Equal("publisher", machine.ReadString(Models.Metadata.Machine.PublisherKey));
+ Assert.Equal("rebuildto", machine.ReadString(Models.Metadata.Machine.RebuildToKey));
+ Assert.Equal("releasenumber", machine.ReadString(Models.Metadata.Machine.ReleaseNumberKey));
+ Assert.Equal("romof", machine.ReadString(Models.Metadata.Machine.RomOfKey));
+ Assert.Equal("rotation", machine.ReadString(Models.Metadata.Machine.RotationKey));
+ Assert.Equal("yes", machine.ReadString(Models.Metadata.Machine.RunnableKey));
+ Assert.Equal("sampleof", machine.ReadString(Models.Metadata.Machine.SampleOfKey));
+ Assert.Equal("savetype", machine.ReadString(Models.Metadata.Machine.SaveTypeKey));
+ Assert.Equal("sourcefile", machine.ReadString(Models.Metadata.Machine.SourceFileKey));
+ Assert.Equal("sourcerom", machine.ReadString(Models.Metadata.Machine.SourceRomKey));
+ Assert.Equal("status", machine.ReadString(Models.Metadata.Machine.StatusKey));
+ Assert.Equal("yes", machine.ReadString(Models.Metadata.Machine.SupportedKey));
+ Assert.Equal("system", machine.ReadString(Models.Metadata.Machine.SystemKey));
+ Assert.Equal("tags", machine.ReadString(Models.Metadata.Machine.TagsKey));
+ Assert.Equal("year", machine.ReadString(Models.Metadata.Machine.YearKey));
+
+ Models.Metadata.Adjuster[]? adjusters = machine.Read(Models.Metadata.Machine.AdjusterKey);
+ Assert.NotNull(adjusters);
+ Models.Metadata.Adjuster adjuster = Assert.Single(adjusters);
+ ValidateMetadataAdjuster(adjuster);
+
+ Models.Metadata.Archive[]? archives = machine.Read(Models.Metadata.Machine.ArchiveKey);
+ Assert.NotNull(archives);
+ Models.Metadata.Archive archive = Assert.Single(archives);
+ ValidateMetadataArchive(archive);
+
+ Models.Metadata.BiosSet[]? biosSets = machine.Read(Models.Metadata.Machine.BiosSetKey);
+ Assert.NotNull(biosSets);
+ Models.Metadata.BiosSet biosSet = Assert.Single(biosSets);
+ ValidateMetadataBiosSet(biosSet);
+
+ Models.Metadata.Chip[]? chips = machine.Read(Models.Metadata.Machine.ChipKey);
+ Assert.NotNull(chips);
+ Models.Metadata.Chip chip = Assert.Single(chips);
+ ValidateMetadataChip(chip);
+
+ Models.Metadata.Configuration[]? configurations = machine.Read(Models.Metadata.Machine.ConfigurationKey);
+ Assert.NotNull(configurations);
+ Models.Metadata.Configuration configuration = Assert.Single(configurations);
+ ValidateMetadataConfiguration(configuration);
+
+ Models.Metadata.Device[]? devices = machine.Read(Models.Metadata.Machine.DeviceKey);
+ Assert.NotNull(devices);
+ Models.Metadata.Device device = Assert.Single(devices);
+ ValidateMetadataDevice(device);
+
+ Models.Metadata.DeviceRef[]? deviceRefs = machine.Read(Models.Metadata.Machine.DeviceRefKey);
+ Assert.NotNull(deviceRefs);
+ Models.Metadata.DeviceRef deviceRef = Assert.Single(deviceRefs);
+ ValidateMetadataDeviceRef(deviceRef);
+
+ Models.Metadata.DipSwitch[]? dipSwitches = machine.Read(Models.Metadata.Machine.DipSwitchKey);
+ Assert.NotNull(dipSwitches);
+ Models.Metadata.DipSwitch dipSwitch = Assert.Single(dipSwitches);
+ ValidateMetadataDipSwitch(dipSwitch);
+
+ Models.Metadata.Disk[]? disks = machine.Read(Models.Metadata.Machine.DiskKey);
+ Assert.NotNull(disks);
+ Models.Metadata.Disk disk = Assert.Single(disks);
+ ValidateMetadataDisk(disk);
+
+ Models.Metadata.Display[]? displays = machine.Read(Models.Metadata.Machine.DisplayKey);
+ Assert.NotNull(displays);
+ Models.Metadata.Display display = Assert.Single(displays);
+ ValidateMetadataDisplay(display);
+
+ Models.Metadata.Driver? driver = machine.Read(Models.Metadata.Machine.DriverKey);
+ ValidateMetadataDriver(driver);
+
+ // TODO: Implement this validation
+ // Models.Metadata.Dump[]? dumps = machine.Read(Models.Metadata.Machine.DumpKey);
+ // Assert.NotNull(dumps);
+ // Models.Metadata.Dump dump = Assert.Single(dumps);
+ // ValidateMetadataDump(dump);
+
+ Models.Metadata.Feature[]? features = machine.Read(Models.Metadata.Machine.FeatureKey);
+ Assert.NotNull(features);
+ Models.Metadata.Feature feature = Assert.Single(features);
+ ValidateMetadataFeature(feature);
+
+ Models.Metadata.Info[]? infos = machine.Read(Models.Metadata.Machine.InfoKey);
+ Assert.NotNull(infos);
+ Models.Metadata.Info info = Assert.Single(infos);
+ ValidateMetadataInfo(info);
+
+ Models.Metadata.Input? input = machine.Read(Models.Metadata.Machine.InputKey);
+ ValidateMetadataInput(input);
+
+ Models.Metadata.Media[]? media = machine.Read(Models.Metadata.Machine.MediaKey);
+ Assert.NotNull(media);
+ Models.Metadata.Media medium = Assert.Single(media);
+ ValidateMetadataMedia(medium);
+
+ Models.Metadata.Part[]? parts = machine.Read(Models.Metadata.Machine.PartKey);
+ Assert.NotNull(parts);
+ Models.Metadata.Part part = Assert.Single(parts);
+ ValidateMetadataPart(part);
+
+ Models.Metadata.Port[]? ports = machine.Read(Models.Metadata.Machine.PortKey);
+ Assert.NotNull(ports);
+ Models.Metadata.Port port = Assert.Single(ports);
+ ValidateMetadataPort(port);
+
+ Models.Metadata.RamOption[]? ramOptions = machine.Read(Models.Metadata.Machine.RamOptionKey);
+ Assert.NotNull(ramOptions);
+ Models.Metadata.RamOption ramOption = Assert.Single(ramOptions);
+ ValidateMetadataRamOption(ramOption);
+
+ Models.Metadata.Release[]? releases = machine.Read(Models.Metadata.Machine.ReleaseKey);
+ Assert.NotNull(releases);
+ Models.Metadata.Release release = Assert.Single(releases);
+ ValidateMetadataRelease(release);
+
+ Models.Logiqx.Trurip? trurip = machine.Read(Models.Metadata.Machine.TruripKey);
+ ValidateMetadataTrurip(trurip);
+ }
+
+ private static void ValidateMetadataAdjuster(Models.Metadata.Adjuster? adjuster)
+ {
+ Assert.NotNull(adjuster);
+ Assert.True(adjuster.ReadBool(Models.Metadata.Adjuster.DefaultKey));
+ Assert.Equal("name", adjuster.ReadString(Models.Metadata.Adjuster.NameKey));
+
+ Models.Metadata.Condition? condition = adjuster.Read(Models.Metadata.Adjuster.ConditionKey);
+ ValidateMetadataCondition(condition);
+ }
+
+ private static void ValidateMetadataAnalog(Models.Metadata.Analog? analog)
+ {
+ Assert.NotNull(analog);
+ Assert.Equal("mask", analog.ReadString(Models.Metadata.Analog.MaskKey));
+ }
+
+ private static void ValidateMetadataArchive(Models.Metadata.Archive? archive)
+ {
+ Assert.NotNull(archive);
+ Assert.Equal("name", archive.ReadString(Models.Metadata.Archive.NameKey));
+ }
+
+ private static void ValidateMetadataBiosSet(Models.Metadata.BiosSet? biosSet)
+ {
+ Assert.NotNull(biosSet);
+ Assert.True(biosSet.ReadBool(Models.Metadata.BiosSet.DefaultKey));
+ Assert.Equal("description", biosSet.ReadString(Models.Metadata.BiosSet.DescriptionKey));
+ Assert.Equal("name", biosSet.ReadString(Models.Metadata.BiosSet.NameKey));
+ }
+
+ private static void ValidateMetadataChip(Models.Metadata.Chip? chip)
+ {
+ Assert.NotNull(chip);
+ Assert.Equal(12345, chip.ReadLong(Models.Metadata.Chip.ClockKey));
+ Assert.Equal("flags", chip.ReadString(Models.Metadata.Chip.FlagsKey));
+ Assert.Equal("name", chip.ReadString(Models.Metadata.Chip.NameKey));
+ Assert.True(chip.ReadBool(Models.Metadata.Chip.SoundOnlyKey));
+ Assert.Equal("tag", chip.ReadString(Models.Metadata.Chip.TagKey));
+ Assert.Equal("cpu", chip.ReadString(Models.Metadata.Chip.ChipTypeKey));
+ }
+
+ private static void ValidateMetadataCondition(Models.Metadata.Condition? condition)
+ {
+ Assert.NotNull(condition);
+ Assert.Equal("value", condition.ReadString(Models.Metadata.Condition.ValueKey));
+ Assert.Equal("mask", condition.ReadString(Models.Metadata.Condition.MaskKey));
+ Assert.Equal("eq", condition.ReadString(Models.Metadata.Condition.RelationKey));
+ Assert.Equal("tag", condition.ReadString(Models.Metadata.Condition.TagKey));
+ }
+
+ private static void ValidateMetadataConfiguration(Models.Metadata.Configuration? configuration)
+ {
+ Assert.NotNull(configuration);
+ Assert.Equal("mask", configuration.ReadString(Models.Metadata.Configuration.MaskKey));
+ Assert.Equal("name", configuration.ReadString(Models.Metadata.Configuration.NameKey));
+ Assert.Equal("tag", configuration.ReadString(Models.Metadata.Configuration.TagKey));
+
+ Models.Metadata.Condition? condition = configuration.Read(Models.Metadata.Configuration.ConditionKey);
+ ValidateMetadataCondition(condition);
+
+ Models.Metadata.ConfLocation[]? confLocations = configuration.Read(Models.Metadata.Configuration.ConfLocationKey);
+ Assert.NotNull(confLocations);
+ Models.Metadata.ConfLocation? confLocation = Assert.Single(confLocations);
+ ValidateMetadataConfLocation(confLocation);
+
+ Models.Metadata.ConfSetting[]? confSettings = configuration.Read(Models.Metadata.Configuration.ConfSettingKey);
+ Assert.NotNull(confSettings);
+ Models.Metadata.ConfSetting? confSetting = Assert.Single(confSettings);
+ ValidateMetadataConfSetting(confSetting);
+ }
+
+ private static void ValidateMetadataConfLocation(Models.Metadata.ConfLocation? confLocation)
+ {
+ Assert.NotNull(confLocation);
+ Assert.True(confLocation.ReadBool(Models.Metadata.ConfLocation.InvertedKey));
+ Assert.Equal("name", confLocation.ReadString(Models.Metadata.ConfLocation.NameKey));
+ Assert.Equal("number", confLocation.ReadString(Models.Metadata.ConfLocation.NumberKey));
+ }
+
+ private static void ValidateMetadataConfSetting(Models.Metadata.ConfSetting? confSetting)
+ {
+ Assert.NotNull(confSetting);
+ Assert.True(confSetting.ReadBool(Models.Metadata.ConfSetting.DefaultKey));
+ Assert.Equal("name", confSetting.ReadString(Models.Metadata.ConfSetting.NameKey));
+ Assert.Equal("value", confSetting.ReadString(Models.Metadata.ConfSetting.ValueKey));
+
+ Models.Metadata.Condition? condition = confSetting.Read(Models.Metadata.ConfSetting.ConditionKey);
+ ValidateMetadataCondition(condition);
+ }
+
+ private static void ValidateMetadataControl(Models.Metadata.Control? control)
+ {
+ Assert.NotNull(control);
+ Assert.Equal(12345, control.ReadLong(Models.Metadata.Control.ButtonsKey));
+ Assert.Equal(12345, control.ReadLong(Models.Metadata.Control.KeyDeltaKey));
+ Assert.Equal(12345, control.ReadLong(Models.Metadata.Control.MaximumKey));
+ Assert.Equal(12345, control.ReadLong(Models.Metadata.Control.MinimumKey));
+ Assert.Equal(12345, control.ReadLong(Models.Metadata.Control.PlayerKey));
+ Assert.Equal(12345, control.ReadLong(Models.Metadata.Control.ReqButtonsKey));
+ Assert.True(control.ReadBool(Models.Metadata.Control.ReverseKey));
+ Assert.Equal(12345, control.ReadLong(Models.Metadata.Control.SensitivityKey));
+ Assert.Equal("lightgun", control.ReadString(Models.Metadata.Control.ControlTypeKey));
+ Assert.Equal("ways", control.ReadString(Models.Metadata.Control.WaysKey));
+ Assert.Equal("ways2", control.ReadString(Models.Metadata.Control.Ways2Key));
+ Assert.Equal("ways3", control.ReadString(Models.Metadata.Control.Ways3Key));
+ }
+
+ // private static void ValidateMetadataDataArea(DataArea? dataArea)
+ // {
+ // Assert.NotNull(dataArea);
+ // Assert.Equal("big", dataArea.ReadString(Models.Metadata.DataArea.EndiannessKey));
+ // Assert.Equal("name", dataArea.ReadString(Models.Metadata.DataArea.NameKey));
+ // Assert.Equal(12345, dataArea.ReadLong(Models.Metadata.DataArea.SizeKey));
+ // Assert.Equal(64, dataArea.ReadLong(Models.Metadata.DataArea.WidthKey));
+ // }
+
+ private static void ValidateMetadataDevice(Models.Metadata.Device? device)
+ {
+ Assert.NotNull(device);
+ Assert.Equal("fixedimage", device.ReadString(Models.Metadata.Device.FixedImageKey));
+ Assert.Equal("interface", device.ReadString(Models.Metadata.Device.InterfaceKey));
+ Assert.Equal(1, device.ReadLong(Models.Metadata.Device.MandatoryKey));
+ Assert.Equal("tag", device.ReadString(Models.Metadata.Device.TagKey));
+ Assert.Equal("punchtape", device.ReadString(Models.Metadata.Device.DeviceTypeKey));
+
+ Models.Metadata.Extension[]? extensions = device.Read(Models.Metadata.Device.ExtensionKey);
+ Assert.NotNull(extensions);
+ Models.Metadata.Extension? extension = Assert.Single(extensions);
+ ValidateMetadataExtension(extension);
+
+ Models.Metadata.Instance? instance = device.Read(Models.Metadata.Device.InstanceKey);
+ ValidateMetadataInstance(instance);
+ }
+
+ private static void ValidateMetadataDeviceRef(Models.Metadata.DeviceRef? deviceRef)
+ {
+ Assert.NotNull(deviceRef);
+ Assert.Equal("name", deviceRef.ReadString(Models.Metadata.DeviceRef.NameKey));
+ }
+
+ private static void ValidateMetadataDipLocation(Models.Metadata.DipLocation? dipLocation)
+ {
+ Assert.NotNull(dipLocation);
+ Assert.True(dipLocation.ReadBool(Models.Metadata.DipLocation.InvertedKey));
+ Assert.Equal("name", dipLocation.ReadString(Models.Metadata.DipLocation.NameKey));
+ Assert.Equal("number", dipLocation.ReadString(Models.Metadata.DipLocation.NumberKey));
+ }
+
+ private static void ValidateMetadataDipSwitch(Models.Metadata.DipSwitch? dipSwitch)
+ {
+ Assert.NotNull(dipSwitch);
+ Assert.True(dipSwitch.ReadBool(Models.Metadata.DipSwitch.DefaultKey));
+ Assert.Equal("mask", dipSwitch.ReadString(Models.Metadata.DipSwitch.MaskKey));
+ Assert.Equal("name", dipSwitch.ReadString(Models.Metadata.DipSwitch.NameKey));
+ Assert.Equal("tag", dipSwitch.ReadString(Models.Metadata.DipSwitch.TagKey));
+
+ Models.Metadata.Condition? condition = dipSwitch.Read(Models.Metadata.DipSwitch.ConditionKey);
+ ValidateMetadataCondition(condition);
+
+ Models.Metadata.DipLocation[]? dipLocations = dipSwitch.Read(Models.Metadata.DipSwitch.DipLocationKey);
+ Assert.NotNull(dipLocations);
+ Models.Metadata.DipLocation? dipLocation = Assert.Single(dipLocations);
+ ValidateMetadataDipLocation(dipLocation);
+
+ Models.Metadata.DipValue[]? dipValues = dipSwitch.Read(Models.Metadata.DipSwitch.DipValueKey);
+ Assert.NotNull(dipValues);
+ Models.Metadata.DipValue? dipValue = Assert.Single(dipValues);
+ ValidateMetadataDipValue(dipValue);
+
+ string[]? entries = dipSwitch.ReadStringArray(Models.Metadata.DipSwitch.EntryKey);
+ Assert.NotNull(entries);
+ string entry = Assert.Single(entries);
+ Assert.Equal("entry", entry);
+ }
+
+ private static void ValidateMetadataDipValue(Models.Metadata.DipValue? dipValue)
+ {
+ Assert.NotNull(dipValue);
+ Assert.True(dipValue.ReadBool(Models.Metadata.DipValue.DefaultKey));
+ Assert.Equal("name", dipValue.ReadString(Models.Metadata.DipValue.NameKey));
+ Assert.Equal("value", dipValue.ReadString(Models.Metadata.DipValue.ValueKey));
+
+ Models.Metadata.Condition? condition = dipValue.Read(Models.Metadata.DipValue.ConditionKey);
+ ValidateMetadataCondition(condition);
+ }
+
+ private static void ValidateMetadataDisk(Models.Metadata.Disk? disk)
+ {
+ Assert.NotNull(disk);
+ Assert.Equal("flags", disk.ReadString(Models.Metadata.Disk.FlagsKey));
+ Assert.Equal("index", disk.ReadString(Models.Metadata.Disk.IndexKey));
+ Assert.Equal(ZeroHash.MD5Str, disk.ReadString(Models.Metadata.Disk.MD5Key));
+ Assert.Equal("merge", disk.ReadString(Models.Metadata.Disk.MergeKey));
+ Assert.Equal("name", disk.ReadString(Models.Metadata.Disk.NameKey));
+ Assert.True(disk.ReadBool(Models.Metadata.Disk.OptionalKey));
+ Assert.Equal("region", disk.ReadString(Models.Metadata.Disk.RegionKey));
+ Assert.Equal(ZeroHash.SHA1Str, disk.ReadString(Models.Metadata.Disk.SHA1Key));
+ Assert.True(disk.ReadBool(Models.Metadata.Disk.WritableKey));
+ }
+
+ // private static void ValidateMetadataDiskArea(Models.Metadata.DiskArea? diskArea)
+ // {
+ // Assert.NotNull(diskArea);
+ // Assert.Equal("name", diskArea.ReadString(Models.Metadata.DiskArea.NameKey));
+ // }
+
+ private static void ValidateMetadataDisplay(Models.Metadata.Display? display)
+ {
+ Assert.NotNull(display);
+ Assert.True(display.ReadBool(Models.Metadata.Display.FlipXKey));
+ Assert.Equal(12345, display.ReadLong(Models.Metadata.Display.HBEndKey));
+ Assert.Equal(12345, display.ReadLong(Models.Metadata.Display.HBStartKey));
+ Assert.Equal(12345, display.ReadLong(Models.Metadata.Display.HeightKey));
+ Assert.Equal(12345, display.ReadLong(Models.Metadata.Display.HTotalKey));
+ Assert.Equal(12345, display.ReadLong(Models.Metadata.Display.PixClockKey));
+ Assert.Equal(12345, display.ReadLong(Models.Metadata.Display.RefreshKey));
+ Assert.Equal(90, display.ReadLong(Models.Metadata.Display.RotateKey));
+ Assert.Equal("tag", display.ReadString(Models.Metadata.Display.TagKey));
+ Assert.Equal("vector", display.ReadString(Models.Metadata.Display.DisplayTypeKey));
+ Assert.Equal(12345, display.ReadLong(Models.Metadata.Display.VBEndKey));
+ Assert.Equal(12345, display.ReadLong(Models.Metadata.Display.VBStartKey));
+ Assert.Equal(12345, display.ReadLong(Models.Metadata.Display.VTotalKey));
+ Assert.Equal(12345, display.ReadLong(Models.Metadata.Display.WidthKey));
+ }
+
+ private static void ValidateMetadataDriver(Models.Metadata.Driver? driver)
+ {
+ Assert.NotNull(driver);
+ Assert.Equal("plain", driver.ReadString(Models.Metadata.Driver.BlitKey));
+ Assert.Equal("good", driver.ReadString(Models.Metadata.Driver.CocktailKey));
+ Assert.Equal("good", driver.ReadString(Models.Metadata.Driver.ColorKey));
+ Assert.Equal("good", driver.ReadString(Models.Metadata.Driver.EmulationKey));
+ Assert.True(driver.ReadBool(Models.Metadata.Driver.IncompleteKey));
+ Assert.True(driver.ReadBool(Models.Metadata.Driver.NoSoundHardwareKey));
+ Assert.Equal("pallettesize", driver.ReadString(Models.Metadata.Driver.PaletteSizeKey));
+ Assert.True(driver.ReadBool(Models.Metadata.Driver.RequiresArtworkKey));
+ Assert.Equal("supported", driver.ReadString(Models.Metadata.Driver.SaveStateKey));
+ Assert.Equal("good", driver.ReadString(Models.Metadata.Driver.SoundKey));
+ Assert.Equal("good", driver.ReadString(Models.Metadata.Driver.StatusKey));
+ Assert.True(driver.ReadBool(Models.Metadata.Driver.UnofficialKey));
+ }
+
+ private static void ValidateMetadataExtension(Models.Metadata.Extension? extension)
+ {
+ Assert.NotNull(extension);
+ Assert.Equal("name", extension.ReadString(Models.Metadata.Extension.NameKey));
+ }
+
+ private static void ValidateMetadataFeature(Models.Metadata.Feature? feature)
+ {
+ Assert.NotNull(feature);
+ Assert.Equal("name", feature.ReadString(Models.Metadata.Feature.NameKey));
+ Assert.Equal("imperfect", feature.ReadString(Models.Metadata.Feature.OverallKey));
+ Assert.Equal("imperfect", feature.ReadString(Models.Metadata.Feature.StatusKey));
+ Assert.Equal("protection", feature.ReadString(Models.Metadata.Feature.FeatureTypeKey));
+ Assert.Equal("value", feature.ReadString(Models.Metadata.Feature.ValueKey));
+ }
+
+ private static void ValidateMetadataInfo(Models.Metadata.Info? info)
+ {
+ Assert.NotNull(info);
+ Assert.Equal("name", info.ReadString(Models.Metadata.Info.NameKey));
+ Assert.Equal("value", info.ReadString(Models.Metadata.Info.ValueKey));
+ }
+
+ private static void ValidateMetadataInput(Models.Metadata.Input? input)
+ {
+ Assert.NotNull(input);
+ Assert.Equal(12345, input.ReadLong(Models.Metadata.Input.ButtonsKey));
+ Assert.Equal(12345, input.ReadLong(Models.Metadata.Input.CoinsKey));
+ Assert.Equal(12345, input.ReadLong(Models.Metadata.Input.PlayersKey));
+ Assert.True(input.ReadBool(Models.Metadata.Input.ServiceKey));
+ Assert.True(input.ReadBool(Models.Metadata.Input.TiltKey));
+
+ Models.Metadata.Control[]? controls = input.Read(Models.Metadata.Input.ControlKey);
+ Assert.NotNull(controls);
+ Models.Metadata.Control? control = Assert.Single(controls);
+ ValidateMetadataControl(control);
+ }
+
+ private static void ValidateMetadataInstance(Models.Metadata.Instance? instance)
+ {
+ Assert.NotNull(instance);
+ Assert.Equal("briefname", instance.ReadString(Models.Metadata.Instance.BriefNameKey));
+ Assert.Equal("name", instance.ReadString(Models.Metadata.Instance.NameKey));
+ }
+
+ private static void ValidateMetadataMedia(Models.Metadata.Media? media)
+ {
+ Assert.NotNull(media);
+ Assert.Equal(ZeroHash.MD5Str, media.ReadString(Models.Metadata.Media.MD5Key));
+ Assert.Equal("name", media.ReadString(Models.Metadata.Media.NameKey));
+ Assert.Equal(ZeroHash.SHA1Str, media.ReadString(Models.Metadata.Media.SHA1Key));
+ Assert.Equal(ZeroHash.SHA256Str, media.ReadString(Models.Metadata.Media.SHA256Key));
+ Assert.Equal(ZeroHash.SpamSumStr, media.ReadString(Models.Metadata.Media.SpamSumKey));
+ }
+
+ // TODO: Ensure type arrays are validated
+ private static void ValidateMetadataPart(Models.Metadata.Part? part)
+ {
+ Assert.NotNull(part);
+ Assert.Equal("interface", part.ReadString(Models.Metadata.Part.InterfaceKey));
+ Assert.Equal("name", part.ReadString(Models.Metadata.Part.NameKey));
+ }
+
+ // private static void ValidateMetadataPartFeature(Models.Metadata.PartFeature? partFeature)
+ // {
+ // Assert.NotNull(partFeature);
+ // Assert.Equal("name", partFeature.ReadString(Models.Metadata.Feature.NameKey));
+ // Assert.Equal("imperfect", partFeature.ReadString(Models.Metadata.Feature.OverallKey));
+ // Assert.Equal("imperfect", partFeature.ReadString(Models.Metadata.Feature.StatusKey));
+ // Assert.Equal("protection", partFeature.ReadString(Models.Metadata.Feature.FeatureTypeKey));
+ // Assert.Equal("value", partFeature.ReadString(Models.Metadata.Feature.ValueKey));
+
+ // Part? part = partFeature.Read(PartFeature.PartKey);
+ // ValidateMetadataPart(part);
+ // }
+
+ private static void ValidateMetadataPort(Models.Metadata.Port? port)
+ {
+ Assert.NotNull(port);
+ Assert.Equal("tag", port.ReadString(Models.Metadata.Port.TagKey));
+
+ Models.Metadata.Analog[]? dipValues = port.Read(Models.Metadata.Port.AnalogKey);
+ Assert.NotNull(dipValues);
+ Models.Metadata.Analog? dipValue = Assert.Single(dipValues);
+ ValidateMetadataAnalog(dipValue);
+ }
+
+ private static void ValidateMetadataRamOption(Models.Metadata.RamOption? ramOption)
+ {
+ Assert.NotNull(ramOption);
+ Assert.Equal("content", ramOption.ReadString(Models.Metadata.RamOption.ContentKey));
+ Assert.True(ramOption.ReadBool(Models.Metadata.RamOption.DefaultKey));
+ Assert.Equal("name", ramOption.ReadString(Models.Metadata.RamOption.NameKey));
+ }
+
+ private static void ValidateMetadataRelease(Models.Metadata.Release? release)
+ {
+ Assert.NotNull(release);
+ Assert.Equal("date", release.ReadString(Models.Metadata.Release.DateKey));
+ Assert.True(release.ReadBool(Models.Metadata.Release.DefaultKey));
+ Assert.Equal("language", release.ReadString(Models.Metadata.Release.LanguageKey));
+ Assert.Equal("name", release.ReadString(Models.Metadata.Release.NameKey));
+ Assert.Equal("region", release.ReadString(Models.Metadata.Release.RegionKey));
+ }
+
+ // private static void ValidateMetadataRom(Models.Metadata.Rom? rom)
+ // {
+ // Assert.NotNull(rom);
+ // Assert.Equal("album", rom.ReadString(Models.Metadata.Rom.AlbumKey));
+ // Assert.Equal("alt_romname", rom.ReadString(Models.Metadata.Rom.AltRomnameKey));
+ // Assert.Equal("alt_title", rom.ReadString(Models.Metadata.Rom.AltTitleKey));
+ // Assert.Equal("artist", rom.ReadString(Models.Metadata.Rom.ArtistKey));
+ // Assert.Equal("asr_detected_lang", rom.ReadString(Models.Metadata.Rom.ASRDetectedLangKey));
+ // Assert.Equal("asr_detected_lang_conf", rom.ReadString(Models.Metadata.Rom.ASRDetectedLangConfKey));
+ // Assert.Equal("asr_transcribed_lang", rom.ReadString(Models.Metadata.Rom.ASRTranscribedLangKey));
+ // Assert.Equal("bios", rom.ReadString(Models.Metadata.Rom.BiosKey));
+ // Assert.Equal("bitrate", rom.ReadString(Models.Metadata.Rom.BitrateKey));
+ // Assert.Equal("btih", rom.ReadString(Models.Metadata.Rom.BitTorrentMagnetHashKey));
+ // Assert.Equal("cloth_cover_detection_module_version", rom.ReadString(Models.Metadata.Rom.ClothCoverDetectionModuleVersionKey));
+ // Assert.Equal("collection-catalog-number", rom.ReadString(Models.Metadata.Rom.CollectionCatalogNumberKey));
+ // Assert.Equal("comment", rom.ReadString(Models.Metadata.Rom.CommentKey));
+ // Assert.Equal(ZeroHash.CRC32Str, rom.ReadString(Models.Metadata.Rom.CRCKey));
+ // Assert.Equal("creator", rom.ReadString(Models.Metadata.Rom.CreatorKey));
+ // Assert.Equal("date", rom.ReadString(Models.Metadata.Rom.DateKey));
+ // Assert.True(rom.ReadBool(Models.Metadata.Rom.DisposeKey));
+ // Assert.Equal("extension", rom.ReadString(Models.Metadata.Rom.ExtensionKey));
+ // Assert.Equal(12345, rom.ReadLong(Models.Metadata.Rom.FileCountKey));
+ // Assert.True(rom.ReadBool(Models.Metadata.Rom.FileIsAvailableKey));
+ // Assert.Equal("flags", rom.ReadString(Models.Metadata.Rom.FlagsKey));
+ // Assert.Equal("format", rom.ReadString(Models.Metadata.Rom.FormatKey));
+ // Assert.Equal("header", rom.ReadString(Models.Metadata.Rom.HeaderKey));
+ // Assert.Equal("height", rom.ReadString(Models.Metadata.Rom.HeightKey));
+ // Assert.Equal("hocr_char_to_word_hocr_version", rom.ReadString(Models.Metadata.Rom.hOCRCharToWordhOCRVersionKey));
+ // Assert.Equal("hocr_char_to_word_module_version", rom.ReadString(Models.Metadata.Rom.hOCRCharToWordModuleVersionKey));
+ // Assert.Equal("hocr_fts_text_hocr_version", rom.ReadString(Models.Metadata.Rom.hOCRFtsTexthOCRVersionKey));
+ // Assert.Equal("hocr_fts_text_module_version", rom.ReadString(Models.Metadata.Rom.hOCRFtsTextModuleVersionKey));
+ // Assert.Equal("hocr_pageindex_hocr_version", rom.ReadString(Models.Metadata.Rom.hOCRPageIndexhOCRVersionKey));
+ // Assert.Equal("hocr_pageindex_module_version", rom.ReadString(Models.Metadata.Rom.hOCRPageIndexModuleVersionKey));
+ // Assert.True(rom.ReadBool(Models.Metadata.Rom.InvertedKey));
+ // Assert.Equal("mtime", rom.ReadString(Models.Metadata.Rom.LastModifiedTimeKey));
+ // Assert.Equal("length", rom.ReadString(Models.Metadata.Rom.LengthKey));
+ // Assert.Equal("load16_byte", rom.ReadString(Models.Metadata.Rom.LoadFlagKey));
+ // Assert.Equal("matrix_number", rom.ReadString(Models.Metadata.Rom.MatrixNumberKey));
+ // Assert.Equal(ZeroHash.GetString(HashType.MD2), rom.ReadString(Models.Metadata.Rom.MD2Key));
+ // Assert.Equal(ZeroHash.GetString(HashType.MD4), rom.ReadString(Models.Metadata.Rom.MD4Key));
+ // Assert.Equal(ZeroHash.MD5Str, rom.ReadString(Models.Metadata.Rom.MD5Key));
+ // Assert.Null(rom.ReadString(Models.Metadata.Rom.OpenMSXMediaType)); // Omit due to other test
+ // Assert.Equal("merge", rom.ReadString(Models.Metadata.Rom.MergeKey));
+ // Assert.True(rom.ReadBool(Models.Metadata.Rom.MIAKey));
+ // Assert.Equal("name", rom.ReadString(Models.Metadata.Rom.NameKey));
+ // Assert.Equal("ocr", rom.ReadString(Models.Metadata.Rom.TesseractOCRKey));
+ // Assert.Equal("ocr_converted", rom.ReadString(Models.Metadata.Rom.TesseractOCRConvertedKey));
+ // Assert.Equal("ocr_detected_lang", rom.ReadString(Models.Metadata.Rom.TesseractOCRDetectedLangKey));
+ // Assert.Equal("ocr_detected_lang_conf", rom.ReadString(Models.Metadata.Rom.TesseractOCRDetectedLangConfKey));
+ // Assert.Equal("ocr_detected_script", rom.ReadString(Models.Metadata.Rom.TesseractOCRDetectedScriptKey));
+ // Assert.Equal("ocr_detected_script_conf", rom.ReadString(Models.Metadata.Rom.TesseractOCRDetectedScriptConfKey));
+ // Assert.Equal("ocr_module_version", rom.ReadString(Models.Metadata.Rom.TesseractOCRModuleVersionKey));
+ // Assert.Equal("ocr_parameters", rom.ReadString(Models.Metadata.Rom.TesseractOCRParametersKey));
+ // Assert.Equal("offset", rom.ReadString(Models.Metadata.Rom.OffsetKey));
+ // Assert.True(rom.ReadBool(Models.Metadata.Rom.OptionalKey));
+ // Assert.Equal("original", rom.ReadString(Models.Metadata.Rom.OriginalKey));
+ // Assert.Equal("pdf_module_version", rom.ReadString(Models.Metadata.Rom.PDFModuleVersionKey));
+ // Assert.Equal("preview-image", rom.ReadString(Models.Metadata.Rom.PreviewImageKey));
+ // Assert.Equal("publisher", rom.ReadString(Models.Metadata.Rom.PublisherKey));
+ // Assert.Equal("region", rom.ReadString(Models.Metadata.Rom.RegionKey));
+ // Assert.Equal("remark", rom.ReadString(Models.Metadata.Rom.RemarkKey));
+ // Assert.Equal("rotation", rom.ReadString(Models.Metadata.Rom.RotationKey));
+ // Assert.Equal("serial", rom.ReadString(Models.Metadata.Rom.SerialKey));
+ // Assert.Equal(ZeroHash.SHA1Str, rom.ReadString(Models.Metadata.Rom.SHA1Key));
+ // Assert.Equal(ZeroHash.SHA256Str, rom.ReadString(Models.Metadata.Rom.SHA256Key));
+ // Assert.Equal(ZeroHash.SHA384Str, rom.ReadString(Models.Metadata.Rom.SHA384Key));
+ // Assert.Equal(ZeroHash.SHA512Str, rom.ReadString(Models.Metadata.Rom.SHA512Key));
+ // Assert.Equal(12345, rom.ReadLong(Models.Metadata.Rom.SizeKey));
+ // Assert.True(rom.ReadBool(Models.Metadata.Rom.SoundOnlyKey));
+ // Assert.Equal("source", rom.ReadString(Models.Metadata.Rom.SourceKey));
+ // Assert.Equal(ZeroHash.SpamSumStr, rom.ReadString(Models.Metadata.Rom.SpamSumKey));
+ // Assert.Equal("start", rom.ReadString(Models.Metadata.Rom.StartKey));
+ // Assert.Equal("good", rom.ReadString(Models.Metadata.Rom.StatusKey));
+ // Assert.Equal("summation", rom.ReadString(Models.Metadata.Rom.SummationKey));
+ // Assert.Equal("title", rom.ReadString(Models.Metadata.Rom.TitleKey));
+ // Assert.Equal("track", rom.ReadString(Models.Metadata.Rom.TrackKey));
+ // Assert.Equal("type", rom.ReadString(Models.Metadata.Rom.OpenMSXType));
+ // Assert.Equal("value", rom.ReadString(Models.Metadata.Rom.ValueKey));
+ // Assert.Equal("whisper_asr_module_version", rom.ReadString(Models.Metadata.Rom.WhisperASRModuleVersionKey));
+ // Assert.Equal("whisper_model_hash", rom.ReadString(Models.Metadata.Rom.WhisperModelHashKey));
+ // Assert.Equal("whisper_model_name", rom.ReadString(Models.Metadata.Rom.WhisperModelNameKey));
+ // Assert.Equal("whisper_version", rom.ReadString(Models.Metadata.Rom.WhisperVersionKey));
+ // Assert.Equal("width", rom.ReadString(Models.Metadata.Rom.WidthKey));
+ // Assert.Equal("word_conf_0_10", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval0To10Key));
+ // Assert.Equal("word_conf_11_20", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval11To20Key));
+ // Assert.Equal("word_conf_21_30", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval21To30Key));
+ // Assert.Equal("word_conf_31_40", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval31To40Key));
+ // Assert.Equal("word_conf_41_50", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval41To50Key));
+ // Assert.Equal("word_conf_51_60", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval51To60Key));
+ // Assert.Equal("word_conf_61_70", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval61To70Key));
+ // Assert.Equal("word_conf_71_80", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval71To80Key));
+ // Assert.Equal("word_conf_81_90", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval81To90Key));
+ // Assert.Equal("word_conf_91_100", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval91To100Key));
+ // Assert.Equal(ZeroHash.GetString(HashType.XxHash3), rom.ReadString(Models.Metadata.Rom.xxHash364Key));
+ // Assert.Equal(ZeroHash.GetString(HashType.XxHash128), rom.ReadString(Models.Metadata.Rom.xxHash3128Key));
+ // }
+
+ // private static void ValidateMetadataSample(Models.Metadata.Sample? sample)
+ // {
+ // Assert.NotNull(sample);
+ // Assert.Equal("name", sample.ReadString(Models.Metadata.Sample.NameKey));
+ // }
+
+ // private static void ValidateMetadataSharedFeat(Models.Metadata.SharedFeat? sharedFeat)
+ // {
+ // Assert.NotNull(sharedFeat);
+ // Assert.Equal("name", sharedFeat.ReadString(Models.Metadata.SharedFeat.NameKey));
+ // Assert.Equal("value", sharedFeat.ReadString(Models.Metadata.SharedFeat.ValueKey));
+ // }
+
+ // private static void ValidateMetadataSlot(Models.Metadata.Slot? slot)
+ // {
+ // Assert.NotNull(slot);
+ // Assert.Equal("name", slot.ReadString(Models.Metadata.Slot.NameKey));
+
+ // SlotOption[]? slotOptions = slot.Read(Models.Metadata.Slot.SlotOptionKey);
+ // Assert.NotNull(slotOptions);
+ // SlotOption? slotOption = Assert.Single(slotOptions);
+ // ValidateMetadataSlotOption(slotOption);
+ // }
+
+ // private static void ValidateMetadataSlotOption(Models.Metadata.SlotOption? slotOption)
+ // {
+ // Assert.NotNull(slotOption);
+ // Assert.True(slotOption.ReadBool(Models.Metadata.SlotOption.DefaultKey));
+ // Assert.Equal("devname", slotOption.ReadString(Models.Metadata.SlotOption.DevNameKey));
+ // Assert.Equal("name", slotOption.ReadString(Models.Metadata.SlotOption.NameKey));
+ // }
+
+ // private static void ValidateMetadataSoftwareList(Models.Metadata.SoftwareList? softwareList)
+ // {
+ // Assert.NotNull(softwareList);
+ // Assert.Equal("description", softwareList.ReadString(Models.Metadata.SoftwareList.DescriptionKey));
+ // Assert.Equal("filter", softwareList.ReadString(Models.Metadata.SoftwareList.FilterKey));
+ // Assert.Equal("name", softwareList.ReadString(Models.Metadata.SoftwareList.NameKey));
+ // Assert.Equal("notes", softwareList.ReadString(Models.Metadata.SoftwareList.NotesKey));
+ // // TODO: Figure out why Models.Metadata.SoftwareList.SoftwareKey doesn't get processed
+ // Assert.Equal("original", softwareList.ReadString(Models.Metadata.SoftwareList.StatusKey));
+ // Assert.Equal("tag", softwareList.ReadString(Models.Metadata.SoftwareList.TagKey));
+ // }
+
+ // private static void ValidateMetadataSound(Models.Metadata.Sound? sound)
+ // {
+ // Assert.NotNull(sound);
+ // Assert.Equal(12345, sound.ReadLong(Models.Metadata.Sound.ChannelsKey));
+ // }
+
+ private static void ValidateMetadataTrurip(Models.Logiqx.Trurip? trurip)
+ {
+ Assert.NotNull(trurip);
+ Assert.Equal("titleid", trurip.TitleID);
+ Assert.Equal("publisher", trurip.Publisher);
+ Assert.Equal("developer", trurip.Developer);
+ Assert.Equal("year", trurip.Year);
+ Assert.Equal("genre", trurip.Genre);
+ Assert.Equal("subgenre", trurip.Subgenre);
+ Assert.Equal("ratings", trurip.Ratings);
+ Assert.Equal("score", trurip.Score);
+ Assert.Equal("players", trurip.Players);
+ Assert.Equal("enabled", trurip.Enabled);
+ Assert.Equal("True", trurip.CRC);
+ Assert.Equal("source", trurip.Source);
+ Assert.Equal("cloneof", trurip.CloneOf);
+ Assert.Equal("relatedto", trurip.RelatedTo);
+ }
+
+ // private static void ValidateMetadataVideo(Models.Metadata.Video? video)
+ // {
+ // Assert.NotNull(video);
+ // Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.AspectXKey));
+ // Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.AspectYKey));
+ // Assert.Equal("vector", video.ReadString(Models.Metadata.Video.DisplayTypeKey));
+ // Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.HeightKey));
+ // Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.RefreshKey));
+ // Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.WidthKey));
+ // Assert.Equal(90, video.ReadLong(Models.Metadata.Video.RotateKey));
+ // }
+
+ #endregion
}
}
\ No newline at end of file
diff --git a/SabreTools.DatFiles/DatFile.FromMetadata.cs b/SabreTools.DatFiles/DatFile.FromMetadata.cs
index 18bf2b5a..b307ded3 100644
--- a/SabreTools.DatFiles/DatFile.FromMetadata.cs
+++ b/SabreTools.DatFiles/DatFile.FromMetadata.cs
@@ -1,6 +1,7 @@
-using System.Collections.Generic;
+using SabreTools.Core;
using SabreTools.Core.Tools;
using SabreTools.DatItems;
+using SabreTools.DatItems.Formats;
namespace SabreTools.DatFiles
{
@@ -32,7 +33,7 @@ namespace SabreTools.DatFiles
ConvertHeader(header, keep);
// Get the machines from the metadata
- var machines = ReadItemArray(item, Models.Metadata.MetadataFile.MachineKey);
+ var machines = item.ReadItemArray(Models.Metadata.MetadataFile.MachineKey);
if (machines != null)
ConvertMachines(machines, source, sourceIndex, statsOnly);
}
@@ -200,172 +201,145 @@ namespace SabreTools.DatFiles
if (item == null || item.Count == 0)
return;
- // Create an internal machine
+ // Create an internal machine and add to the dictionary
var machine = new Machine(item);
-
- // Process flag values
- if (machine.GetStringFieldValue(Models.Metadata.Machine.Im1CRCKey) != null)
- machine.SetFieldValue(Models.Metadata.Machine.Im1CRCKey, TextHelper.NormalizeCRC32(machine.GetStringFieldValue(Models.Metadata.Machine.Im1CRCKey)));
- if (machine.GetStringFieldValue(Models.Metadata.Machine.Im2CRCKey) != null)
- machine.SetFieldValue(Models.Metadata.Machine.Im2CRCKey, TextHelper.NormalizeCRC32(machine.GetStringFieldValue(Models.Metadata.Machine.Im2CRCKey)));
- if (machine.GetBoolFieldValue(Models.Metadata.Machine.IsBiosKey) != null)
- machine.SetFieldValue(Models.Metadata.Machine.IsBiosKey, machine.GetBoolFieldValue(Models.Metadata.Machine.IsBiosKey).FromYesNo());
- if (machine.GetBoolFieldValue(Models.Metadata.Machine.IsDeviceKey) != null)
- machine.SetFieldValue(Models.Metadata.Machine.IsDeviceKey, machine.GetBoolFieldValue(Models.Metadata.Machine.IsDeviceKey).FromYesNo());
- if (machine.GetBoolFieldValue(Models.Metadata.Machine.IsMechanicalKey) != null)
- machine.SetFieldValue(Models.Metadata.Machine.IsMechanicalKey, machine.GetBoolFieldValue(Models.Metadata.Machine.IsMechanicalKey).FromYesNo());
- if (machine.GetStringFieldValue(Models.Metadata.Machine.SupportedKey) != null)
- machine.SetFieldValue(Models.Metadata.Machine.SupportedKey, machine.GetStringFieldValue(Models.Metadata.Machine.SupportedKey).AsEnumValue().AsStringValue());
-
- // Handle Trurip object, if it exists
- if (item.ContainsKey(Models.Metadata.Machine.TruripKey))
- {
- var truripItem = item.Read(Models.Metadata.Machine.TruripKey);
- if (truripItem != null)
- {
- var trurip = new DatItems.Trurip(truripItem);
- machine.SetFieldValue(Models.Metadata.Machine.TruripKey, trurip);
- }
- }
-
- // Add the machine to the dictionary
long machineIndex = ItemsDB.AddMachine(machine);
// Convert items in the machine
if (item.ContainsKey(Models.Metadata.Machine.AdjusterKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.AdjusterKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.AdjusterKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.ArchiveKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.ArchiveKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.ArchiveKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.BiosSetKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.BiosSetKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.BiosSetKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.ChipKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.ChipKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.ChipKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.ConfigurationKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.ConfigurationKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.ConfigurationKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.DeviceKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.DeviceKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.DeviceKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.DeviceRefKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.DeviceRefKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.DeviceRefKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.DipSwitchKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.DipSwitchKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.DipSwitchKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.DiskKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.DiskKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.DiskKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.DisplayKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.DisplayKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.DisplayKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.DriverKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.DriverKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.DriverKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.DumpKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.DumpKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.DumpKey);
string? machineName = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly, machineName);
}
if (item.ContainsKey(Models.Metadata.Machine.FeatureKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.FeatureKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.FeatureKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.InfoKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.InfoKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.InfoKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.InputKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.InputKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.InputKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.MediaKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.MediaKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.MediaKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.PartKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.PartKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.PartKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.PortKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.PortKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.PortKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.RamOptionKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.RamOptionKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.RamOptionKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.ReleaseKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.ReleaseKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.ReleaseKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.RomKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.RomKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.RomKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.SampleKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.SampleKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.SampleKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.SharedFeatKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.SharedFeatKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.SharedFeatKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.SlotKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.SlotKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.SlotKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.SoftwareListKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.SoftwareListKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.SoftwareListKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.SoundKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.SoundKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.SoundKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
if (item.ContainsKey(Models.Metadata.Machine.VideoKey))
{
- var items = ReadItemArray(item, Models.Metadata.Machine.VideoKey);
+ var items = item.ReadItemArray(Models.Metadata.Machine.VideoKey);
ProcessItems(items, machine, machineIndex, source, sourceIndex, statsOnly);
}
}
@@ -388,27 +362,10 @@ namespace SabreTools.DatFiles
// Loop through the items and add
foreach (var item in items)
{
- var datItem = new DatItems.Formats.Adjuster(item);
- datItem.SetFieldValue(DatItems.DatItem.SourceKey, source);
+ var datItem = new Adjuster(item);
+ datItem.SetFieldValue(DatItem.SourceKey, source);
datItem.CopyMachineInformation(machine);
- // Process flag values
- if (datItem.GetBoolFieldValue(Models.Metadata.Adjuster.DefaultKey) != null)
- datItem.SetFieldValue(Models.Metadata.Adjuster.DefaultKey, datItem.GetBoolFieldValue(Models.Metadata.Adjuster.DefaultKey).FromYesNo());
-
- // Handle subitems
- var condition = item.Read(Models.Metadata.Adjuster.ConditionKey);
- if (condition != null)
- {
- var subItem = new DatItems.Formats.Condition(condition);
-
- // Process flag values
- if (subItem.GetStringFieldValue(Models.Metadata.Condition.RelationKey) != null)
- subItem.SetFieldValue(Models.Metadata.Condition.RelationKey, subItem.GetStringFieldValue(Models.Metadata.Condition.RelationKey).AsEnumValue().AsStringValue());
-
- datItem.SetFieldValue(Models.Metadata.Adjuster.ConditionKey, subItem);
- }
-
Items.AddItem(datItem, statsOnly);
ItemsDB.AddItem(datItem, machineIndex, sourceIndex, statsOnly);
}
@@ -432,8 +389,8 @@ namespace SabreTools.DatFiles
// Loop through the items and add
foreach (var item in items)
{
- var datItem = new DatItems.Formats.Archive(item);
- datItem.SetFieldValue(DatItems.DatItem.SourceKey, source);
+ var datItem = new Archive(item);
+ datItem.SetFieldValue(DatItem.SourceKey, source);
datItem.CopyMachineInformation(machine);
Items.AddItem(datItem, statsOnly);
@@ -459,14 +416,10 @@ namespace SabreTools.DatFiles
// Loop through the items and add
foreach (var item in items)
{
- var datItem = new DatItems.Formats.BiosSet(item);
- datItem.SetFieldValue(DatItems.DatItem.SourceKey, source);
+ var datItem = new BiosSet(item);
+ datItem.SetFieldValue(DatItem.SourceKey, source);
datItem.CopyMachineInformation(machine);
- // Process flag values
- if (datItem.GetBoolFieldValue(Models.Metadata.BiosSet.DefaultKey) != null)
- datItem.SetFieldValue(Models.Metadata.BiosSet.DefaultKey, datItem.GetBoolFieldValue(Models.Metadata.BiosSet.DefaultKey).FromYesNo());
-
Items.AddItem(datItem, statsOnly);
ItemsDB.AddItem(datItem, machineIndex, sourceIndex, statsOnly);
}
@@ -490,16 +443,10 @@ namespace SabreTools.DatFiles
// Loop through the items and add
foreach (var item in items)
{
- var datItem = new DatItems.Formats.Chip(item);
- datItem.SetFieldValue(DatItems.DatItem.SourceKey, source);
+ var datItem = new Chip(item);
+ datItem.SetFieldValue(DatItem.SourceKey, source);
datItem.CopyMachineInformation(machine);
- // Process flag values
- if (datItem.GetBoolFieldValue(Models.Metadata.Chip.SoundOnlyKey) != null)
- datItem.SetFieldValue(Models.Metadata.Chip.SoundOnlyKey, datItem.GetBoolFieldValue(Models.Metadata.Chip.SoundOnlyKey).FromYesNo());
- if (datItem.GetStringFieldValue(Models.Metadata.Chip.ChipTypeKey) != null)
- datItem.SetFieldValue(Models.Metadata.Chip.ChipTypeKey, datItem.GetStringFieldValue(Models.Metadata.Chip.ChipTypeKey).AsEnumValue().AsStringValue());
-
Items.AddItem(datItem, statsOnly);
ItemsDB.AddItem(datItem, machineIndex, sourceIndex, statsOnly);
}
@@ -523,71 +470,10 @@ namespace SabreTools.DatFiles
// Loop through the items and add
foreach (var item in items)
{
- var datItem = new DatItems.Formats.Configuration(item);
- datItem.SetFieldValue(DatItems.DatItem.SourceKey, source);
+ var datItem = new Configuration(item);
+ datItem.SetFieldValue(DatItem.SourceKey, source);
datItem.CopyMachineInformation(machine);
- // Handle subitems
- var condition = item.Read(Models.Metadata.Configuration.ConditionKey);
- if (condition != null)
- {
- var subItem = new DatItems.Formats.Condition(condition);
-
- // Process flag values
- if (subItem.GetStringFieldValue(Models.Metadata.Condition.RelationKey) != null)
- subItem.SetFieldValue(Models.Metadata.Condition.RelationKey, subItem.GetStringFieldValue(Models.Metadata.Condition.RelationKey).AsEnumValue().AsStringValue());
-
- datItem.SetFieldValue(Models.Metadata.Configuration.ConditionKey, subItem);
- }
-
- var confLocations = ReadItemArray(item, Models.Metadata.Configuration.ConfLocationKey);
- if (confLocations != null)
- {
- List subLocations = [];
- foreach (var location in confLocations)
- {
- var subItem = new DatItems.Formats.ConfLocation(location);
-
- // Process flag values
- if (subItem.GetBoolFieldValue(Models.Metadata.ConfLocation.InvertedKey) != null)
- subItem.SetFieldValue(Models.Metadata.ConfLocation.InvertedKey, subItem.GetBoolFieldValue(Models.Metadata.ConfLocation.InvertedKey).FromYesNo());
-
- subLocations.Add(subItem);
- }
-
- datItem.SetFieldValue(Models.Metadata.Configuration.ConfLocationKey, [.. subLocations]);
- }
-
- var confSettings = ReadItemArray(item, Models.Metadata.Configuration.ConfSettingKey);
- if (confSettings != null)
- {
- List subValues = [];
- foreach (var setting in confSettings)
- {
- var subItem = new DatItems.Formats.ConfSetting(setting);
-
- // Process flag values
- if (subItem.GetBoolFieldValue(Models.Metadata.ConfSetting.DefaultKey) != null)
- subItem.SetFieldValue(Models.Metadata.ConfSetting.DefaultKey, subItem.GetBoolFieldValue(Models.Metadata.ConfSetting.DefaultKey).FromYesNo());
-
- var subCondition = subItem.GetFieldValue(Models.Metadata.ConfSetting.ConditionKey);
- if (subCondition != null)
- {
- var subSubItem = new DatItems.Formats.Condition(subCondition);
-
- // Process flag values
- if (subSubItem.GetStringFieldValue(Models.Metadata.Condition.RelationKey) != null)
- subSubItem.SetFieldValue(Models.Metadata.Condition.RelationKey, subSubItem.GetStringFieldValue(Models.Metadata.Condition.RelationKey).AsEnumValue().AsStringValue());
-
- subItem.SetFieldValue(Models.Metadata.ConfSetting.ConditionKey, subSubItem);
- }
-
- subValues.Add(subItem);
- }
-
- datItem.SetFieldValue(Models.Metadata.Configuration.ConfSettingKey, [.. subValues]);
- }
-
Items.AddItem(datItem, statsOnly);
ItemsDB.AddItem(datItem, machineIndex, sourceIndex, statsOnly);
}
@@ -611,37 +497,10 @@ namespace SabreTools.DatFiles
// Loop through the items and add
foreach (var item in items)
{
- var datItem = new DatItems.Formats.Device(item);
- datItem.SetFieldValue(DatItems.DatItem.SourceKey, source);
+ var datItem = new Device(item);
+ datItem.SetFieldValue(DatItem.SourceKey, source);
datItem.CopyMachineInformation(machine);
- // Process flag values
- if (datItem.GetBoolFieldValue(Models.Metadata.Device.MandatoryKey) != null)
- datItem.SetFieldValue(Models.Metadata.Device.MandatoryKey, datItem.GetBoolFieldValue(Models.Metadata.Device.MandatoryKey).FromYesNo());
- if (datItem.GetStringFieldValue(Models.Metadata.Device.DeviceTypeKey) != null)
- datItem.SetFieldValue(Models.Metadata.Device.DeviceTypeKey, datItem.GetStringFieldValue(Models.Metadata.Device.DeviceTypeKey).AsEnumValue().AsStringValue());
-
- // Handle subitems
- var instance = item.Read(Models.Metadata.Device.InstanceKey);
- if (instance != null)
- {
- var subItem = new DatItems.Formats.Instance(instance);
- datItem.SetFieldValue(Models.Metadata.Device.InstanceKey, subItem);
- }
-
- var extensions = ReadItemArray(item, Models.Metadata.Device.ExtensionKey);
- if (extensions != null)
- {
- List subExtensions = [];
- foreach (var extension in extensions)
- {
- var subItem = new DatItems.Formats.Extension(extension);
- subExtensions.Add(subItem);
- }
-
- datItem.SetFieldValue(Models.Metadata.Device.ExtensionKey, [.. subExtensions]);
- }
-
Items.AddItem(datItem, statsOnly);
ItemsDB.AddItem(datItem, machineIndex, sourceIndex, statsOnly);
}
@@ -665,8 +524,8 @@ namespace SabreTools.DatFiles
// Loop through the items and add
foreach (var item in items)
{
- var datItem = new DatItems.Formats.DeviceRef(item);
- datItem.SetFieldValue(DatItems.DatItem.SourceKey, source);
+ var datItem = new DeviceRef(item);
+ datItem.SetFieldValue(DatItem.SourceKey, source);
datItem.CopyMachineInformation(machine);
Items.AddItem(datItem, statsOnly);
@@ -692,75 +551,10 @@ namespace SabreTools.DatFiles
// Loop through the items and add
foreach (var item in items)
{
- var datItem = new DatItems.Formats.DipSwitch(item);
- datItem.SetFieldValue(DatItems.DatItem.SourceKey, source);
+ var datItem = new DipSwitch(item);
+ datItem.SetFieldValue(DatItem.SourceKey, source);
datItem.CopyMachineInformation(machine);
- // Process flag values
- if (datItem.GetBoolFieldValue(Models.Metadata.DipSwitch.DefaultKey) != null)
- datItem.SetFieldValue(Models.Metadata.DipSwitch.DefaultKey, datItem.GetBoolFieldValue(Models.Metadata.DipSwitch.DefaultKey).FromYesNo());
-
- // Handle subitems
- var condition = item.Read(Models.Metadata.DipSwitch.ConditionKey);
- if (condition != null)
- {
- var subItem = new DatItems.Formats.Condition(condition);
-
- // Process flag values
- if (subItem.GetStringFieldValue(Models.Metadata.Condition.RelationKey) != null)
- subItem.SetFieldValue(Models.Metadata.Condition.RelationKey, subItem.GetStringFieldValue(Models.Metadata.Condition.RelationKey).AsEnumValue().AsStringValue());
-
- datItem.SetFieldValue(Models.Metadata.DipSwitch.ConditionKey, subItem);
- }
-
- var dipLocations = ReadItemArray(item, Models.Metadata.DipSwitch.DipLocationKey);
- if (dipLocations != null)
- {
- List subLocations = [];
- foreach (var location in dipLocations)
- {
- var subItem = new DatItems.Formats.DipLocation(location);
-
- // Process flag values
- if (subItem.GetBoolFieldValue(Models.Metadata.DipLocation.InvertedKey) != null)
- subItem.SetFieldValue(Models.Metadata.DipLocation.InvertedKey, subItem.GetBoolFieldValue(Models.Metadata.DipLocation.InvertedKey).FromYesNo());
-
- subLocations.Add(subItem);
- }
-
- datItem.SetFieldValue(Models.Metadata.DipSwitch.DipLocationKey, [.. subLocations]);
- }
-
- var dipValues = ReadItemArray(item, Models.Metadata.DipSwitch.DipValueKey);
- if (dipValues != null)
- {
- List subValues = [];
- foreach (var value in dipValues)
- {
- var subItem = new DatItems.Formats.DipValue(value);
-
- // Process flag values
- if (subItem.GetBoolFieldValue(Models.Metadata.DipValue.DefaultKey) != null)
- subItem.SetFieldValue(Models.Metadata.DipValue.DefaultKey, subItem.GetBoolFieldValue(Models.Metadata.DipValue.DefaultKey).FromYesNo());
-
- var subCondition = subItem.GetFieldValue(Models.Metadata.DipValue.ConditionKey);
- if (subCondition != null)
- {
- var subSubItem = new DatItems.Formats.Condition(subCondition);
-
- // Process flag values
- if (subSubItem.GetStringFieldValue(Models.Metadata.Condition.RelationKey) != null)
- subSubItem.SetFieldValue(Models.Metadata.Condition.RelationKey, subSubItem.GetStringFieldValue(Models.Metadata.Condition.RelationKey).AsEnumValue().AsStringValue());
-
- subItem.SetFieldValue(Models.Metadata.DipValue.ConditionKey, subSubItem);
- }
-
- subValues.Add(subItem);
- }
-
- datItem.SetFieldValue(Models.Metadata.DipSwitch.DipValueKey, [.. subValues]);
- }
-
Items.AddItem(datItem, statsOnly);
ItemsDB.AddItem(datItem, machineIndex, sourceIndex, statsOnly);
}
@@ -784,24 +578,10 @@ namespace SabreTools.DatFiles
// Loop through the items and add
foreach (var item in items)
{
- var datItem = new DatItems.Formats.Disk(item);
- datItem.SetFieldValue(DatItems.DatItem.SourceKey, source);
+ var datItem = new Disk(item);
+ datItem.SetFieldValue(DatItem.SourceKey, source);
datItem.CopyMachineInformation(machine);
- // Process flag values
- if (datItem.GetBoolFieldValue(Models.Metadata.Disk.OptionalKey) != null)
- datItem.SetFieldValue(Models.Metadata.Disk.OptionalKey, datItem.GetBoolFieldValue(Models.Metadata.Disk.OptionalKey).FromYesNo());
- if (datItem.GetStringFieldValue(Models.Metadata.Disk.StatusKey) != null)
- datItem.SetFieldValue(Models.Metadata.Disk.StatusKey, datItem.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue().AsStringValue());
- if (datItem.GetBoolFieldValue(Models.Metadata.Disk.WritableKey) != null)
- datItem.SetFieldValue(Models.Metadata.Disk.WritableKey, datItem.GetBoolFieldValue(Models.Metadata.Disk.WritableKey).FromYesNo());
-
- // Process hash values
- if (datItem.GetStringFieldValue(Models.Metadata.Disk.MD5Key) != null)
- datItem.SetFieldValue(Models.Metadata.Disk.MD5Key, TextHelper.NormalizeMD5(datItem.GetStringFieldValue(Models.Metadata.Disk.MD5Key)));
- if (datItem.GetStringFieldValue(Models.Metadata.Disk.SHA1Key) != null)
- datItem.SetFieldValue(Models.Metadata.Disk.SHA1Key, TextHelper.NormalizeSHA1(datItem.GetStringFieldValue(Models.Metadata.Disk.SHA1Key)));
-
Items.AddItem(datItem, statsOnly);
ItemsDB.AddItem(datItem, machineIndex, sourceIndex, statsOnly);
}
@@ -825,38 +605,10 @@ namespace SabreTools.DatFiles
// Loop through the items and add
foreach (var item in items)
{
- var datItem = new DatItems.Formats.Display(item);
- datItem.SetFieldValue(DatItems.DatItem.SourceKey, source);
+ var datItem = new Display(item);
+ datItem.SetFieldValue(DatItem.SourceKey, source);
datItem.CopyMachineInformation(machine);
- // Process flag values
- if (datItem.GetBoolFieldValue(Models.Metadata.Display.FlipXKey) != null)
- datItem.SetFieldValue(Models.Metadata.Display.FlipXKey, datItem.GetBoolFieldValue(Models.Metadata.Display.FlipXKey).FromYesNo());
- if (datItem.GetInt64FieldValue(Models.Metadata.Display.HBEndKey) != null)
- datItem.SetFieldValue(Models.Metadata.Display.HBEndKey, datItem.GetInt64FieldValue(Models.Metadata.Display.HBEndKey).ToString());
- if (datItem.GetInt64FieldValue(Models.Metadata.Display.HBStartKey) != null)
- datItem.SetFieldValue(Models.Metadata.Display.HBStartKey, datItem.GetInt64FieldValue(Models.Metadata.Display.HBStartKey).ToString());
- if (datItem.GetInt64FieldValue(Models.Metadata.Display.HeightKey) != null)
- datItem.SetFieldValue(Models.Metadata.Display.HeightKey, datItem.GetInt64FieldValue(Models.Metadata.Display.HeightKey).ToString());
- if (datItem.GetInt64FieldValue(Models.Metadata.Display.HTotalKey) != null)
- datItem.SetFieldValue(Models.Metadata.Display.HTotalKey, datItem.GetInt64FieldValue(Models.Metadata.Display.HTotalKey).ToString());
- if (datItem.GetInt64FieldValue(Models.Metadata.Display.PixClockKey) != null)
- datItem.SetFieldValue(Models.Metadata.Display.PixClockKey, datItem.GetInt64FieldValue(Models.Metadata.Display.PixClockKey).ToString());
- if (datItem.GetDoubleFieldValue(Models.Metadata.Display.RefreshKey) != null)
- datItem.SetFieldValue(Models.Metadata.Display.RefreshKey, datItem.GetDoubleFieldValue(Models.Metadata.Display.RefreshKey).ToString());
- if (datItem.GetInt64FieldValue(Models.Metadata.Display.RotateKey) != null)
- datItem.SetFieldValue(Models.Metadata.Display.RotateKey, datItem.GetInt64FieldValue(Models.Metadata.Display.RotateKey).ToString());
- if (datItem.GetStringFieldValue(Models.Metadata.Display.DisplayTypeKey) != null)
- datItem.SetFieldValue(Models.Metadata.Display.DisplayTypeKey, datItem.GetStringFieldValue(Models.Metadata.Display.DisplayTypeKey).AsEnumValue().AsStringValue());
- if (datItem.GetInt64FieldValue(Models.Metadata.Display.VBEndKey) != null)
- datItem.SetFieldValue(Models.Metadata.Display.VBEndKey, datItem.GetInt64FieldValue(Models.Metadata.Display.VBEndKey).ToString());
- if (datItem.GetInt64FieldValue(Models.Metadata.Display.VBStartKey) != null)
- datItem.SetFieldValue(Models.Metadata.Display.VBStartKey, datItem.GetInt64FieldValue(Models.Metadata.Display.VBStartKey).ToString());
- if (datItem.GetInt64FieldValue(Models.Metadata.Display.VTotalKey) != null)
- datItem.SetFieldValue(Models.Metadata.Display.VTotalKey, datItem.GetInt64FieldValue(Models.Metadata.Display.VTotalKey).ToString());
- if (datItem.GetInt64FieldValue(Models.Metadata.Display.WidthKey) != null)
- datItem.SetFieldValue(Models.Metadata.Display.WidthKey, datItem.GetInt64FieldValue(Models.Metadata.Display.WidthKey).ToString());
-
Items.AddItem(datItem, statsOnly);
ItemsDB.AddItem(datItem, machineIndex, sourceIndex, statsOnly);
}
@@ -880,34 +632,10 @@ namespace SabreTools.DatFiles
// Loop through the items and add
foreach (var item in items)
{
- var datItem = new DatItems.Formats.Driver(item);
- datItem.SetFieldValue(DatItems.DatItem.SourceKey, source);
+ var datItem = new Driver(item);
+ datItem.SetFieldValue(DatItem.SourceKey, source);
datItem.CopyMachineInformation(machine);
- // Process flag values
- if (datItem.GetStringFieldValue(Models.Metadata.Driver.CocktailKey) != null)
- datItem.SetFieldValue(Models.Metadata.Driver.CocktailKey, datItem.GetStringFieldValue(Models.Metadata.Driver.CocktailKey).AsEnumValue().AsStringValue());
- if (datItem.GetStringFieldValue(Models.Metadata.Driver.ColorKey) != null)
- datItem.SetFieldValue(Models.Metadata.Driver.ColorKey, datItem.GetStringFieldValue(Models.Metadata.Driver.ColorKey).AsEnumValue().AsStringValue());
- if (datItem.GetStringFieldValue(Models.Metadata.Driver.EmulationKey) != null)
- datItem.SetFieldValue(Models.Metadata.Driver.EmulationKey, datItem.GetStringFieldValue(Models.Metadata.Driver.EmulationKey).AsEnumValue().AsStringValue());
- if (datItem.GetBoolFieldValue(Models.Metadata.Driver.IncompleteKey) != null)
- datItem.SetFieldValue(Models.Metadata.Driver.IncompleteKey, datItem.GetBoolFieldValue(Models.Metadata.Driver.IncompleteKey).FromYesNo());
- if (datItem.GetBoolFieldValue(Models.Metadata.Driver.NoSoundHardwareKey) != null)
- datItem.SetFieldValue(Models.Metadata.Driver.NoSoundHardwareKey, datItem.GetBoolFieldValue(Models.Metadata.Driver.NoSoundHardwareKey).FromYesNo());
- if (datItem.GetInt64FieldValue(Models.Metadata.Driver.PaletteSizeKey) != null)
- datItem.SetFieldValue(Models.Metadata.Driver.PaletteSizeKey, datItem.GetInt64FieldValue(Models.Metadata.Driver.PaletteSizeKey).ToString());
- if (datItem.GetBoolFieldValue(Models.Metadata.Driver.RequiresArtworkKey) != null)
- datItem.SetFieldValue(Models.Metadata.Driver.RequiresArtworkKey, datItem.GetBoolFieldValue(Models.Metadata.Driver.RequiresArtworkKey).FromYesNo());
- if (datItem.GetStringFieldValue(Models.Metadata.Driver.SaveStateKey) != null)
- datItem.SetFieldValue(Models.Metadata.Driver.SaveStateKey, datItem.GetStringFieldValue(Models.Metadata.Driver.SaveStateKey).AsEnumValue().AsStringValue(useSecond: true));
- if (datItem.GetStringFieldValue(Models.Metadata.Driver.SoundKey) != null)
- datItem.SetFieldValue(Models.Metadata.Driver.SoundKey, datItem.GetStringFieldValue(Models.Metadata.Driver.SoundKey).AsEnumValue().AsStringValue());
- if (datItem.GetStringFieldValue(Models.Metadata.Driver.StatusKey) != null)
- datItem.SetFieldValue(Models.Metadata.Driver.StatusKey, datItem.GetStringFieldValue(Models.Metadata.Driver.StatusKey).AsEnumValue().AsStringValue());
- if (datItem.GetBoolFieldValue(Models.Metadata.Driver.UnofficialKey) != null)
- datItem.SetFieldValue(Models.Metadata.Driver.UnofficialKey, datItem.GetBoolFieldValue(Models.Metadata.Driver.UnofficialKey).FromYesNo());
-
Items.AddItem(datItem, statsOnly);
ItemsDB.AddItem(datItem, machineIndex, sourceIndex, statsOnly);
}
@@ -923,6 +651,7 @@ namespace SabreTools.DatFiles
/// Index of the Source to use with the converted items
/// True to only add item statistics while parsing, false otherwise
/// Machine name to use when constructing item names
+ /// TODO: Convert this into a constructor in Rom
private void ProcessItems(Models.Metadata.Dump[]? items, Machine machine, long machineIndex, Source source, long sourceIndex, bool statsOnly, string? machineName)
{
// If the array is null or empty, return without processing
@@ -958,7 +687,7 @@ namespace SabreTools.DatFiles
string name = $"{machineName}_{index++}{(!string.IsNullOrEmpty(rom!.ReadString(Models.Metadata.Rom.RemarkKey)) ? $" {rom.ReadString(Models.Metadata.Rom.RemarkKey)}" : string.Empty)}";
- var datItem = new DatItems.Formats.Rom();
+ var datItem = new Rom();
datItem.SetName(name);
datItem.SetFieldValue(Models.Metadata.Rom.OffsetKey, rom.ReadString(Models.Metadata.Rom.StartKey));
datItem.SetFieldValue(Models.Metadata.Rom.OpenMSXMediaType, subType.AsStringValue());
@@ -966,12 +695,12 @@ namespace SabreTools.DatFiles
datItem.SetFieldValue(Models.Metadata.Rom.RemarkKey, rom.ReadString(Models.Metadata.Rom.RemarkKey));
datItem.SetFieldValue(Models.Metadata.Rom.SHA1Key, rom.ReadString(Models.Metadata.Rom.SHA1Key));
datItem.SetFieldValue(Models.Metadata.Rom.StartKey, rom.ReadString(Models.Metadata.Rom.StartKey));
- datItem.SetFieldValue(DatItems.DatItem.SourceKey, source);
+ datItem.SetFieldValue(DatItem.SourceKey, source);
if (dump.Read(Models.Metadata.Dump.OriginalKey) != null)
{
var original = dump.Read(Models.Metadata.Dump.OriginalKey)!;
- datItem.SetFieldValue("ORIGINAL", new DatItems.Formats.Original
+ datItem.SetFieldValue("ORIGINAL", new Original
{
Value = original.ReadBool(Models.Metadata.Original.ValueKey),
Content = original.ReadString(Models.Metadata.Original.ContentKey),
@@ -1023,18 +752,10 @@ namespace SabreTools.DatFiles
// Loop through the items and add
foreach (var item in items)
{
- var datItem = new DatItems.Formats.Feature(item);
- datItem.SetFieldValue(DatItems.DatItem.SourceKey, source);
+ var datItem = new Feature(item);
+ datItem.SetFieldValue(DatItem.SourceKey, source);
datItem.CopyMachineInformation(machine);
- // Process flag values
- if (datItem.GetStringFieldValue(Models.Metadata.Feature.OverallKey) != null)
- datItem.SetFieldValue(Models.Metadata.Feature.OverallKey, datItem.GetStringFieldValue(Models.Metadata.Feature.OverallKey).AsEnumValue().AsStringValue());
- if (datItem.GetStringFieldValue(Models.Metadata.Feature.StatusKey) != null)
- datItem.SetFieldValue(Models.Metadata.Feature.StatusKey, datItem.GetStringFieldValue(Models.Metadata.Feature.StatusKey).AsEnumValue().AsStringValue());
- if (datItem.GetStringFieldValue(Models.Metadata.Feature.FeatureTypeKey) != null)
- datItem.SetFieldValue(Models.Metadata.Feature.FeatureTypeKey, datItem.GetStringFieldValue(Models.Metadata.Feature.FeatureTypeKey).AsEnumValue().AsStringValue());
-
Items.AddItem(datItem, statsOnly);
ItemsDB.AddItem(datItem, machineIndex, sourceIndex, statsOnly);
}
@@ -1058,8 +779,8 @@ namespace SabreTools.DatFiles
// Loop through the items and add
foreach (var item in items)
{
- var datItem = new DatItems.Formats.Info(item);
- datItem.SetFieldValue(DatItems.DatItem.SourceKey, source);
+ var datItem = new Info(item);
+ datItem.SetFieldValue(DatItem.SourceKey, source);
datItem.CopyMachineInformation(machine);
Items.AddItem(datItem, statsOnly);
@@ -1085,57 +806,10 @@ namespace SabreTools.DatFiles
// Loop through the items and add
foreach (var item in items)
{
- var datItem = new DatItems.Formats.Input(item);
- datItem.SetFieldValue(DatItems.DatItem.SourceKey, source);
+ var datItem = new Input(item);
+ datItem.SetFieldValue(DatItem.SourceKey, source);
datItem.CopyMachineInformation(machine);
- // Process flag values
- if (datItem.GetInt64FieldValue(Models.Metadata.Input.ButtonsKey) != null)
- datItem.SetFieldValue(Models.Metadata.Input.ButtonsKey, datItem.GetInt64FieldValue(Models.Metadata.Input.ButtonsKey).ToString());
- if (datItem.GetInt64FieldValue(Models.Metadata.Input.CoinsKey) != null)
- datItem.SetFieldValue(Models.Metadata.Input.CoinsKey, datItem.GetInt64FieldValue(Models.Metadata.Input.CoinsKey).ToString());
- if (datItem.GetInt64FieldValue(Models.Metadata.Input.PlayersKey) != null)
- datItem.SetFieldValue(Models.Metadata.Input.PlayersKey, datItem.GetInt64FieldValue(Models.Metadata.Input.PlayersKey).ToString());
- if (datItem.GetBoolFieldValue(Models.Metadata.Input.ServiceKey) != null)
- datItem.SetFieldValue(Models.Metadata.Input.ServiceKey, datItem.GetBoolFieldValue(Models.Metadata.Input.ServiceKey).FromYesNo());
- if (datItem.GetBoolFieldValue(Models.Metadata.Input.TiltKey) != null)
- datItem.SetFieldValue(Models.Metadata.Input.TiltKey, datItem.GetBoolFieldValue(Models.Metadata.Input.TiltKey).FromYesNo());
-
- // Handle subitems
- var controls = ReadItemArray(item, Models.Metadata.Input.ControlKey);
- if (controls != null)
- {
- List subControls = [];
- foreach (var control in controls)
- {
- var subItem = new DatItems.Formats.Control(control);
-
- // Process flag values
- if (subItem.GetInt64FieldValue(Models.Metadata.Control.ButtonsKey) != null)
- subItem.SetFieldValue(Models.Metadata.Control.ButtonsKey, subItem.GetInt64FieldValue(Models.Metadata.Control.ButtonsKey).ToString());
- if (subItem.GetInt64FieldValue(Models.Metadata.Control.KeyDeltaKey) != null)
- subItem.SetFieldValue