using System.Linq; using SabreTools.Models.SoftwareList; namespace SabreTools.Serialization { /// /// XML deserializer for MAME softwarelist files /// public partial class SoftawreList : XmlSerializer { #region Internal /// /// Convert from to /// public static SoftwareList? ConvertFromInternalModel(Models.Internal.MetadataFile? item) { if (item == null) return null; var header = item.Read(Models.Internal.MetadataFile.HeaderKey); var metadataFile = header != null ? ConvertHeaderFromInternalModel(header) : new SoftwareList(); var machines = item.Read(Models.Internal.MetadataFile.MachineKey); if (machines != null && machines.Any()) metadataFile.Software = machines.Select(ConvertMachineFromInternalModel).ToArray(); return metadataFile; } /// /// Convert from to /// private static SoftwareList? ConvertHeaderFromInternalModel(Models.Internal.Header? item) { if (item == null) return null; var softwareList = new SoftwareList { Name = item.ReadString(Models.Internal.Header.NameKey), Description = item.ReadString(Models.Internal.Header.DescriptionKey), Notes = item.ReadString(Models.Internal.Header.NotesKey), }; return softwareList; } /// /// Convert from to /// private static Software? ConvertMachineFromInternalModel(Models.Internal.Machine? item) { if (item == null) return null; var software = new Software { Name = item.ReadString(Models.Internal.Machine.NameKey), CloneOf = item.ReadString(Models.Internal.Machine.CloneOfKey), Supported = item.ReadString(Models.Internal.Machine.SupportedKey), Description = item.ReadString(Models.Internal.Machine.DescriptionKey), Year = item.ReadString(Models.Internal.Machine.YearKey), Publisher = item.ReadString(Models.Internal.Machine.PublisherKey), Notes = item.ReadString(Models.Internal.Machine.NotesKey), }; var infos = item.Read(Models.Internal.Machine.InfoKey); software.Info = infos?.Select(ConvertFromInternalModel)?.ToArray(); var sharedFeats = item.Read(Models.Internal.Machine.SharedFeatKey); software.SharedFeat = sharedFeats?.Select(ConvertFromInternalModel)?.ToArray(); var parts = item.Read(Models.Internal.Machine.PartKey); software.Part = parts?.Select(ConvertFromInternalModel)?.ToArray(); return software; } /// /// Convert from to /// private static DataArea? ConvertFromInternalModel(Models.Internal.DataArea? item) { if (item == null) return null; var dataArea = new DataArea { Name = item.ReadString(Models.Internal.DataArea.NameKey), Size = item.ReadString(Models.Internal.DataArea.SizeKey), Width = item.ReadString(Models.Internal.DataArea.WidthKey), Endianness = item.ReadString(Models.Internal.DataArea.EndiannessKey), }; var roms = item.Read(Models.Internal.DataArea.RomKey); dataArea.Rom = roms?.Select(ConvertFromInternalModel)?.ToArray(); return dataArea; } /// /// Convert from to /// private static DipSwitch? ConvertFromInternalModel(Models.Internal.DipSwitch? item) { if (item == null) return null; var dipSwitch = new DipSwitch { Name = item.ReadString(Models.Internal.DipSwitch.NameKey), Tag = item.ReadString(Models.Internal.DipSwitch.TagKey), Mask = item.ReadString(Models.Internal.DipSwitch.MaskKey), }; var dipValues = item.Read(Models.Internal.DipSwitch.DipValueKey); dipSwitch.DipValue = dipValues?.Select(ConvertFromInternalModel)?.ToArray(); return dipSwitch; } /// /// Convert from to /// private static DipValue? ConvertFromInternalModel(Models.Internal.DipValue? item) { if (item == null) return null; var dipValue = new DipValue { Name = item.ReadString(Models.Internal.DipValue.NameKey), Value = item.ReadString(Models.Internal.DipValue.ValueKey), Default = item.ReadString(Models.Internal.DipValue.DefaultKey), }; return dipValue; } /// /// Convert from to /// private static Disk? ConvertFromInternalModel(Models.Internal.Disk? item) { if (item == null) return null; var disk = new Disk { Name = item.ReadString(Models.Internal.Disk.NameKey), MD5 = item.ReadString(Models.Internal.Disk.MD5Key), SHA1 = item.ReadString(Models.Internal.Disk.SHA1Key), Status = item.ReadString(Models.Internal.Disk.StatusKey), Writeable = item.ReadString(Models.Internal.Disk.WritableKey), }; return disk; } /// /// Convert from to /// private static DiskArea? ConvertFromInternalModel(Models.Internal.DiskArea? item) { if (item == null) return null; var diskArea = new DiskArea { Name = item.ReadString(Models.Internal.DiskArea.NameKey), }; var disks = item.Read(Models.Internal.DiskArea.DiskKey); diskArea.Disk = disks?.Select(ConvertFromInternalModel)?.ToArray(); return diskArea; } /// /// Convert from to /// private static Feature? ConvertFromInternalModel(Models.Internal.Feature? item) { if (item == null) return null; var feature = new Feature { Name = item.ReadString(Models.Internal.Feature.NameKey), Value = item.ReadString(Models.Internal.Feature.ValueKey), }; return feature; } /// /// Convert from to /// private static Info? ConvertFromInternalModel(Models.Internal.Info? item) { if (item == null) return null; var info = new Info { Name = item.ReadString(Models.Internal.Info.NameKey), Value = item.ReadString(Models.Internal.Info.ValueKey), }; return info; } /// /// Convert from to /// private static Part? ConvertFromInternalModel(Models.Internal.Part? item) { if (item == null) return null; var part = new Part { Name = item.ReadString(Models.Internal.Part.NameKey), Interface = item.ReadString(Models.Internal.Part.InterfaceKey), }; var features = item.Read(Models.Internal.Part.FeatureKey); part.Feature = features?.Select(ConvertFromInternalModel)?.ToArray(); var dataAreas = item.Read(Models.Internal.Part.DataAreaKey); part.DataArea = dataAreas?.Select(ConvertFromInternalModel)?.ToArray(); var diskAreas = item.Read(Models.Internal.Part.DiskAreaKey); part.DiskArea = diskAreas?.Select(ConvertFromInternalModel)?.ToArray(); var dipSwitches = item.Read(Models.Internal.Part.DipSwitchKey); part.DipSwitch = dipSwitches?.Select(ConvertFromInternalModel)?.ToArray(); return part; } /// /// Convert from to /// private static Rom? ConvertFromInternalModel(Models.Internal.Rom? item) { if (item == null) return null; var rom = new Rom { Name = item.ReadString(Models.Internal.Rom.NameKey), Size = item.ReadString(Models.Internal.Rom.SizeKey), Length = item.ReadString(Models.Internal.Rom.LengthKey), CRC = item.ReadString(Models.Internal.Rom.CRCKey), SHA1 = item.ReadString(Models.Internal.Rom.SHA1Key), Offset = item.ReadString(Models.Internal.Rom.OffsetKey), Value = item.ReadString(Models.Internal.Rom.ValueKey), Status = item.ReadString(Models.Internal.Rom.StatusKey), LoadFlag = item.ReadString(Models.Internal.Rom.LoadFlagKey), }; return rom; } /// /// Convert from to /// private static SharedFeat? ConvertFromInternalModel(Models.Internal.SharedFeat? item) { if (item == null) return null; var sharedFeat = new SharedFeat { Name = item.ReadString(Models.Internal.SharedFeat.NameKey), Value = item.ReadString(Models.Internal.SharedFeat.ValueKey), }; return sharedFeat; } #endregion } }