From 4d7a4373a93febf1eaa9b92eb218750701e987ca Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Fri, 21 Aug 2020 15:31:19 -0700 Subject: [PATCH] Let's use objects --- SabreTools.Library/DatFiles/Auxiliary.cs | 32 +++++++++ SabreTools.Library/DatFiles/DatHeader.cs | 2 +- SabreTools.Library/DatFiles/Json.cs | 34 ++++----- SabreTools.Library/DatFiles/Listxml.cs | 4 +- SabreTools.Library/DatFiles/OfflineList.cs | 14 ++-- SabreTools.Library/DatFiles/SeparatedValue.cs | 14 ++-- SabreTools.Library/DatFiles/SoftwareList.cs | 30 ++++---- SabreTools.Library/DatItems/Auxiliary.cs | 70 +++++++++++++++++++ SabreTools.Library/DatItems/DatItem.cs | 8 +-- SabreTools.Library/DatItems/Machine.cs | 16 ++--- SabreTools.Library/Filtering/Filter.cs | 6 +- 11 files changed, 166 insertions(+), 64 deletions(-) create mode 100644 SabreTools.Library/DatFiles/Auxiliary.cs create mode 100644 SabreTools.Library/DatItems/Auxiliary.cs diff --git a/SabreTools.Library/DatFiles/Auxiliary.cs b/SabreTools.Library/DatFiles/Auxiliary.cs new file mode 100644 index 00000000..c9a0cca2 --- /dev/null +++ b/SabreTools.Library/DatFiles/Auxiliary.cs @@ -0,0 +1,32 @@ +/// +/// This holds all of the auxiliary types needed for proper parsing +/// +namespace SabreTools.Library.DatFiles +{ + #region DatHeader + + #region OfflineList + + /// + /// Represents one OfflineList infos object + /// + public class OfflineListInfo + { + public string Name { get; set; } + public bool? Visible { get; set; } + public bool? IsNamingOption { get; set; } + public bool? Default { get; set; } + + public OfflineListInfo(string name, bool? visible, bool? isNamingOption, bool? def) + { + Name = name; + Visible = visible; + IsNamingOption = isNamingOption; + Default = def; + } + } + + #endregion + + #endregion // DatHeader +} diff --git a/SabreTools.Library/DatFiles/DatHeader.cs b/SabreTools.Library/DatFiles/DatHeader.cs index 8ed1c5b1..04c34881 100644 --- a/SabreTools.Library/DatFiles/DatHeader.cs +++ b/SabreTools.Library/DatFiles/DatHeader.cs @@ -279,7 +279,7 @@ namespace SabreTools.Library.DatFiles /// OfflineList info list /// [JsonProperty("infos")] - public List> Infos { get; set; } + public List Infos { get; set; } /// /// OfflineList can-open extensions diff --git a/SabreTools.Library/DatFiles/Json.cs b/SabreTools.Library/DatFiles/Json.cs index c3305b57..f06091c7 100644 --- a/SabreTools.Library/DatFiles/Json.cs +++ b/SabreTools.Library/DatFiles/Json.cs @@ -284,7 +284,7 @@ namespace SabreTools.Library.DatFiles break; case "infos": - Header.Infos = new List>(); + Header.Infos = new List(); jtr.Read(); // Start Array while (!sr.EndOfStream) { @@ -331,8 +331,8 @@ namespace SabreTools.Library.DatFiles jtr.Read(); // End object } - // Add the new info tuple - Header.Infos.Add(new Tuple( + // Add the new info object + Header.Infos.Add(new OfflineListInfo( nameValue, visibleValue, inNamingOptionValue, @@ -560,7 +560,7 @@ namespace SabreTools.Library.DatFiles break; case "infos": - machine.Infos = new List>(); + machine.Infos = new List(); jtr.Read(); // Start Array while (!sr.EndOfStream) { @@ -573,7 +573,7 @@ namespace SabreTools.Library.DatFiles string value = jtr.ReadAsString(); jtr.Read(); // End object - machine.Infos.Add(new KeyValuePair(key, value)); + machine.Infos.Add(new ListXmlInfo(key, value)); } break; @@ -630,7 +630,7 @@ namespace SabreTools.Library.DatFiles break; case "sharedfeat": - machine.SharedFeatures = new List>(); + machine.SharedFeatures = new List(); jtr.Read(); // Start Array while (!sr.EndOfStream) { @@ -643,7 +643,7 @@ namespace SabreTools.Library.DatFiles string value = jtr.ReadAsString(); jtr.Read(); // End object - machine.SharedFeatures.Add(new KeyValuePair(key, value)); + machine.SharedFeatures.Add(new SoftwareListSharedFeature(key, value)); } break; @@ -757,7 +757,7 @@ namespace SabreTools.Library.DatFiles bios = null; ItemStatus? itemStatus = null; ItemType? itemType = null; - List> features = null; + List features = null; jtr.Read(); while (!sr.EndOfStream) @@ -876,7 +876,7 @@ namespace SabreTools.Library.DatFiles break; case "features": - features = new List>(); + features = new List(); jtr.Read(); // Start Array while (!sr.EndOfStream) { @@ -889,7 +889,7 @@ namespace SabreTools.Library.DatFiles string featureValue = jtr.ReadAsString(); jtr.Read(); // End object - features.Add(new KeyValuePair(key, featureValue)); + features.Add(new SoftwareListFeature(key, featureValue)); } break; @@ -1396,13 +1396,13 @@ namespace SabreTools.Library.DatFiles { jtw.WriteStartObject(); jtw.WritePropertyName("name"); - jtw.WriteValue(info.Item1); + jtw.WriteValue(info.Name); jtw.WritePropertyName("visible"); - jtw.WriteValue(info.Item2.ToString()); + jtw.WriteValue(info.Visible.ToString()); jtw.WritePropertyName("inNamingOption"); - jtw.WriteValue(info.Item3.ToString()); + jtw.WriteValue(info.IsNamingOption.ToString()); jtw.WritePropertyName("default"); - jtw.WriteValue(info.Item4.ToString()); + jtw.WriteValue(info.Default.ToString()); jtw.WriteEndObject(); } @@ -1632,7 +1632,7 @@ namespace SabreTools.Library.DatFiles foreach (var info in datItem.Machine.Infos) { jtw.WriteStartObject(); - jtw.WritePropertyName(info.Key); + jtw.WritePropertyName(info.Name); jtw.WriteValue(info.Value); jtw.WriteEndObject(); } @@ -1737,7 +1737,7 @@ namespace SabreTools.Library.DatFiles foreach (var feature in datItem.Machine.SharedFeatures) { jtw.WriteStartObject(); - jtw.WritePropertyName(feature.Key); + jtw.WritePropertyName(feature.Name); jtw.WriteValue(feature.Value); jtw.WriteEndObject(); } @@ -2057,7 +2057,7 @@ namespace SabreTools.Library.DatFiles foreach (var feature in datItem.Features) { jtw.WriteStartObject(); - jtw.WritePropertyName(feature.Key); + jtw.WritePropertyName(feature.Name); jtw.WriteValue(feature.Value); jtw.WriteEndObject(); } diff --git a/SabreTools.Library/DatFiles/Listxml.cs b/SabreTools.Library/DatFiles/Listxml.cs index 0ec6c255..c9c02bee 100644 --- a/SabreTools.Library/DatFiles/Listxml.cs +++ b/SabreTools.Library/DatFiles/Listxml.cs @@ -750,10 +750,10 @@ namespace SabreTools.Library.DatFiles if (!Header.ExcludeFields.Contains(Field.Infos) && datItem.Machine.Infos != null && datItem.Machine.Infos.Count > 0) { - foreach (KeyValuePair kvp in datItem.Machine.Infos) + foreach (ListXmlInfo kvp in datItem.Machine.Infos) { xtw.WriteStartElement("info"); - xtw.WriteAttributeString("name", kvp.Key); + xtw.WriteAttributeString("name", kvp.Name); xtw.WriteAttributeString("value", kvp.Value); xtw.WriteEndElement(); } diff --git a/SabreTools.Library/DatFiles/OfflineList.cs b/SabreTools.Library/DatFiles/OfflineList.cs index 0a45e939..1e6f9a55 100644 --- a/SabreTools.Library/DatFiles/OfflineList.cs +++ b/SabreTools.Library/DatFiles/OfflineList.cs @@ -208,7 +208,7 @@ namespace SabreTools.Library.DatFiles return; // Setup the infos object - Header.Infos = new List>(); + Header.Infos = new List(); // Otherwise, add what is possible reader.MoveToContent(); @@ -223,8 +223,8 @@ namespace SabreTools.Library.DatFiles continue; } - // Add all tuples to the info list - Header.Infos.Add(new Tuple( + // Add all infos to the info list + Header.Infos.Add(new OfflineListInfo( reader.Name.ToLowerInvariant(), reader.GetAttribute("visible").AsYesNo(), reader.GetAttribute("inNamingOption").AsYesNo(), @@ -771,10 +771,10 @@ namespace SabreTools.Library.DatFiles foreach (var info in Header.Infos) { - xtw.WriteStartElement(info.Item1); - xtw.WriteAttributeString("visible", info.Item2.ToString()); - xtw.WriteAttributeString("inNamingOption", info.Item3.ToString()); - xtw.WriteAttributeString("default", info.Item4.ToString()); + xtw.WriteStartElement(info.Name); + xtw.WriteAttributeString("visible", info.Visible.ToString()); + xtw.WriteAttributeString("inNamingOption", info.IsNamingOption.ToString()); + xtw.WriteAttributeString("default", info.Default.ToString()); xtw.WriteEndElement(); } diff --git a/SabreTools.Library/DatFiles/SeparatedValue.cs b/SabreTools.Library/DatFiles/SeparatedValue.cs index 85f7d6a2..f6da6897 100644 --- a/SabreTools.Library/DatFiles/SeparatedValue.cs +++ b/SabreTools.Library/DatFiles/SeparatedValue.cs @@ -112,7 +112,7 @@ namespace SabreTools.Library.DatFiles long size = -1; ItemType itemType = ItemType.Rom; ItemStatus status = ItemStatus.None; - List> features = null; + List features = null; // Now we loop through and get values for everything for (int i = 0; i < svr.HeaderValues.Count; i++) @@ -395,12 +395,12 @@ namespace SabreTools.Library.DatFiles break; case "Machine.Infos": - machine.Infos = new List>(); + machine.Infos = new List(); var infos = value.Split(';'); foreach (var info in infos) { var infoPair = info.Split('='); - machine.Infos.Add(new KeyValuePair(infoPair[0], infoPair[1])); + machine.Infos.Add(new ListXmlInfo(infoPair[0], infoPair[1])); } break; @@ -466,12 +466,12 @@ namespace SabreTools.Library.DatFiles break; case "Machine.SharedFeatures": - machine.SharedFeatures = new List>(); + machine.SharedFeatures = new List(); var sharedFeatures = value.Split(';'); foreach (var sharedFeature in sharedFeatures) { var featurePair = sharedFeature.Split('='); - machine.SharedFeatures.Add(new KeyValuePair(featurePair[0], featurePair[1])); + machine.SharedFeatures.Add(new SoftwareListSharedFeature(featurePair[0], featurePair[1])); } break; @@ -517,12 +517,12 @@ namespace SabreTools.Library.DatFiles break; case "DatItem.Features": - features = new List>(); + features = new List(); var splitFeatures = value.Split(';'); foreach (var splitFeature in splitFeatures) { var featurePair = splitFeature.Split('='); - features.Add(new KeyValuePair(featurePair[0], featurePair[1])); + features.Add(new SoftwareListFeature(featurePair[0], featurePair[1])); } break; diff --git a/SabreTools.Library/DatFiles/SoftwareList.cs b/SabreTools.Library/DatFiles/SoftwareList.cs index a48ca380..0a69788d 100644 --- a/SabreTools.Library/DatFiles/SoftwareList.cs +++ b/SabreTools.Library/DatFiles/SoftwareList.cs @@ -145,8 +145,8 @@ namespace SabreTools.Library.DatFiles Supported = reader.GetAttribute("supported").AsYesNo(), // (yes|partial|no) "yes" CloneOf = reader.GetAttribute("cloneof") ?? string.Empty, - Infos = new List>(), - SharedFeatures = new List>(), + Infos = new List(), + SharedFeatures = new List(), MachineType = (machineType == MachineType.NULL ? MachineType.None : machineType), }; @@ -180,12 +180,12 @@ namespace SabreTools.Library.DatFiles break; case "info": - machine.Infos.Add(new KeyValuePair(reader.GetAttribute("name"), reader.GetAttribute("value"))); + machine.Infos.Add(new ListXmlInfo(reader.GetAttribute("name"), reader.GetAttribute("value"))); reader.Read(); break; case "sharedfeat": - machine.SharedFeatures.Add(new KeyValuePair(reader.GetAttribute("name"), reader.GetAttribute("value"))); + machine.SharedFeatures.Add(new SoftwareListSharedFeature(reader.GetAttribute("name"), reader.GetAttribute("value"))); reader.Read(); break; @@ -246,7 +246,7 @@ namespace SabreTools.Library.DatFiles areaWidth, areaEndinaness; long? areasize = null; - var features = new List>(); + var features = new List(); bool containsItems = false; while (!reader.EOF) @@ -258,7 +258,7 @@ namespace SabreTools.Library.DatFiles { partname = string.Empty; partinterface = string.Empty; - features = new List>(); + features = new List(); } if (reader.NodeType == XmlNodeType.EndElement && (reader.Name == "dataarea" || reader.Name == "diskarea")) @@ -278,7 +278,7 @@ namespace SabreTools.Library.DatFiles break; case "feature": - features.Add(new KeyValuePair(reader.GetAttribute("name"), reader.GetAttribute("value"))); + features.Add(new SoftwareListFeature(reader.GetAttribute("name"), reader.GetAttribute("value"))); reader.Read(); break; @@ -373,7 +373,7 @@ namespace SabreTools.Library.DatFiles Machine machine, string partName, string partInterface, - List> features, + List features, string areaName, long? areaSize, string areaWidth, @@ -489,7 +489,7 @@ namespace SabreTools.Library.DatFiles Machine machine, string partname, string partinterface, - List> features, + List features, string areaname, long? areasize, @@ -765,10 +765,10 @@ namespace SabreTools.Library.DatFiles if (!Header.ExcludeFields.Contains(Field.Infos) && datItem.Machine.Infos != null && datItem.Machine.Infos.Count > 0) { - foreach (KeyValuePair kvp in datItem.Machine.Infos) + foreach (ListXmlInfo kvp in datItem.Machine.Infos) { xtw.WriteStartElement("info"); - xtw.WriteAttributeString("name", kvp.Key); + xtw.WriteAttributeString("name", kvp.Name); xtw.WriteAttributeString("value", kvp.Value); xtw.WriteEndElement(); } @@ -776,10 +776,10 @@ namespace SabreTools.Library.DatFiles if (!Header.ExcludeFields.Contains(Field.SharedFeatures) && datItem.Machine.SharedFeatures != null && datItem.Machine.SharedFeatures.Count > 0) { - foreach (KeyValuePair kvp in datItem.Machine.SharedFeatures) + foreach (SoftwareListSharedFeature kvp in datItem.Machine.SharedFeatures) { xtw.WriteStartElement("sharedfeat"); - xtw.WriteAttributeString("name", kvp.Key); + xtw.WriteAttributeString("name", kvp.Name); xtw.WriteAttributeString("value", kvp.Value); xtw.WriteEndElement(); } @@ -844,10 +844,10 @@ namespace SabreTools.Library.DatFiles if (!Header.ExcludeFields.Contains(Field.Features) && datItem.Features != null && datItem.Features.Count > 0) { - foreach (KeyValuePair kvp in datItem.Features) + foreach (SoftwareListFeature kvp in datItem.Features) { xtw.WriteStartElement("feature"); - xtw.WriteAttributeString("name", kvp.Key); + xtw.WriteAttributeString("name", kvp.Name); xtw.WriteAttributeString("value", kvp.Value); xtw.WriteEndElement(); } diff --git a/SabreTools.Library/DatItems/Auxiliary.cs b/SabreTools.Library/DatItems/Auxiliary.cs new file mode 100644 index 00000000..83bb8cc5 --- /dev/null +++ b/SabreTools.Library/DatItems/Auxiliary.cs @@ -0,0 +1,70 @@ +/// +/// This holds all of the auxiliary types needed for proper parsing +/// +namespace SabreTools.Library.DatItems +{ + #region Machine + + #region ListXML + + /// + /// Represents one ListXML info object + /// + public class ListXmlInfo + { + public string Name { get; set; } + public string Value { get; set; } + + public ListXmlInfo(string name, string value) + { + Name = name; + Value = value; + } + } + + #endregion + + #region SoftwareList + + /// + /// Represents one SoftwareList shared feature object + /// + public class SoftwareListSharedFeature + { + public string Name { get; set; } + public string Value { get; set; } + + public SoftwareListSharedFeature(string name, string value) + { + Name = name; + Value = value; + } + } + + #endregion + + #endregion // Machine + + #region DatItem + + #region SoftwareList + + /// + /// Represents one SoftwareList feature object + /// + public class SoftwareListFeature + { + public string Name { get; set; } + public string Value { get; set; } + + public SoftwareListFeature(string name, string value) + { + Name = name; + Value = value; + } + } + + #endregion + + #endregion //DatItem +} diff --git a/SabreTools.Library/DatItems/DatItem.cs b/SabreTools.Library/DatItems/DatItem.cs index 5e20767a..e6f4e285 100644 --- a/SabreTools.Library/DatItems/DatItem.cs +++ b/SabreTools.Library/DatItems/DatItem.cs @@ -87,7 +87,7 @@ namespace SabreTools.Library.DatItems /// Features provided to/by the item /// [JsonProperty("features")] - public List> Features { get; set; } + public List Features { get; set; } /// /// Original hardware part name within an item @@ -296,7 +296,7 @@ namespace SabreTools.Library.DatItems fieldValue = PartInterface; break; case Field.Features: - fieldValue = string.Join(";", (Features ?? new List>()).Select(f => $"{f.Key}={f.Value}")); + fieldValue = string.Join(";", (Features ?? new List()).Select(f => $"{f.Name}={f.Value}")); break; case Field.AreaName: fieldValue = AreaName; @@ -366,13 +366,13 @@ namespace SabreTools.Library.DatItems if (mappings.Keys.Contains(Field.Features)) { if (Features == null) - Features = new List>(); + 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])); + Features.Add(new SoftwareListFeature(split[0], split[1])); } } diff --git a/SabreTools.Library/DatItems/Machine.cs b/SabreTools.Library/DatItems/Machine.cs index a704e8fd..cf7fc187 100644 --- a/SabreTools.Library/DatItems/Machine.cs +++ b/SabreTools.Library/DatItems/Machine.cs @@ -167,7 +167,7 @@ namespace SabreTools.Library.DatItems /// /// Also in SoftwareList [JsonProperty("infos")] - public List> Infos { get; set; } = null; + public List Infos { get; set; } = null; #endregion @@ -259,7 +259,7 @@ namespace SabreTools.Library.DatItems /// /// Also in SoftwareList [JsonProperty("sharedfeat")] - public List> SharedFeatures { get; set; } = null; + public List SharedFeatures { get; set; } = null; #endregion @@ -358,7 +358,7 @@ namespace SabreTools.Library.DatItems fieldValue = string.Join(";", SlotOptions ?? new List()); break; case Field.Infos: - fieldValue = string.Join(";", (Infos ?? new List>()).Select(i => $"{i.Key}={i.Value}")); + fieldValue = string.Join(";", (Infos ?? new List()).Select(i => $"{i.Name}={i.Value}")); break; #endregion @@ -412,7 +412,7 @@ namespace SabreTools.Library.DatItems fieldValue = Supported?.ToString(); break; case Field.SharedFeatures: - fieldValue = string.Join(";", (SharedFeatures ?? new List>()).Select(i => $"{i.Key}={i.Value}")); + fieldValue = string.Join(";", (SharedFeatures ?? new List()).Select(i => $"{i.Name}={i.Value}")); break; #endregion @@ -525,13 +525,13 @@ namespace SabreTools.Library.DatItems if (mappings.Keys.Contains(Field.Infos)) { if (Infos == null) - Infos = new List>(); + 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])); + Infos.Add(new ListXmlInfo(split[0], split[1])); } } @@ -586,13 +586,13 @@ namespace SabreTools.Library.DatItems if (mappings.Keys.Contains(Field.SharedFeatures)) { if (SharedFeatures == null) - SharedFeatures = new List>(); + SharedFeatures = new List(); string[] pairs = mappings[Field.SharedFeatures].Split(';'); foreach (string pair in pairs) { string[] split = pair.Split('='); - SharedFeatures.Add(new KeyValuePair(split[0], split[1])); + SharedFeatures.Add(new SoftwareListSharedFeature(split[0], split[1])); } } diff --git a/SabreTools.Library/Filtering/Filter.cs b/SabreTools.Library/Filtering/Filter.cs index a60f4588..6a9511b7 100644 --- a/SabreTools.Library/Filtering/Filter.cs +++ b/SabreTools.Library/Filtering/Filter.cs @@ -133,7 +133,7 @@ namespace SabreTools.Library.Filtering /// public FilterItem SlotOptions { get; private set; } = new FilterItem(); - // TODO: Machine.Infos - List> + // TODO: Machine.Infos - List /// /// Include or exclude machine types @@ -212,7 +212,7 @@ namespace SabreTools.Library.Filtering /// public FilterItem Supported { get; private set; } = new FilterItem() { Neutral = null }; - // TODO: Machine.SharedFeatures - List> + // TODO: Machine.SharedFeatures - List #endregion @@ -260,7 +260,7 @@ namespace SabreTools.Library.Filtering /// public FilterItem PartInterface { get; private set; } = new FilterItem(); - // TODO: DatItem.Features - List> + // TODO: DatItem.Features - List /// /// Include or exclude area names