diff --git a/SabreTools.Library/DatItems/BiosSet.cs b/SabreTools.Library/DatItems/BiosSet.cs index c4f56004..9ddc6635 100644 --- a/SabreTools.Library/DatItems/BiosSet.cs +++ b/SabreTools.Library/DatItems/BiosSet.cs @@ -2,6 +2,8 @@ using SabreTools.Library.Filtering; using Newtonsoft.Json; +using System.Linq; +using SabreTools.Library.Tools; namespace SabreTools.Library.DatItems { @@ -60,6 +62,23 @@ namespace SabreTools.Library.DatItems return fieldValue; } + /// + /// Set fields with given values + /// + /// Mappings dictionary + public override void SetFields(Dictionary mappings) + { + // Set base fields + base.SetFields(mappings); + + // Handle BiosSet-specific fields + if (mappings.Keys.Contains(Field.Default)) + Default = mappings[Field.Default].AsYesNo(); + + if (mappings.Keys.Contains(Field.BiosDescription)) + Description = mappings[Field.BiosDescription]; + } + #endregion #region Constructors diff --git a/SabreTools.Library/DatItems/DatItem.cs b/SabreTools.Library/DatItems/DatItem.cs index 48792f20..21ed6ff1 100644 --- a/SabreTools.Library/DatItems/DatItem.cs +++ b/SabreTools.Library/DatItems/DatItem.cs @@ -285,6 +285,65 @@ namespace SabreTools.Library.DatItems return fieldValue; } + /// + /// Set fields with given values + /// + /// Mappings dictionary + public virtual void SetFields(Dictionary mappings) + { + // Set machine fields + Machine.SetFields(mappings); + + #region Common + + if (mappings.Keys.Contains(Field.Name)) + Name = mappings[Field.Name]; + + #endregion + + #region AttractMode + + if (mappings.Keys.Contains(Field.AltName)) + AltName = mappings[Field.AltName]; + + if (mappings.Keys.Contains(Field.AltTitle)) + AltTitle = mappings[Field.AltTitle]; + + #endregion + + #region SoftwareList + + if (mappings.Keys.Contains(Field.PartName)) + PartName = mappings[Field.PartName]; + + if (mappings.Keys.Contains(Field.PartInterface)) + PartInterface = mappings[Field.PartInterface]; + + if (mappings.Keys.Contains(Field.Features)) + { + if (Features == null) + Features = new List>(); + + string[] pairs = mappings[Field.Features].Split(';'); + foreach (string pair in pairs) + { + string[] split = pair.Split('='); + Features.Add(new KeyValuePair(split[0], split[1])); + } + } + + if (mappings.Keys.Contains(Field.AreaName)) + AreaName = mappings[Field.AreaName]; + + if (mappings.Keys.Contains(Field.AreaSize)) + { + if (Int64.TryParse(mappings[Field.AreaSize], out long areaSize)) + AreaSize = areaSize; + } + + #endregion + } + #endregion #region Constructors diff --git a/SabreTools.Library/DatItems/Disk.cs b/SabreTools.Library/DatItems/Disk.cs index 69d6e897..01841dd0 100644 --- a/SabreTools.Library/DatItems/Disk.cs +++ b/SabreTools.Library/DatItems/Disk.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using SabreTools.Library.DatFiles; using SabreTools.Library.FileTypes; @@ -194,6 +195,55 @@ namespace SabreTools.Library.DatItems return fieldValue; } + /// + /// Set fields with given values + /// + /// Mappings dictionary + public override void SetFields(Dictionary mappings) + { + // Set base fields + base.SetFields(mappings); + + // Handle Disk-specific fields + if (mappings.Keys.Contains(Field.MD5)) + MD5 = mappings[Field.MD5]; + +#if NET_FRAMEWORK + if (mappings.Keys.Contains(Field.RIPEMD160)) + RIPEMD160 = mappings[Field.RIPEMD160]; +#endif + + if (mappings.Keys.Contains(Field.SHA1)) + SHA1 = mappings[Field.SHA1]; + + if (mappings.Keys.Contains(Field.SHA256)) + SHA256 = mappings[Field.SHA256]; + + if (mappings.Keys.Contains(Field.SHA384)) + SHA384 = mappings[Field.SHA384]; + + if (mappings.Keys.Contains(Field.SHA512)) + SHA512 = mappings[Field.SHA512]; + + if (mappings.Keys.Contains(Field.Merge)) + MergeTag = mappings[Field.Merge]; + + if (mappings.Keys.Contains(Field.Region)) + Region = mappings[Field.Region]; + + if (mappings.Keys.Contains(Field.Index)) + Index = mappings[Field.Index]; + + if (mappings.Keys.Contains(Field.Writable)) + Writable = mappings[Field.Writable].AsYesNo(); + + if (mappings.Keys.Contains(Field.Status)) + ItemStatus = mappings[Field.Status].AsItemStatus(); + + if (mappings.Keys.Contains(Field.Optional)) + Optional = mappings[Field.Optional].AsYesNo(); + } + #endregion #region Constructors diff --git a/SabreTools.Library/DatItems/Machine.cs b/SabreTools.Library/DatItems/Machine.cs index 1461f328..0cdf0359 100644 --- a/SabreTools.Library/DatItems/Machine.cs +++ b/SabreTools.Library/DatItems/Machine.cs @@ -4,6 +4,7 @@ using System.Linq; using SabreTools.Library.Filtering; using Newtonsoft.Json; +using SabreTools.Library.Tools; namespace SabreTools.Library.DatItems { @@ -416,6 +417,164 @@ namespace SabreTools.Library.DatItems return fieldValue; } + /// + /// Set fields with given values + /// + /// Mappings dictionary + public void SetFields(Dictionary mappings) + { + #region Common + + if (mappings.Keys.Contains(Field.MachineName)) + Name = mappings[Field.MachineName]; + + if (mappings.Keys.Contains(Field.Comment)) + Comment = mappings[Field.Comment]; + + if (mappings.Keys.Contains(Field.Description)) + Description = mappings[Field.Description]; + + if (mappings.Keys.Contains(Field.Year)) + Year = mappings[Field.Year]; + + if (mappings.Keys.Contains(Field.Manufacturer)) + Manufacturer = mappings[Field.Manufacturer]; + + if (mappings.Keys.Contains(Field.Publisher)) + Publisher = mappings[Field.Publisher]; + + if (mappings.Keys.Contains(Field.Category)) + Category = mappings[Field.Category]; + + if (mappings.Keys.Contains(Field.RomOf)) + RomOf = mappings[Field.RomOf]; + + if (mappings.Keys.Contains(Field.CloneOf)) + CloneOf = mappings[Field.CloneOf]; + + if (mappings.Keys.Contains(Field.SampleOf)) + SampleOf = mappings[Field.SampleOf]; + + if (mappings.Keys.Contains(Field.MachineType)) + MachineType = mappings[Field.MachineType].AsMachineType(); + + #endregion + + #region AttractMode + + if (mappings.Keys.Contains(Field.Players)) + Players = mappings[Field.Players]; + + if (mappings.Keys.Contains(Field.Rotation)) + Rotation = mappings[Field.Rotation]; + + if (mappings.Keys.Contains(Field.Control)) + Control = mappings[Field.Control]; + + if (mappings.Keys.Contains(Field.SupportStatus)) + Status = mappings[Field.SupportStatus]; + + if (mappings.Keys.Contains(Field.DisplayCount)) + DisplayCount = mappings[Field.DisplayCount]; + + if (mappings.Keys.Contains(Field.DisplayType)) + DisplayType = mappings[Field.DisplayType]; + + if (mappings.Keys.Contains(Field.Buttons)) + Buttons = mappings[Field.Buttons]; + + #endregion + + #region ListXML + + if (mappings.Keys.Contains(Field.SourceFile)) + SourceFile = mappings[Field.SourceFile]; + + if (mappings.Keys.Contains(Field.Runnable)) + Runnable = mappings[Field.Runnable].AsYesNo(); + + if (mappings.Keys.Contains(Field.Devices)) + { + if (Devices == null) + Devices = new List(); + + string[] devices = mappings[Field.Devices].Split(';'); + Devices.AddRange(devices); + } + + if (mappings.Keys.Contains(Field.SlotOptions)) + { + if (SlotOptions == null) + SlotOptions = new List(); + + string[] slotOptions = mappings[Field.SlotOptions].Split(';'); + SlotOptions.AddRange(slotOptions); + } + + if (mappings.Keys.Contains(Field.Infos)) + { + if (Infos == null) + Infos = new List>(); + + string[] pairs = mappings[Field.Infos].Split(';'); + foreach (string pair in pairs) + { + string[] split = pair.Split('='); + Infos.Add(new KeyValuePair(split[0], split[1])); + } + } + + #endregion + + #region Logiqx + + if (mappings.Keys.Contains(Field.Board)) + Board = mappings[Field.Board]; + + if (mappings.Keys.Contains(Field.RebuildTo)) + RebuildTo = mappings[Field.RebuildTo]; + + #endregion + + #region Logiqx EmuArc + + if (mappings.Keys.Contains(Field.TitleID)) + TitleID = mappings[Field.TitleID]; + + if (mappings.Keys.Contains(Field.Developer)) + Developer = mappings[Field.Developer]; + + if (mappings.Keys.Contains(Field.Genre)) + Genre = mappings[Field.Genre]; + + if (mappings.Keys.Contains(Field.Subgenre)) + Subgenre = mappings[Field.Subgenre]; + + if (mappings.Keys.Contains(Field.Ratings)) + Ratings = mappings[Field.Ratings]; + + if (mappings.Keys.Contains(Field.Score)) + Score = mappings[Field.Score]; + + if (mappings.Keys.Contains(Field.Enabled)) + Enabled = mappings[Field.Enabled]; + + if (mappings.Keys.Contains(Field.HasCrc)) + HasCrc = mappings[Field.HasCrc].AsYesNo(); + + if (mappings.Keys.Contains(Field.RelatedTo)) + RelatedTo = mappings[Field.RelatedTo]; + + #endregion + + #region SoftwareList + + if (mappings.Keys.Contains(Field.Supported)) + Supported = mappings[Field.Supported].AsYesNo(); + + #endregion + } + #endregion #region Constructors diff --git a/SabreTools.Library/DatItems/Release.cs b/SabreTools.Library/DatItems/Release.cs index da3e6a76..9bd703be 100644 --- a/SabreTools.Library/DatItems/Release.cs +++ b/SabreTools.Library/DatItems/Release.cs @@ -1,7 +1,9 @@ using System.Collections.Generic; +using System.Linq; using SabreTools.Library.Filtering; using Newtonsoft.Json; +using SabreTools.Library.Tools; namespace SabreTools.Library.DatItems { @@ -78,6 +80,29 @@ namespace SabreTools.Library.DatItems return fieldValue; } + /// + /// Set fields with given values + /// + /// Mappings dictionary + public override void SetFields(Dictionary mappings) + { + // Set base fields + base.SetFields(mappings); + + // Handle Release-specific fields + if (mappings.Keys.Contains(Field.Region)) + Region = mappings[Field.Region]; + + if (mappings.Keys.Contains(Field.Language)) + Language = mappings[Field.Language]; + + if (mappings.Keys.Contains(Field.Date)) + Date = mappings[Field.Date]; + + if (mappings.Keys.Contains(Field.Default)) + Default = mappings[Field.Default].AsYesNo(); + } + #endregion #region Constructors diff --git a/SabreTools.Library/DatItems/Rom.cs b/SabreTools.Library/DatItems/Rom.cs index 1f40389d..f93e5cf2 100644 --- a/SabreTools.Library/DatItems/Rom.cs +++ b/SabreTools.Library/DatItems/Rom.cs @@ -1,4 +1,6 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Linq; using SabreTools.Library.Data; using SabreTools.Library.DatFiles; @@ -236,6 +238,70 @@ namespace SabreTools.Library.DatItems return fieldValue; } + /// + /// Set fields with given values + /// + /// Mappings dictionary + public override void SetFields(Dictionary mappings) + { + // Set base fields + base.SetFields(mappings); + + // Handle Rom-specific fields + if (mappings.Keys.Contains(Field.Bios)) + Bios = mappings[Field.Bios]; + + if (mappings.Keys.Contains(Field.Size)) + { + if (Int64.TryParse(mappings[Field.Size], out long size)) + Size = size; + } + + if (mappings.Keys.Contains(Field.CRC)) + CRC = mappings[Field.CRC]; + + if (mappings.Keys.Contains(Field.MD5)) + MD5 = mappings[Field.MD5]; + +#if NET_FRAMEWORK + if (mappings.Keys.Contains(Field.RIPEMD160)) + RIPEMD160 = mappings[Field.RIPEMD160]; +#endif + + if (mappings.Keys.Contains(Field.SHA1)) + SHA1 = mappings[Field.SHA1]; + + if (mappings.Keys.Contains(Field.SHA256)) + SHA256 = mappings[Field.SHA256]; + + if (mappings.Keys.Contains(Field.SHA384)) + SHA384 = mappings[Field.SHA384]; + + if (mappings.Keys.Contains(Field.SHA512)) + SHA512 = mappings[Field.SHA512]; + + if (mappings.Keys.Contains(Field.Merge)) + MergeTag = mappings[Field.Merge]; + + if (mappings.Keys.Contains(Field.Region)) + Region = mappings[Field.Region]; + + if (mappings.Keys.Contains(Field.Offset)) + Offset = mappings[Field.Offset]; + + if (mappings.Keys.Contains(Field.Date)) + Date = mappings[Field.Date]; + + if (mappings.Keys.Contains(Field.Status)) + ItemStatus = mappings[Field.Status].AsItemStatus(); + + if (mappings.Keys.Contains(Field.Optional)) + Optional = mappings[Field.Optional].AsYesNo(); + + if (mappings.Keys.Contains(Field.Inverted)) + Inverted = mappings[Field.Optional].AsYesNo(); + } + #endregion #region Constructors