using System.Collections.Generic; using System.Linq; using SabreTools.Models.Internal; namespace SabreTools.Serialization { /// /// Serializer for ClrMamePro models to internal structure /// public partial class Internal { #region Serialize /// /// Convert from to /// public static MetadataFile ConvertFromClrMamePro(Models.ClrMamePro.MetadataFile item) { var metadataFile = new MetadataFile(); if (item?.ClrMamePro != null) metadataFile[MetadataFile.HeaderKey] = ConvertHeaderFromClrMamePro(item.ClrMamePro); if (item?.Game != null && item.Game.Any()) metadataFile[MetadataFile.MachineKey] = item.Game.Select(ConvertMachineFromClrMamePro).ToArray(); return metadataFile; } /// /// Convert from to /// private static Header ConvertHeaderFromClrMamePro(Models.ClrMamePro.ClrMamePro item) { var header = new Header { [Header.NameKey] = item.Name, [Header.DescriptionKey] = item.Description, [Header.RootDirKey] = item.RootDir, [Header.CategoryKey] = item.Category, [Header.VersionKey] = item.Version, [Header.DateKey] = item.Date, [Header.AuthorKey] = item.Author, [Header.HomepageKey] = item.Homepage, [Header.UrlKey] = item.Url, [Header.CommentKey] = item.Comment, [Header.HeaderKey] = item.Header, [Header.TypeKey] = item.Type, [Header.ForceMergingKey] = item.ForceMerging, [Header.ForceZippingKey] = item.ForceZipping, [Header.ForcePackingKey] = item.ForcePacking, }; return header; } /// /// Convert from to /// private static Machine ConvertMachineFromClrMamePro(Models.ClrMamePro.GameBase item) { var machine = new Machine { [Machine.NameKey] = item.Name, [Machine.DescriptionKey] = item.Description, [Machine.YearKey] = item.Year, [Machine.ManufacturerKey] = item.Manufacturer, [Machine.CategoryKey] = item.Category, [Machine.CloneOfKey] = item.CloneOf, [Machine.RomOfKey] = item.RomOf, [Machine.SampleOfKey] = item.SampleOf, }; if (item.Release != null && item.Release.Any()) { var releases = new List(); foreach (var release in item.Release) { releases.Add(ConvertFromClrMamePro(release)); } machine[Machine.ReleaseKey] = releases.ToArray(); } if (item.BiosSet != null && item.BiosSet.Any()) { var biosSets = new List(); foreach (var biosSet in item.BiosSet) { biosSets.Add(ConvertFromClrMamePro(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(ConvertFromClrMamePro(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(ConvertFromClrMamePro(disk)); } machine[Machine.DiskKey] = disks.ToArray(); } if (item.Media != null && item.Media.Any()) { var medias = new List(); foreach (var media in item.Media) { medias.Add(ConvertFromClrMamePro(media)); } machine[Machine.MediaKey] = medias.ToArray(); } if (item.Sample != null && item.Sample.Any()) { var samples = new List(); foreach (var sample in item.Sample) { samples.Add(ConvertFromClrMamePro(sample)); } machine[Machine.SampleKey] = samples.ToArray(); } if (item.Archive != null && item.Archive.Any()) { var archives = new List(); foreach (var archive in item.Archive) { archives.Add(ConvertFromClrMamePro(archive)); } machine[Machine.ArchiveKey] = archives.ToArray(); } if (item.Chip != null && item.Chip.Any()) { var chips = new List(); foreach (var chip in item.Chip) { chips.Add(ConvertFromClrMamePro(chip)); } machine[Machine.ChipKey] = chips.ToArray(); } if (item.Video != null) machine[Machine.VideoKey] = ConvertFromClrMamePro(item.Video); if (item.Sound != null) machine[Machine.SoundKey] = ConvertFromClrMamePro(item.Sound); if (item.Input != null) machine[Machine.InputKey] = ConvertFromClrMamePro(item.Input); if (item.DipSwitch != null && item.DipSwitch.Any()) { var dipSwitches = new List(); foreach (var dipSwitch in item.DipSwitch) { dipSwitches.Add(ConvertFromClrMamePro(dipSwitch)); } machine[Machine.DipSwitchKey] = dipSwitches.ToArray(); } if (item.Driver != null) machine[Machine.DriverKey] = ConvertFromClrMamePro(item.Driver); return machine; } /// /// Convert from to /// private static Archive ConvertFromClrMamePro(Models.ClrMamePro.Archive item) { var archive = new Archive { [Archive.NameKey] = item.Name, }; return archive; } /// /// Convert from to /// private static BiosSet ConvertFromClrMamePro(Models.ClrMamePro.BiosSet item) { var biosset = new BiosSet { [BiosSet.NameKey] = item.Name, [BiosSet.DescriptionKey] = item.Description, [BiosSet.DefaultKey] = item.Default, }; return biosset; } /// /// Convert from to /// private static Chip ConvertFromClrMamePro(Models.ClrMamePro.Chip item) { var chip = new Chip { [Chip.ChipTypeKey] = item.Type, [Chip.NameKey] = item.Name, [Chip.FlagsKey] = item.Flags, [Chip.ClockKey] = item.Clock, }; return chip; } /// /// Convert from to /// private static DipSwitch ConvertFromClrMamePro(Models.ClrMamePro.DipSwitch item) { var dipswitch = new DipSwitch { [DipSwitch.NameKey] = item.Name, [DipSwitch.EntryKey] = item.Entry, [DipSwitch.DefaultKey] = item.Default, }; return dipswitch; } /// /// Convert from to /// private static Disk ConvertFromClrMamePro(Models.ClrMamePro.Disk item) { var disk = new Disk { [Disk.NameKey] = item.Name, [Disk.MD5Key] = item.MD5, [Disk.SHA1Key] = item.SHA1, [Disk.MergeKey] = item.Merge, [Disk.StatusKey] = item.Status, [Disk.FlagsKey] = item.Flags, }; return disk; } /// /// Convert from to /// private static Driver ConvertFromClrMamePro(Models.ClrMamePro.Driver item) { var driver = new Driver { [Driver.StatusKey] = item.Status, [Driver.ColorKey] = item.Color, [Driver.SoundKey] = item.Sound, [Driver.PaletteSizeKey] = item.PaletteSize, [Driver.BlitKey] = item.Blit, }; return driver; } /// /// Convert from to /// private static Input ConvertFromClrMamePro(Models.ClrMamePro.Input item) { var input = new Input { [Input.PlayersKey] = item.Players, [Input.ControlKey] = item.Control, [Input.ButtonsKey] = item.Buttons, [Input.CoinsKey] = item.Coins, [Input.TiltKey] = item.Tilt, [Input.ServiceKey] = item.Service, }; return input; } /// /// Convert from to /// private static Media ConvertFromClrMamePro(Models.ClrMamePro.Media item) { var media = new Media { [Media.NameKey] = item.Name, [Media.MD5Key] = item.MD5, [Media.SHA1Key] = item.SHA1, [Media.SHA256Key] = item.SHA256, [Media.SpamSumKey] = item.SpamSum, }; return media; } /// /// Convert from to /// private static Release ConvertFromClrMamePro(Models.ClrMamePro.Release item) { var release = new Release { [Release.NameKey] = item.Name, [Release.RegionKey] = item.Region, [Release.LanguageKey] = item.Language, [Release.DateKey] = item.Date, [Release.DefaultKey] = item.Default, }; return release; } /// /// Convert from to /// private static Rom ConvertFromClrMamePro(Models.ClrMamePro.Rom item) { var rom = new Rom { [Rom.NameKey] = item.Name, [Rom.SizeKey] = item.Size, [Rom.CRCKey] = item.CRC, [Rom.MD5Key] = item.MD5, [Rom.SHA1Key] = item.SHA1, [Rom.SHA256Key] = item.SHA256, [Rom.SHA384Key] = item.SHA384, [Rom.SHA512Key] = item.SHA512, [Rom.SpamSumKey] = item.SpamSum, [Rom.xxHash364Key] = item.xxHash364, [Rom.xxHash3128Key] = item.xxHash3128, [Rom.MergeKey] = item.Merge, [Rom.StatusKey] = item.Status, [Rom.RegionKey] = item.Region, [Rom.FlagsKey] = item.Flags, [Rom.OffsetKey] = item.Offs, [Rom.SerialKey] = item.Serial, [Rom.HeaderKey] = item.Header, [Rom.DateKey] = item.Date, [Rom.InvertedKey] = item.Inverted, [Rom.MIAKey] = item.MIA, }; return rom; } /// /// Convert from to /// private static Sample ConvertFromClrMamePro(Models.ClrMamePro.Sample item) { var sample = new Sample { [Sample.NameKey] = item.Name, }; return sample; } /// /// Convert from to /// private static Sound ConvertFromClrMamePro(Models.ClrMamePro.Sound item) { var sound = new Sound { [Sound.ChannelsKey] = item.Channels, }; return sound; } /// /// Convert from to /// private static Video ConvertFromClrMamePro(Models.ClrMamePro.Video item) { var video = new Video { [Video.ScreenKey] = item.Screen, [Video.OrientationKey] = item.Orientation, [Video.WidthKey] = item.X, [Video.HeightKey] = item.Y, [Video.AspectXKey] = item.AspectX, [Video.AspectYKey] = item.AspectY, [Video.RefreshKey] = item.Freq, }; return video; } #endregion #region Deserialize /// /// Convert from to /// public static Models.ClrMamePro.ClrMamePro? ConvertHeaderToClrMamePro(Header? item) { if (item == null) return null; var clrMamePro = new Models.ClrMamePro.ClrMamePro { Name = item.ReadString(Header.NameKey), Description = item.ReadString(Header.DescriptionKey), RootDir = item.ReadString(Header.RootDirKey), Category = item.ReadString(Header.CategoryKey), Version = item.ReadString(Header.VersionKey), Date = item.ReadString(Header.DateKey), Author = item.ReadString(Header.AuthorKey), Homepage = item.ReadString(Header.HomepageKey), Url = item.ReadString(Header.UrlKey), Comment = item.ReadString(Header.CommentKey), Header = item.ReadString(Header.HeaderKey), Type = item.ReadString(Header.TypeKey), ForceMerging = item.ReadString(Header.ForceMergingKey), ForceZipping = item.ReadString(Header.ForceZippingKey), ForcePacking = item.ReadString(Header.ForcePackingKey), }; return clrMamePro; } /// /// Convert from to /// public static Models.ClrMamePro.GameBase? ConvertMachineToClrMamePro(Machine? item, bool game = false) { if (item == null) return null; Models.ClrMamePro.GameBase gameBase = game ? new Models.ClrMamePro.Game() : new Models.ClrMamePro.Machine(); gameBase.Name = item.ReadString(Machine.NameKey); gameBase.Description = item.ReadString(Machine.DescriptionKey); gameBase.Year = item.ReadString(Machine.YearKey); gameBase.Manufacturer = item.ReadString(Machine.ManufacturerKey); gameBase.Category = item.ReadString(Machine.CategoryKey); gameBase.CloneOf = item.ReadString(Machine.CloneOfKey); gameBase.RomOf = item.ReadString(Machine.RomOfKey); gameBase.SampleOf = item.ReadString(Machine.SampleOfKey); var releases = item.Read(Machine.ReleaseKey); gameBase.Release = releases?.Select(ConvertToClrMamePro)?.ToArray(); var biosSets = item.Read(Machine.BiosSetKey); gameBase.BiosSet = biosSets?.Select(ConvertToClrMamePro)?.ToArray(); var roms = item.Read(Machine.RomKey); gameBase.Rom = roms?.Select(ConvertToClrMamePro)?.ToArray(); var disks = item.Read(Machine.DiskKey); gameBase.Disk = disks?.Select(ConvertToClrMamePro)?.ToArray(); var medias = item.Read(Machine.MediaKey); gameBase.Media = medias?.Select(ConvertToClrMamePro)?.ToArray(); var samples = item.Read(Machine.SampleKey); gameBase.Sample = samples?.Select(ConvertToClrMamePro)?.ToArray(); var archives = item.Read(Machine.ArchiveKey); gameBase.Archive = archives?.Select(ConvertToClrMamePro)?.ToArray(); var chips = item.Read(Machine.ChipKey); gameBase.Chip = chips?.Select(ConvertToClrMamePro)?.ToArray(); var video = item.Read