diff --git a/SabreTools.DatFiles/Formats/Listxml.Writer.cs b/SabreTools.DatFiles/Formats/Listxml.Writer.cs index fd987665..77b18471 100644 --- a/SabreTools.DatFiles/Formats/Listxml.Writer.cs +++ b/SabreTools.DatFiles/Formats/Listxml.Writer.cs @@ -47,8 +47,138 @@ namespace SabreTools.DatFiles.Formats /// protected override List GetMissingRequiredFields(DatItem datItem) { - // TODO: Check required fields - return null; + var missingFields = new List(); + switch (datItem) + { + case BiosSet biosset: + if (string.IsNullOrWhiteSpace(biosset.Name)) + missingFields.Add(DatItemField.Name); + if (string.IsNullOrWhiteSpace(biosset.Description)) + missingFields.Add(DatItemField.Description); + break; + + case Rom rom: + if (string.IsNullOrWhiteSpace(rom.Name)) + missingFields.Add(DatItemField.Name); + if (rom.Size == null || rom.Size < 0) + missingFields.Add(DatItemField.Size); + if (string.IsNullOrWhiteSpace(rom.CRC) + && string.IsNullOrWhiteSpace(rom.SHA1)) + { + missingFields.Add(DatItemField.SHA1); + } + break; + + case Disk disk: + if (string.IsNullOrWhiteSpace(disk.Name)) + missingFields.Add(DatItemField.Name); + if (string.IsNullOrWhiteSpace(disk.MD5) + && string.IsNullOrWhiteSpace(disk.SHA1)) + { + missingFields.Add(DatItemField.SHA1); + } + break; + + case DeviceReference deviceref: + if (string.IsNullOrWhiteSpace(deviceref.Name)) + missingFields.Add(DatItemField.Name); + break; + + case Sample sample: + if (string.IsNullOrWhiteSpace(sample.Name)) + missingFields.Add(DatItemField.Name); + break; + + case Chip chip: + if (string.IsNullOrWhiteSpace(chip.Name)) + missingFields.Add(DatItemField.Name); + if (!chip.ChipTypeSpecified) + missingFields.Add(DatItemField.ChipType); + break; + + case Display display: + if (!display.DisplayTypeSpecified) + missingFields.Add(DatItemField.DisplayType); + if (display.Refresh == null) + missingFields.Add(DatItemField.Refresh); + break; + + case Sound sound: + if (sound.Channels == null) + missingFields.Add(DatItemField.Channels); + break; + + case Input input: + if (input.Players == null) + missingFields.Add(DatItemField.Players); + break; + + case DipSwitch dipswitch: + if (string.IsNullOrWhiteSpace(dipswitch.Name)) + missingFields.Add(DatItemField.Name); + if (string.IsNullOrWhiteSpace(dipswitch.Tag)) + missingFields.Add(DatItemField.Tag); + break; + + case Configuration configuration: + if (string.IsNullOrWhiteSpace(configuration.Name)) + missingFields.Add(DatItemField.Name); + if (string.IsNullOrWhiteSpace(configuration.Tag)) + missingFields.Add(DatItemField.Tag); + break; + + case Port port: + if (string.IsNullOrWhiteSpace(port.Tag)) + missingFields.Add(DatItemField.Tag); + break; + + case Adjuster adjuster: + if (string.IsNullOrWhiteSpace(adjuster.Name)) + missingFields.Add(DatItemField.Name); + break; + + case Driver driver: + if (!driver.StatusSpecified) + missingFields.Add(DatItemField.SupportStatus); + if (!driver.EmulationSpecified) + missingFields.Add(DatItemField.EmulationStatus); + if (!driver.CocktailSpecified) + missingFields.Add(DatItemField.CocktailStatus); + if (!driver.SaveStateSpecified) + missingFields.Add(DatItemField.SaveStateStatus); + break; + + case Feature feature: + if (!feature.TypeSpecified) + missingFields.Add(DatItemField.FeatureType); + break; + + case Device device: + if (!device.DeviceTypeSpecified) + missingFields.Add(DatItemField.DeviceType); + break; + + case Slot slot: + if (string.IsNullOrWhiteSpace(slot.Name)) + missingFields.Add(DatItemField.Name); + break; + + case DatItems.Formats.SoftwareList softwarelist: + if (string.IsNullOrWhiteSpace(softwarelist.Tag)) + missingFields.Add(DatItemField.Tag); + if (string.IsNullOrWhiteSpace(softwarelist.Name)) + missingFields.Add(DatItemField.Name); + if (!softwarelist.StatusSpecified) + missingFields.Add(DatItemField.SoftwareListStatus); + break; + + case RamOption ramoption: + if (string.IsNullOrWhiteSpace(ramoption.Name)) + missingFields.Add(DatItemField.Name); + break; + } + + return missingFields; } /// diff --git a/SabreTools.Models/Listxml/Adjuster.cs b/SabreTools.Models/Listxml/Adjuster.cs index 1835bd5e..37970024 100644 --- a/SabreTools.Models/Listxml/Adjuster.cs +++ b/SabreTools.Models/Listxml/Adjuster.cs @@ -11,7 +11,7 @@ namespace SabreTools.Models.Listxml /// (yes|no) "no" [XmlAttribute("default")] - public string Default { get; set; } + public string? Default { get; set; } [XmlElement("condition")] public Condition? Condition { get; set; } diff --git a/SabreTools.Models/Listxml/Chip.cs b/SabreTools.Models/Listxml/Chip.cs index 9ce6ddf4..56cf0ee6 100644 --- a/SabreTools.Models/Listxml/Chip.cs +++ b/SabreTools.Models/Listxml/Chip.cs @@ -18,7 +18,7 @@ namespace SabreTools.Models.Listxml /// Only present in older versions [XmlAttribute("soundonly")] - public string SoundOnly { get; set; } + public string? SoundOnly { get; set; } [XmlAttribute("clock")] public string? Clock { get; set; } diff --git a/SabreTools.Models/Listxml/Driver.cs b/SabreTools.Models/Listxml/Driver.cs index b339fc03..23ca06fe 100644 --- a/SabreTools.Models/Listxml/Driver.cs +++ b/SabreTools.Models/Listxml/Driver.cs @@ -12,15 +12,15 @@ namespace SabreTools.Models.Listxml /// (good|imperfect|preliminary), Only present in older versions [XmlAttribute("color")] - public string Color { get; set; } + public string? Color { get; set; } /// (good|imperfect|preliminary), Only present in older versions [XmlAttribute("sound")] - public string Sound { get; set; } + public string? Sound { get; set; } /// Only present in older versions [XmlAttribute("palettesize")] - public string PaletteSize { get; set; } + public string? PaletteSize { get; set; } /// (good|imperfect|preliminary) [XmlAttribute("emulation")] diff --git a/SabreTools.Models/Listxml/Input.cs b/SabreTools.Models/Listxml/Input.cs index 281613ba..a16f9cb0 100644 --- a/SabreTools.Models/Listxml/Input.cs +++ b/SabreTools.Models/Listxml/Input.cs @@ -24,7 +24,7 @@ namespace SabreTools.Models.Listxml /// Only present in older versions, Numeric? [XmlAttribute("buttons")] - public string Buttons { get; set; } + public string? Buttons { get; set; } /// Numeric? [XmlAttribute("coins")]