using System.Collections.Generic; using System.Linq; using SabreTools.Models.Internal; namespace SabreTools.Serialization { /// /// Serializer for Listxml models to internal structure /// public partial class Internal { #region Serialize /// /// Convert from to /// public static MetadataFile ConvertToInternalModel(Models.Listxml.M1 item) { var metadataFile = new MetadataFile { [MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item), }; if (item?.Game != null && item.Game.Any()) metadataFile[MetadataFile.MachineKey] = item.Game.Select(ConvertMachineToInternalModel).ToArray(); return metadataFile; } /// /// Convert from to /// public static MetadataFile ConvertToInternalModel(Models.Listxml.Mame item) { var metadataFile = new MetadataFile { [MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item), }; if (item?.Game != null && item.Game.Any()) metadataFile[MetadataFile.MachineKey] = item.Game.Select(ConvertMachineToInternalModel).ToArray(); return metadataFile; } /// /// Convert from to /// private static Header ConvertHeaderToInternalModel(Models.Listxml.M1 item) { var header = new Header { [Header.VersionKey] = item.Version, }; return header; } /// /// Convert from to /// private static Header ConvertHeaderToInternalModel(Models.Listxml.Mame item) { var header = new Header { [Header.BuildKey] = item.Build, [Header.DebugKey] = item.Debug, [Header.MameConfigKey] = item.MameConfig, }; return header; } /// /// Convert from to /// private static Machine ConvertMachineToInternalModel(Models.Listxml.GameBase item) { var machine = new Machine { [Machine.NameKey] = item.Name, [Machine.SourceFileKey] = item.SourceFile, [Machine.IsBiosKey] = item.IsBios, [Machine.IsDeviceKey] = item.IsDevice, [Machine.IsMechanicalKey] = item.IsMechanical, [Machine.RunnableKey] = item.Runnable, [Machine.CloneOfKey] = item.CloneOf, [Machine.RomOfKey] = item.RomOf, [Machine.SampleOfKey] = item.SampleOf, [Machine.DescriptionKey] = item.Description, [Machine.YearKey] = item.Year, [Machine.ManufacturerKey] = item.Manufacturer, [Machine.HistoryKey] = item.History, }; if (item.BiosSet != null && item.BiosSet.Any()) { var biosSets = new List(); foreach (var biosSet in item.BiosSet) { biosSets.Add(ConvertToInternalModel(biosSet)); } machine[Machine.BiosSetKey] = biosSets.ToArray(); } if (item.Rom != null && item.Rom.Any()) { var roms = new List(); foreach (var rom in item.Rom) { roms.Add(ConvertToInternalModel(rom)); } machine[Machine.RomKey] = roms.ToArray(); } if (item.Disk != null && item.Disk.Any()) { var disks = new List(); foreach (var disk in item.Disk) { disks.Add(ConvertToInternalModel(disk)); } machine[Machine.DiskKey] = disks.ToArray(); } if (item.DeviceRef != null && item.DeviceRef.Any()) { var deviceRefs = new List(); foreach (var deviceRef in item.DeviceRef) { deviceRefs.Add(ConvertToInternalModel(deviceRef)); } machine[Machine.DeviceRefKey] = deviceRefs.ToArray(); } if (item.Sample != null && item.Sample.Any()) { var samples = new List(); foreach (var sample in item.Sample) { samples.Add(ConvertToInternalModel(sample)); } machine[Machine.SampleKey] = samples.ToArray(); } if (item.Chip != null && item.Chip.Any()) { var chips = new List(); foreach (var chip in item.Chip) { chips.Add(ConvertToInternalModel(chip)); } machine[Machine.ChipKey] = chips.ToArray(); } if (item.Display != null && item.Display.Any()) { var displays = new List(); foreach (var display in item.Display) { displays.Add(ConvertToInternalModel(display)); } machine[Machine.DisplayKey] = displays.ToArray(); } if (item.Video != null && item.Video.Any()) { var videos = new List