diff --git a/SabreTools.Models/Internal/Control.cs b/SabreTools.Models/Internal/Control.cs index 1e2bcb87..cfaa990f 100644 --- a/SabreTools.Models/Internal/Control.cs +++ b/SabreTools.Models/Internal/Control.cs @@ -30,7 +30,7 @@ namespace SabreTools.Models.Internal public const string ReverseKey = "reverse"; /// long - public const string Sensitivity = "sensitivity"; + public const string SensitivityKey = "sensitivity"; /// (joy|stick|paddle|pedal|lightgun|positional|dial|trackball|mouse|only_buttons|keypad|keyboard|mahjong|hanafuda|gambling) public const string ControlTypeKey = "type"; diff --git a/SabreTools.Models/Internal/Display.cs b/SabreTools.Models/Internal/Display.cs index 79d23489..3eaea96f 100644 --- a/SabreTools.Models/Internal/Display.cs +++ b/SabreTools.Models/Internal/Display.cs @@ -15,7 +15,7 @@ namespace SabreTools.Models.Internal public const string HBEndKey = "hbend"; /// long - public const string HBStart = "hbstart"; + public const string HBStartKey = "hbstart"; /// long public const string HeightKey = "height"; diff --git a/SabreTools.Models/Listxml/Control.cs b/SabreTools.Models/Listxml/Control.cs index cd67016a..86032b3a 100644 --- a/SabreTools.Models/Listxml/Control.cs +++ b/SabreTools.Models/Listxml/Control.cs @@ -6,6 +6,7 @@ namespace SabreTools.Models.Listxml [XmlRoot("control")] public class Control { + /// (joy|stick|paddle|pedal|lightgun|positional|dial|trackball|mouse|only_buttons|keypad|keyboard|mahjong|hanafuda|gambling) [XmlAttribute("type")] public string Type { get; set; } diff --git a/SabreTools.Serialization/Internal.Deserializer.cs b/SabreTools.Serialization/Internal.Deserializer.cs index 82caef94..8fcc5cb2 100644 --- a/SabreTools.Serialization/Internal.Deserializer.cs +++ b/SabreTools.Serialization/Internal.Deserializer.cs @@ -1,3 +1,5 @@ +using System.Collections.Generic; + namespace SabreTools.Serialization { /// @@ -333,7 +335,7 @@ namespace SabreTools.Serialization } #endregion - + #region EverdriveSMDB /// @@ -354,7 +356,7 @@ namespace SabreTools.Serialization } #endregion - + #region Hashfile /// @@ -449,7 +451,7 @@ namespace SabreTools.Serialization } #endregion - + #region Listrom /// @@ -494,5 +496,575 @@ namespace SabreTools.Serialization } #endregion + + #region Listxml + + /// + /// Convert from to + /// + public static Models.Listxml.Adjuster ConvertToListxml(Models.Internal.Adjuster item) + { + var adjuster = new Models.Listxml.Adjuster + { + Name = item.ReadString(Models.Internal.Adjuster.NameKey), + Default = item.ReadString(Models.Internal.Adjuster.DefaultKey), + }; + + if (item.ContainsKey(Models.Internal.Adjuster.ConditionKey) && item[Models.Internal.Adjuster.ConditionKey] is Models.Internal.Condition condition) + adjuster.Condition = ConvertToListxml(condition); + + return adjuster; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Analog ConvertToListxml(Models.Internal.Analog item) + { + var analog = new Models.Listxml.Analog + { + Mask = item.ReadString(Models.Internal.Analog.MaskKey), + }; + return analog; + } + + /// + /// Convert from to + /// + public static Models.Listxml.BiosSet ConvertToListxml(Models.Internal.BiosSet item) + { + var biosset = new Models.Listxml.BiosSet + { + Name = item.ReadString(Models.Internal.BiosSet.NameKey), + Description = item.ReadString(Models.Internal.BiosSet.DescriptionKey), + Default = item.ReadString(Models.Internal.BiosSet.DefaultKey), + }; + return biosset; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Chip ConvertToListxml(Models.Internal.Chip item) + { + var chip = new Models.Listxml.Chip + { + Name = item.ReadString(Models.Internal.Chip.NameKey), + Tag = item.ReadString(Models.Internal.Chip.TagKey), + Type = item.ReadString(Models.Internal.Chip.TypeKey), + SoundOnly = item.ReadString(Models.Internal.Chip.SoundOnlyKey), + Clock = item.ReadString(Models.Internal.Chip.ClockKey), + }; + return chip; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Condition ConvertToListxml(Models.Internal.Condition item) + { + var condition = new Models.Listxml.Condition + { + Tag = item.ReadString(Models.Internal.Condition.TagKey), + Mask = item.ReadString(Models.Internal.Condition.MaskKey), + Relation = item.ReadString(Models.Internal.Condition.RelationKey), + Value = item.ReadString(Models.Internal.Condition.ValueKey), + }; + return condition; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Configuration ConvertToListxml(Models.Internal.Configuration item) + { + var configuration = new Models.Listxml.Configuration + { + Name = item.ReadString(Models.Internal.Configuration.NameKey), + Tag = item.ReadString(Models.Internal.Configuration.TagKey), + Mask = item.ReadString(Models.Internal.Configuration.MaskKey), + }; + + if (item.ContainsKey(Models.Internal.Configuration.ConditionKey) && item[Models.Internal.Configuration.ConditionKey] is Models.Internal.Condition condition) + configuration.Condition = ConvertToListxml(condition); + + if (item.ContainsKey(Models.Internal.Configuration.ConfLocationKey) && item[Models.Internal.Configuration.ConfLocationKey] is Models.Internal.ConfLocation[] confLocations) + { + var confLocationItems = new List(); + foreach (var confLocation in confLocations) + { + confLocationItems.Add(ConvertToListxml(confLocation)); + } + configuration.ConfLocation = confLocationItems.ToArray(); + } + + if (item.ContainsKey(Models.Internal.Configuration.ConfSettingKey) && item[Models.Internal.Configuration.ConfSettingKey] is Models.Internal.ConfSetting[] confSettings) + { + var confSettingItems = new List(); + foreach (var confSetting in confSettings) + { + confSettingItems.Add(ConvertToListxml(confSetting)); + } + configuration.ConfSetting = confSettingItems.ToArray(); + } + + return configuration; + } + + /// + /// Convert from to + /// + public static Models.Listxml.ConfLocation ConvertToListxml(Models.Internal.ConfLocation item) + { + var confLocation = new Models.Listxml.ConfLocation + { + Name = item.ReadString(Models.Internal.ConfLocation.NameKey), + Number = item.ReadString(Models.Internal.ConfLocation.NumberKey), + Inverted = item.ReadString(Models.Internal.ConfLocation.InvertedKey), + }; + return confLocation; + } + + /// + /// Convert from to + /// + public static Models.Listxml.ConfSetting ConvertToListxml(Models.Internal.ConfSetting item) + { + var confSetting = new Models.Listxml.ConfSetting + { + Name = item.ReadString(Models.Internal.ConfSetting.NameKey), + Value = item.ReadString(Models.Internal.ConfSetting.ValueKey), + Default = item.ReadString(Models.Internal.ConfSetting.DefaultKey), + }; + + if (item.ContainsKey(Models.Internal.ConfSetting.ConditionKey) && item[Models.Internal.ConfSetting.ConditionKey] is Models.Internal.Condition condition) + confSetting.Condition = ConvertToListxml(condition); + + return confSetting; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Control ConvertToListxml(Models.Internal.Control item) + { + var control = new Models.Listxml.Control + { + Type = item.ReadString(Models.Internal.Control.TypeKey), + Player = item.ReadString(Models.Internal.Control.PlayerKey), + Buttons = item.ReadString(Models.Internal.Control.ButtonsKey), + ReqButtons = item.ReadString(Models.Internal.Control.ReqButtonsKey), + Minimum = item.ReadString(Models.Internal.Control.MinimumKey), + Maximum = item.ReadString(Models.Internal.Control.MaximumKey), + Sensitivity = item.ReadString(Models.Internal.Control.SensitivityKey), + KeyDelta = item.ReadString(Models.Internal.Control.KeyDeltaKey), + Reverse = item.ReadString(Models.Internal.Control.ReverseKey), + Ways = item.ReadString(Models.Internal.Control.WaysKey), + Ways2 = item.ReadString(Models.Internal.Control.Ways2Key), + Ways3 = item.ReadString(Models.Internal.Control.Ways3Key), + }; + return control; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Device ConvertToListxml(Models.Internal.Device item) + { + var device = new Models.Listxml.Device + { + Type = item.ReadString(Models.Internal.Device.TypeKey), + Tag = item.ReadString(Models.Internal.Device.TagKey), + FixedImage = item.ReadString(Models.Internal.Device.FixedImageKey), + Mandatory = item.ReadString(Models.Internal.Device.MandatoryKey), + Interface = item.ReadString(Models.Internal.Device.InterfaceKey), + }; + + if (item.ContainsKey(Models.Internal.Device.InstanceKey) && item[Models.Internal.Device.InstanceKey] is Models.Internal.Instance instance) + device.Instance = ConvertToListxml(instance); + + if (item.ContainsKey(Models.Internal.Device.ExtensionKey) && item[Models.Internal.Device.ExtensionKey] is Models.Internal.Extension[] extensions) + { + var extensionItems = new List(); + foreach (var extension in extensions) + { + extensionItems.Add(ConvertToListxml(extension)); + } + device.Extension = extensionItems.ToArray(); + } + + return device; + } + + /// + /// Convert from to + /// + public static Models.Listxml.DeviceRef ConvertToListxml(Models.Internal.DeviceRef item) + { + var deviceRef = new Models.Listxml.DeviceRef + { + Name = item.ReadString(Models.Internal.DeviceRef.NameKey), + }; + return deviceRef; + } + + /// + /// Convert from to + /// + public static Models.Listxml.DipLocation ConvertToListxml(Models.Internal.DipLocation item) + { + var dipLocation = new Models.Listxml.DipLocation + { + Name = item.ReadString(Models.Internal.DipLocation.NameKey), + Number = item.ReadString(Models.Internal.DipLocation.NumberKey), + Inverted = item.ReadString(Models.Internal.DipLocation.InvertedKey), + }; + return dipLocation; + } + + /// + /// Convert from to + /// + public static Models.Listxml.DipSwitch ConvertToListxml(Models.Internal.DipSwitch item) + { + var dipSwitch = new Models.Listxml.DipSwitch + { + Name = item.ReadString(Models.Internal.DipSwitch.NameKey), + Tag = item.ReadString(Models.Internal.DipSwitch.TagKey), + Mask = item.ReadString(Models.Internal.DipSwitch.MaskKey), + }; + + if (item.ContainsKey(Models.Internal.DipSwitch.ConditionKey) && item[Models.Internal.DipSwitch.ConditionKey] is Models.Internal.Condition condition) + dipSwitch.Condition = ConvertToListxml(condition); + + if (item.ContainsKey(Models.Internal.DipSwitch.DipLocationKey) && item[Models.Internal.DipSwitch.DipLocationKey] is Models.Internal.DipLocation[] dipLocations) + { + var dipLocationItems = new List(); + foreach (var dipLocation in dipLocations) + { + dipLocationItems.Add(ConvertToListxml(dipLocation)); + } + dipSwitch.DipLocation = dipLocationItems.ToArray(); + } + + if (item.ContainsKey(Models.Internal.DipSwitch.DipValueKey) && item[Models.Internal.DipSwitch.DipValueKey] is Models.Internal.DipValue[] dipValues) + { + var dipValueItems = new List(); + foreach (var dipValue in dipValues) + { + dipValueItems.Add(ConvertToListxml(dipValue)); + } + dipSwitch.DipValue = dipValueItems.ToArray(); + } + + return dipSwitch; + } + + /// + /// Convert from to + /// + public static Models.Listxml.DipValue ConvertToListxml(Models.Internal.DipValue item) + { + var dipValue = new Models.Listxml.DipValue + { + Name = item.ReadString(Models.Internal.DipValue.NameKey), + Value = item.ReadString(Models.Internal.DipValue.ValueKey), + Default = item.ReadString(Models.Internal.DipValue.DefaultKey), + }; + + if (item.ContainsKey(Models.Internal.DipValue.ConditionKey) && item[Models.Internal.DipValue.ConditionKey] is Models.Internal.Condition condition) + dipValue.Condition = ConvertToListxml(condition); + + return dipValue; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Disk ConvertToListxml(Models.Internal.Disk item) + { + var disk = new Models.Listxml.Disk + { + Name = item.ReadString(Models.Internal.Disk.NameKey), + MD5 = item.ReadString(Models.Internal.Disk.MD5Key), + SHA1 = item.ReadString(Models.Internal.Disk.SHA1Key), + Merge = item.ReadString(Models.Internal.Disk.MergeKey), + Region = item.ReadString(Models.Internal.Disk.RegionKey), + Index = item.ReadString(Models.Internal.Disk.IndexKey), + Writable = item.ReadString(Models.Internal.Disk.WritableKey), + Status = item.ReadString(Models.Internal.Disk.StatusKey), + Optional = item.ReadString(Models.Internal.Disk.OptionalKey), + }; + return disk; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Display ConvertToListxml(Models.Internal.Display item) + { + var display = new Models.Listxml.Display + { + Tag = item.ReadString(Models.Internal.Display.TagKey), + Type = item.ReadString(Models.Internal.Display.TypeKey), + Rotate = item.ReadString(Models.Internal.Display.RotateKey), + FlipX = item.ReadString(Models.Internal.Display.FlipXKey), + Width = item.ReadString(Models.Internal.Display.WidthKey), + Height = item.ReadString(Models.Internal.Display.HeightKey), + Refresh = item.ReadString(Models.Internal.Display.RefreshKey), + PixClock = item.ReadString(Models.Internal.Display.PixClockKey), + HTotal = item.ReadString(Models.Internal.Display.HTotalKey), + HBEnd = item.ReadString(Models.Internal.Display.HBEndKey), + HBStart = item.ReadString(Models.Internal.Display.HBStartKey), + VTotal = item.ReadString(Models.Internal.Display.VTotalKey), + VBEnd = item.ReadString(Models.Internal.Display.VBEndKey), + VBStart = item.ReadString(Models.Internal.Display.VBStartKey), + }; + return display; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Driver ConvertToListxml(Models.Internal.Driver item) + { + var driver = new Models.Listxml.Driver + { + Status = item.ReadString(Models.Internal.Driver.StatusKey), + Color = item.ReadString(Models.Internal.Driver.ColorKey), + Sound = item.ReadString(Models.Internal.Driver.SoundKey), + PaletteSize = item.ReadString(Models.Internal.Driver.PaletteSizeKey), + Emulation = item.ReadString(Models.Internal.Driver.EmulationKey), + Cocktail = item.ReadString(Models.Internal.Driver.CocktailKey), + SaveState = item.ReadString(Models.Internal.Driver.SaveStateKey), + RequiresArtwork = item.ReadString(Models.Internal.Driver.RequiresArtworkKey), + Unofficial = item.ReadString(Models.Internal.Driver.UnofficialKey), + NoSoundHardware = item.ReadString(Models.Internal.Driver.NoSoundHardwareKey), + Incomplete = item.ReadString(Models.Internal.Driver.IncompleteKey), + }; + return driver; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Extension ConvertToListxml(Models.Internal.Extension item) + { + var extension = new Models.Listxml.Extension + { + Name = item.ReadString(Models.Internal.Extension.NameKey), + }; + return extension; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Feature ConvertToListxml(Models.Internal.Feature item) + { + var feature = new Models.Listxml.Feature + { + Type = item.ReadString(Models.Internal.Feature.TypeKey), + Status = item.ReadString(Models.Internal.Feature.StatusKey), + Overall = item.ReadString(Models.Internal.Feature.OverallKey), + }; + return feature; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Input ConvertToListxml(Models.Internal.Input item) + { + var input = new Models.Listxml.Input + { + Service = item.ReadString(Models.Internal.Input.ServiceKey), + Tilt = item.ReadString(Models.Internal.Input.TiltKey), + Players = item.ReadString(Models.Internal.Input.PlayersKey), + ControlAttr = item.ReadString(Models.Internal.Input.ControlKey), + Buttons = item.ReadString(Models.Internal.Input.ButtonsKey), + Coins = item.ReadString(Models.Internal.Input.CoinsKey), + }; + + if (item.ContainsKey(Models.Internal.Input.ControlKey) && item[Models.Internal.Input.ControlKey] is Models.Internal.Control[] controls) + { + var controlItems = new List(); + foreach (var control in controls) + { + controlItems.Add(ConvertToListxml(control)); + } + input.Control = controlItems.ToArray(); + } + + return input; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Instance ConvertToListxml(Models.Internal.Instance item) + { + var instance = new Models.Listxml.Instance + { + Name = item.ReadString(Models.Internal.Instance.NameKey), + BriefName = item.ReadString(Models.Internal.Instance.BriefNameKey), + }; + return instance; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Port ConvertToListxml(Models.Internal.Port item) + { + var input = new Models.Listxml.Port + { + Tag = item.ReadString(Models.Internal.Port.TagKey), + }; + + if (item.ContainsKey(Models.Internal.Port.AnalogKey) && item[Models.Internal.Port.AnalogKey] is Models.Internal.Analog[] analogs) + { + var analogItems = new List(); + foreach (var analog in analogs) + { + analogItems.Add(ConvertToListxml(analog)); + } + input.Analog = analogItems.ToArray(); + } + + return input; + } + + /// + /// Convert from to + /// + public static Models.Listxml.RamOption ConvertToListxml(Models.Internal.RamOption item) + { + var ramOption = new Models.Listxml.RamOption + { + Name = item.ReadString(Models.Internal.RamOption.NameKey), + Default = item.ReadString(Models.Internal.RamOption.DefaultKey), + }; + return ramOption; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Rom ConvertToListxml(Models.Internal.Rom item) + { + var rom = new Models.Listxml.Rom + { + Name = item.ReadString(Models.Internal.Rom.NameKey), + Bios = item.ReadString(Models.Internal.Rom.BiosKey), + Size = item.ReadString(Models.Internal.Rom.SizeKey), + CRC = item.ReadString(Models.Internal.Rom.CRCKey), + SHA1 = item.ReadString(Models.Internal.Rom.SHA1Key), + Merge = item.ReadString(Models.Internal.Rom.MergeKey), + Region = item.ReadString(Models.Internal.Rom.RegionKey), + Offset = item.ReadString(Models.Internal.Rom.OffsetKey), + Status = item.ReadString(Models.Internal.Rom.StatusKey), + Optional = item.ReadString(Models.Internal.Rom.OptionalKey), + Dispose = item.ReadString(Models.Internal.Rom.DisposeKey), + SoundOnly = item.ReadString(Models.Internal.Rom.SoundOnlyKey), + }; + return rom; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Sample ConvertToListxml(Models.Internal.Sample item) + { + var sample = new Models.Listxml.Sample + { + Name = item.ReadString(Models.Internal.Sample.NameKey), + }; + return sample; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Slot ConvertToListxml(Models.Internal.Slot item) + { + var slot = new Models.Listxml.Slot + { + Name = item.ReadString(Models.Internal.Slot.NameKey), + }; + + if (item.ContainsKey(Models.Internal.Slot.SlotOptionKey) && item[Models.Internal.Slot.SlotOptionKey] is Models.Internal.SlotOption[] slotOptions) + { + var slotOptionItems = new List(); + foreach (var slotOption in slotOptions) + { + slotOptionItems.Add(ConvertToListxml(slotOption)); + } + slot.SlotOption = slotOptionItems.ToArray(); + } + + return slot; + } + + /// + /// Convert from to + /// + public static Models.Listxml.SlotOption ConvertToListxml(Models.Internal.SlotOption item) + { + var slotOption = new Models.Listxml.SlotOption + { + Name = item.ReadString(Models.Internal.SlotOption.NameKey), + DevName = item.ReadString(Models.Internal.SlotOption.DevNameKey), + Default = item.ReadString(Models.Internal.SlotOption.DefaultKey), + }; + return slotOption; + } + + /// + /// Convert from to + /// + public static Models.Listxml.SoftwareList ConvertToListxml(Models.Internal.SoftwareList item) + { + var softwareList = new Models.Listxml.SoftwareList + { + Tag = item.ReadString(Models.Internal.SoftwareList.TagKey), + Name = item.ReadString(Models.Internal.SoftwareList.NameKey), + Status = item.ReadString(Models.Internal.SoftwareList.StatusKey), + Filter = item.ReadString(Models.Internal.SoftwareList.FilterKey), + }; + return softwareList; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Sound ConvertToListxml(Models.Internal.Sound item) + { + var sound = new Models.Listxml.Sound + { + Channels = item.ReadString(Models.Internal.Sound.ChannelsKey), + }; + return sound; + } + + /// + /// Convert from to + /// + public static Models.Listxml.Video ConvertToListxml(Models.Internal.Video item) + { + var video = new Models.Listxml.Video + { + Screen = item.ReadString(Models.Internal.Video.ScreenKey), + Orientation = item.ReadString(Models.Internal.Video.OrientationKey), + Width = item.ReadString(Models.Internal.Video.WidthKey), + Height = item.ReadString(Models.Internal.Video.HeightKey), + AspectX = item.ReadString(Models.Internal.Video.AspectXKey), + AspectY = item.ReadString(Models.Internal.Video.AspectYKey), + Refresh = item.ReadString(Models.Internal.Video.RefreshKey), + }; + return video; + } + + #endregion } } \ No newline at end of file diff --git a/SabreTools.Serialization/Internal.Serializer.cs b/SabreTools.Serialization/Internal.Serializer.cs index c624feb5..940b0f49 100644 --- a/SabreTools.Serialization/Internal.Serializer.cs +++ b/SabreTools.Serialization/Internal.Serializer.cs @@ -1,3 +1,6 @@ +using System.Collections.Generic; +using System.Linq; + namespace SabreTools.Serialization { /// @@ -494,5 +497,575 @@ namespace SabreTools.Serialization } #endregion + + #region Listxml + + /// + /// Convert from to + /// + public static Models.Internal.Adjuster ConvertFromListxml(Models.Listxml.Adjuster item) + { + var adjuster = new Models.Internal.Adjuster + { + [Models.Internal.Adjuster.NameKey] = item.Name, + [Models.Internal.Adjuster.DefaultKey] = item.Default, + }; + + if (item.Condition != null) + adjuster[Models.Internal.Adjuster.ConditionKey] = ConvertFromListxml(item.Condition); + + return adjuster; + } + + /// + /// Convert from to + /// + public static Models.Internal.Analog ConvertFromListxml(Models.Listxml.Analog item) + { + var analog = new Models.Internal.Analog + { + [Models.Internal.Analog.MaskKey] = item.Mask, + }; + return analog; + } + + /// + /// Convert from to + /// + public static Models.Internal.BiosSet ConvertFromListxml(Models.Listxml.BiosSet item) + { + var biosset = new Models.Internal.BiosSet + { + [Models.Internal.BiosSet.NameKey] = item.Name, + [Models.Internal.BiosSet.DescriptionKey] = item.Description, + [Models.Internal.BiosSet.DefaultKey] = item.Default, + }; + return biosset; + } + + /// + /// Convert from to + /// + public static Models.Internal.Chip ConvertFromListxml(Models.Listxml.Chip item) + { + var chip = new Models.Internal.Chip + { + [Models.Internal.Chip.NameKey] = item.Name, + [Models.Internal.Chip.TagKey] = item.Tag, + [Models.Internal.Chip.TypeKey] = item.Type, + [Models.Internal.Chip.SoundOnlyKey] = item.SoundOnly, + [Models.Internal.Chip.ClockKey] = item.Clock, + }; + return chip; + } + + /// + /// Convert from to + /// + public static Models.Internal.Condition ConvertFromListxml(Models.Listxml.Condition item) + { + var condition = new Models.Internal.Condition + { + [Models.Internal.Condition.TagKey] = item.Tag, + [Models.Internal.Condition.MaskKey] = item.Mask, + [Models.Internal.Condition.RelationKey] = item.Relation, + [Models.Internal.Condition.ValueKey] = item.Value, + }; + return condition; + } + + /// + /// Convert from to + /// + public static Models.Internal.Configuration ConvertFromListxml(Models.Listxml.Configuration item) + { + var configuration = new Models.Internal.Configuration + { + [Models.Internal.Configuration.NameKey] = item.Name, + [Models.Internal.Configuration.TagKey] = item.Tag, + [Models.Internal.Configuration.MaskKey] = item.Mask, + }; + + if (item.Condition != null) + configuration[Models.Internal.Configuration.ConditionKey] = ConvertFromListxml(item.Condition); + + if (item.ConfLocation != null && item.ConfLocation.Any()) + { + var confLocations = new List(); + foreach (var confLocation in item.ConfLocation) + { + confLocations.Add(ConvertFromListxml(confLocation)); + } + configuration[Models.Internal.Configuration.ConfLocationKey] = confLocations.ToArray(); + } + + if (item.ConfSetting != null && item.ConfSetting.Any()) + { + var confSettings = new List(); + foreach (var confSetting in item.ConfSetting) + { + confSettings.Add(ConvertFromListxml(confSetting)); + } + configuration[Models.Internal.Configuration.ConfSettingKey] = confSettings.ToArray(); + } + + return configuration; + } + + /// + /// Convert from to + /// + public static Models.Internal.ConfLocation ConvertFromListxml(Models.Listxml.ConfLocation item) + { + var confLocation = new Models.Internal.ConfLocation + { + [Models.Internal.ConfLocation.NameKey] = item.Name, + [Models.Internal.ConfLocation.NumberKey] = item.Number, + [Models.Internal.ConfLocation.InvertedKey] = item.Inverted, + }; + return confLocation; + } + + /// + /// Convert from to + /// + public static Models.Internal.ConfSetting ConvertFromListxml(Models.Listxml.ConfSetting item) + { + var confSetting = new Models.Internal.ConfSetting + { + [Models.Internal.ConfSetting.NameKey] = item.Name, + [Models.Internal.ConfSetting.ValueKey] = item.Value, + [Models.Internal.ConfSetting.DefaultKey] = item.Default, + }; + + if (item.Condition != null) + confSetting[Models.Internal.ConfSetting.ConditionKey] = ConvertFromListxml(item.Condition); + + return confSetting; + } + + /// + /// Convert from to + /// + public static Models.Internal.Control ConvertFromListxml(Models.Listxml.Control item) + { + var control = new Models.Internal.Control + { + [Models.Internal.Control.TypeKey] = item.Type, + [Models.Internal.Control.PlayerKey] = item.Player, + [Models.Internal.Control.ButtonsKey] = item.Buttons, + [Models.Internal.Control.ReqButtonsKey] = item.ReqButtons, + [Models.Internal.Control.MinimumKey] = item.Minimum, + [Models.Internal.Control.MaximumKey] = item.Maximum, + [Models.Internal.Control.SensitivityKey] = item.Sensitivity, + [Models.Internal.Control.KeyDeltaKey] = item.KeyDelta, + [Models.Internal.Control.ReverseKey] = item.Reverse, + [Models.Internal.Control.WaysKey] = item.Ways, + [Models.Internal.Control.Ways2Key] = item.Ways2, + [Models.Internal.Control.Ways3Key] = item.Ways3, + }; + return control; + } + + /// + /// Convert from to + /// + public static Models.Internal.Device ConvertFromListxml(Models.Listxml.Device item) + { + var device = new Models.Internal.Device + { + [Models.Internal.Device.TypeKey] = item.Type, + [Models.Internal.Device.TagKey] = item.Tag, + [Models.Internal.Device.FixedImageKey] = item.FixedImage, + [Models.Internal.Device.MandatoryKey] = item.Mandatory, + [Models.Internal.Device.InterfaceKey] = item.Interface, + }; + + if (item.Instance != null) + device[Models.Internal.Device.InstanceKey] = ConvertFromListxml(item.Instance); + + if (item.Extension != null && item.Extension.Any()) + { + var extensions = new List(); + foreach (var extension in item.Extension) + { + extensions.Add(ConvertFromListxml(extension)); + } + device[Models.Internal.Device.ExtensionKey] = extensions.ToArray(); + } + + return device; + } + + /// + /// Convert from to + /// + public static Models.Internal.DeviceRef ConvertFromListxml(Models.Listxml.DeviceRef item) + { + var deviceRef = new Models.Internal.DeviceRef + { + [Models.Internal.DeviceRef.NameKey] = item.Name, + }; + return deviceRef; + } + + /// + /// Convert from to + /// + public static Models.Internal.DipLocation ConvertFromListxml(Models.Listxml.DipLocation item) + { + var dipLocation = new Models.Internal.DipLocation + { + [Models.Internal.DipLocation.NameKey] = item.Name, + [Models.Internal.DipLocation.NumberKey] = item.Number, + [Models.Internal.DipLocation.InvertedKey] = item.Inverted, + }; + return dipLocation; + } + + /// + /// Convert from to + /// + public static Models.Internal.DipSwitch ConvertFromListxml(Models.Listxml.DipSwitch item) + { + var dipSwitch = new Models.Internal.DipSwitch + { + [Models.Internal.DipSwitch.NameKey] = item.Name, + [Models.Internal.DipSwitch.TagKey] = item.Tag, + [Models.Internal.DipSwitch.MaskKey] = item.Mask, + }; + + if (item.Condition != null) + dipSwitch[Models.Internal.DipSwitch.ConditionKey] = ConvertFromListxml(item.Condition); + + if (item.DipLocation != null && item.DipLocation.Any()) + { + var dipLocations = new List(); + foreach (var dipLocation in item.DipLocation) + { + dipLocations.Add(ConvertFromListxml(dipLocation)); + } + dipSwitch[Models.Internal.DipSwitch.DipLocationKey] = dipLocations.ToArray(); + } + + if (item.DipValue != null && item.DipValue.Any()) + { + var dipValues = new List(); + foreach (var dipValue in item.DipValue) + { + dipValues.Add(ConvertFromListxml(dipValue)); + } + dipSwitch[Models.Internal.DipSwitch.DipValueKey] = dipValues.ToArray(); + } + + return dipSwitch; + } + + /// + /// Convert from to + /// + public static Models.Internal.DipValue ConvertFromListxml(Models.Listxml.DipValue item) + { + var dipValue = new Models.Internal.DipValue + { + [Models.Internal.DipValue.NameKey] = item.Name, + [Models.Internal.DipValue.ValueKey] = item.Value, + [Models.Internal.DipValue.DefaultKey] = item.Default, + }; + + if (item.Condition != null) + dipValue[Models.Internal.DipValue.ConditionKey] = ConvertFromListxml(item.Condition); + + return dipValue; + } + + /// + /// Convert from to + /// + public static Models.Internal.Disk ConvertFromListxml(Models.Listxml.Disk item) + { + var disk = new Models.Internal.Disk + { + [Models.Internal.Disk.NameKey] = item.Name, + [Models.Internal.Disk.MD5Key] = item.MD5, + [Models.Internal.Disk.SHA1Key] = item.SHA1, + [Models.Internal.Disk.MergeKey] = item.Merge, + [Models.Internal.Disk.RegionKey] = item.Region, + [Models.Internal.Disk.IndexKey] = item.Index, + [Models.Internal.Disk.WritableKey] = item.Writable, + [Models.Internal.Disk.StatusKey] = item.Status, + [Models.Internal.Disk.OptionalKey] = item.Optional, + }; + return disk; + } + + /// + /// Convert from to + /// + public static Models.Internal.Display ConvertFromListxml(Models.Listxml.Display item) + { + var display = new Models.Internal.Display + { + [Models.Internal.Display.TagKey] = item.Tag, + [Models.Internal.Display.TypeKey] = item.Type, + [Models.Internal.Display.RotateKey] = item.Rotate, + [Models.Internal.Display.FlipXKey] = item.FlipX, + [Models.Internal.Display.WidthKey] = item.Width, + [Models.Internal.Display.HeightKey] = item.Height, + [Models.Internal.Display.RefreshKey] = item.Refresh, + [Models.Internal.Display.PixClockKey] = item.PixClock, + [Models.Internal.Display.HTotalKey] = item.HTotal, + [Models.Internal.Display.HBEndKey] = item.HBEnd, + [Models.Internal.Display.HBStartKey] = item.HBStart, + [Models.Internal.Display.VTotalKey] = item.VTotal, + [Models.Internal.Display.VBEndKey] = item.VBEnd, + [Models.Internal.Display.VBStartKey] = item.VBStart, + }; + return display; + } + + /// + /// Convert from to + /// + public static Models.Internal.Driver ConvertFromListxml(Models.Listxml.Driver item) + { + var driver = new Models.Internal.Driver + { + [Models.Internal.Driver.StatusKey] = item.Status, + [Models.Internal.Driver.ColorKey] = item.Color, + [Models.Internal.Driver.SoundKey] = item.Sound, + [Models.Internal.Driver.PaletteSizeKey] = item.PaletteSize, + [Models.Internal.Driver.EmulationKey] = item.Emulation, + [Models.Internal.Driver.CocktailKey] = item.Cocktail, + [Models.Internal.Driver.SaveStateKey] = item.SaveState, + [Models.Internal.Driver.RequiresArtworkKey] = item.RequiresArtwork, + [Models.Internal.Driver.UnofficialKey] = item.Unofficial, + [Models.Internal.Driver.NoSoundHardwareKey] = item.NoSoundHardware, + [Models.Internal.Driver.IncompleteKey] = item.Incomplete, + }; + return driver; + } + + /// + /// Convert from to + /// + public static Models.Internal.Extension ConvertFromListxml(Models.Listxml.Extension item) + { + var extension = new Models.Internal.Extension + { + [Models.Internal.Extension.NameKey] = item.Name, + }; + return extension; + } + + /// + /// Convert from to + /// + public static Models.Internal.Feature ConvertFromListxml(Models.Listxml.Feature item) + { + var feature = new Models.Internal.Feature + { + [Models.Internal.Feature.TypeKey] = item.Type, + [Models.Internal.Feature.StatusKey] = item.Status, + [Models.Internal.Feature.OverallKey] = item.Overall, + }; + return feature; + } + + /// + /// Convert from to + /// + public static Models.Internal.Input ConvertFromListxml(Models.Listxml.Input item) + { + var input = new Models.Internal.Input + { + [Models.Internal.Input.ServiceKey] = item.Service, + [Models.Internal.Input.TiltKey] = item.Tilt, + [Models.Internal.Input.PlayersKey] = item.Players, + [Models.Internal.Input.ControlKey] = item.ControlAttr, + [Models.Internal.Input.ButtonsKey] = item.Buttons, + [Models.Internal.Input.CoinsKey] = item.Coins, + }; + + if (item.Control != null && item.Control.Any()) + { + var controls = new List(); + foreach (var control in item.Control) + { + controls.Add(ConvertFromListxml(control)); + } + input[Models.Internal.Input.ControlKey] = controls.ToArray(); + } + + return input; + } + + /// + /// Convert from to + /// + public static Models.Internal.Instance ConvertFromListxml(Models.Listxml.Instance item) + { + var instance = new Models.Internal.Instance + { + [Models.Internal.Instance.NameKey] = item.Name, + [Models.Internal.Instance.BriefNameKey] = item.BriefName, + }; + return instance; + } + + /// + /// Convert from to + /// + public static Models.Internal.Port ConvertFromListxml(Models.Listxml.Port item) + { + var port = new Models.Internal.Port + { + [Models.Internal.Port.TagKey] = item.Tag, + }; + + if (item.Analog != null && item.Analog.Any()) + { + var analogs = new List(); + foreach (var analog in item.Analog) + { + analogs.Add(ConvertFromListxml(analog)); + } + port[Models.Internal.Port.AnalogKey] = analogs.ToArray(); + } + + return port; + } + + /// + /// Convert from to + /// + public static Models.Internal.RamOption ConvertFromListxml(Models.Listxml.RamOption item) + { + var ramOption = new Models.Internal.RamOption + { + [Models.Internal.RamOption.NameKey] = item.Name, + [Models.Internal.RamOption.DefaultKey] = item.Default, + }; + return ramOption; + } + + /// + /// Convert from to + /// + public static Models.Internal.Rom ConvertFromListxml(Models.Listxml.Rom item) + { + var rom = new Models.Internal.Rom + { + [Models.Internal.Rom.NameKey] = item.Name, + [Models.Internal.Rom.BiosKey] = item.Bios, + [Models.Internal.Rom.SizeKey] = item.Size, + [Models.Internal.Rom.CRCKey] = item.CRC, + [Models.Internal.Rom.SHA1Key] = item.SHA1, + [Models.Internal.Rom.MergeKey] = item.Merge, + [Models.Internal.Rom.RegionKey] = item.Region, + [Models.Internal.Rom.OffsetKey] = item.Offset, + [Models.Internal.Rom.StatusKey] = item.Status, + [Models.Internal.Rom.OptionalKey] = item.Optional, + [Models.Internal.Rom.DisposeKey] = item.Dispose, + [Models.Internal.Rom.SoundOnlyKey] = item.SoundOnly, + }; + return rom; + } + + /// + /// Convert from to + /// + public static Models.Internal.Sample ConvertFromListxml(Models.Listxml.Sample item) + { + var sample = new Models.Internal.Sample + { + [Models.Internal.Sample.NameKey] = item.Name, + }; + return sample; + } + + /// + /// Convert from to + /// + public static Models.Internal.Slot ConvertFromListxml(Models.Listxml.Slot item) + { + var slot = new Models.Internal.Slot + { + [Models.Internal.Slot.NameKey] = item.Name, + }; + + if (item.SlotOption != null && item.SlotOption.Any()) + { + var slotOptions = new List(); + foreach (var slotOption in item.SlotOption) + { + slotOptions.Add(ConvertFromListxml(slotOption)); + } + slot[Models.Internal.Slot.SlotOptionKey] = slotOptions.ToArray(); + } + + return slot; + } + + /// + /// Convert from to + /// + public static Models.Internal.SlotOption ConvertFromListxml(Models.Listxml.SlotOption item) + { + var slotOption = new Models.Internal.SlotOption + { + [Models.Internal.SlotOption.NameKey] = item.Name, + [Models.Internal.SlotOption.DevNameKey] = item.DevName, + [Models.Internal.SlotOption.DefaultKey] = item.Default, + }; + return slotOption; + } + + /// + /// Convert from to + /// + public static Models.Internal.SoftwareList ConvertFromListxml(Models.Listxml.SoftwareList item) + { + var softwareList = new Models.Internal.SoftwareList + { + [Models.Internal.SoftwareList.TagKey] = item.Tag, + [Models.Internal.SoftwareList.NameKey] = item.Name, + [Models.Internal.SoftwareList.StatusKey] = item.Status, + [Models.Internal.SoftwareList.FilterKey] = item.Filter, + }; + return softwareList; + } + + /// + /// Convert from to + /// + public static Models.Internal.Sound ConvertFromListxml(Models.Listxml.Sound item) + { + var sound = new Models.Internal.Sound + { + [Models.Internal.Sound.ChannelsKey] = item.Channels, + }; + return sound; + } + + /// + /// Convert from to + /// + public static Models.Internal.Video ConvertFromListxml(Models.Listxml.Video item) + { + var video = new Models.Internal.Video + { + [Models.Internal.Video.ScreenKey] = item.Screen, + [Models.Internal.Video.OrientationKey] = item.Orientation, + [Models.Internal.Video.WidthKey] = item.Width, + [Models.Internal.Video.HeightKey] = item.Height, + [Models.Internal.Video.AspectXKey] = item.AspectX, + [Models.Internal.Video.AspectYKey] = item.AspectY, + [Models.Internal.Video.RefreshKey] = item.Refresh, + }; + return video; + } + + #endregion } } \ No newline at end of file