Let's use objects

This commit is contained in:
Matt Nadareski
2020-08-21 15:31:19 -07:00
parent b01217cffb
commit 4d7a4373a9
11 changed files with 166 additions and 64 deletions

View File

@@ -0,0 +1,32 @@
/// <summary>
/// This holds all of the auxiliary types needed for proper parsing
/// </summary>
namespace SabreTools.Library.DatFiles
{
#region DatHeader
#region OfflineList
/// <summary>
/// Represents one OfflineList infos object
/// </summary>
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
}

View File

@@ -279,7 +279,7 @@ namespace SabreTools.Library.DatFiles
/// OfflineList info list
/// </summary>
[JsonProperty("infos")]
public List<Tuple<string, bool?, bool?, bool?>> Infos { get; set; }
public List<OfflineListInfo> Infos { get; set; }
/// <summary>
/// OfflineList can-open extensions

View File

@@ -284,7 +284,7 @@ namespace SabreTools.Library.DatFiles
break;
case "infos":
Header.Infos = new List<Tuple<string, bool?, bool?, bool?>>();
Header.Infos = new List<OfflineListInfo>();
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<string, bool?, bool?, bool?>(
// 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<KeyValuePair<string, string>>();
machine.Infos = new List<ListXmlInfo>();
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<string, string>(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<KeyValuePair<string, string>>();
machine.SharedFeatures = new List<SoftwareListSharedFeature>();
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<string, string>(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<KeyValuePair<string, string>> features = null;
List<SoftwareListFeature> features = null;
jtr.Read();
while (!sr.EndOfStream)
@@ -876,7 +876,7 @@ namespace SabreTools.Library.DatFiles
break;
case "features":
features = new List<KeyValuePair<string, string>>();
features = new List<SoftwareListFeature>();
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<string, string>(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();
}

View File

@@ -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<string, string> 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();
}

View File

@@ -208,7 +208,7 @@ namespace SabreTools.Library.DatFiles
return;
// Setup the infos object
Header.Infos = new List<Tuple<string, bool?, bool?, bool?>>();
Header.Infos = new List<OfflineListInfo>();
// 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<string, bool?, bool?, bool?>(
// 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();
}

View File

@@ -112,7 +112,7 @@ namespace SabreTools.Library.DatFiles
long size = -1;
ItemType itemType = ItemType.Rom;
ItemStatus status = ItemStatus.None;
List<KeyValuePair<string, string>> features = null;
List<SoftwareListFeature> 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<KeyValuePair<string, string>>();
machine.Infos = new List<ListXmlInfo>();
var infos = value.Split(';');
foreach (var info in infos)
{
var infoPair = info.Split('=');
machine.Infos.Add(new KeyValuePair<string, string>(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<KeyValuePair<string, string>>();
machine.SharedFeatures = new List<SoftwareListSharedFeature>();
var sharedFeatures = value.Split(';');
foreach (var sharedFeature in sharedFeatures)
{
var featurePair = sharedFeature.Split('=');
machine.SharedFeatures.Add(new KeyValuePair<string, string>(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<KeyValuePair<string, string>>();
features = new List<SoftwareListFeature>();
var splitFeatures = value.Split(';');
foreach (var splitFeature in splitFeatures)
{
var featurePair = splitFeature.Split('=');
features.Add(new KeyValuePair<string, string>(featurePair[0], featurePair[1]));
features.Add(new SoftwareListFeature(featurePair[0], featurePair[1]));
}
break;

View File

@@ -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<KeyValuePair<string, string>>(),
SharedFeatures = new List<KeyValuePair<string, string>>(),
Infos = new List<ListXmlInfo>(),
SharedFeatures = new List<SoftwareListSharedFeature>(),
MachineType = (machineType == MachineType.NULL ? MachineType.None : machineType),
};
@@ -180,12 +180,12 @@ namespace SabreTools.Library.DatFiles
break;
case "info":
machine.Infos.Add(new KeyValuePair<string, string>(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<string, string>(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<KeyValuePair<string, string>>();
var features = new List<SoftwareListFeature>();
bool containsItems = false;
while (!reader.EOF)
@@ -258,7 +258,7 @@ namespace SabreTools.Library.DatFiles
{
partname = string.Empty;
partinterface = string.Empty;
features = new List<KeyValuePair<string, string>>();
features = new List<SoftwareListFeature>();
}
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<string, string>(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<KeyValuePair<string, string>> features,
List<SoftwareListFeature> features,
string areaName,
long? areaSize,
string areaWidth,
@@ -489,7 +489,7 @@ namespace SabreTools.Library.DatFiles
Machine machine,
string partname,
string partinterface,
List<KeyValuePair<string, string>> features,
List<SoftwareListFeature> 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<string, string> 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<string, string> 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<string, string> 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();
}

View File

@@ -0,0 +1,70 @@
/// <summary>
/// This holds all of the auxiliary types needed for proper parsing
/// </summary>
namespace SabreTools.Library.DatItems
{
#region Machine
#region ListXML
/// <summary>
/// Represents one ListXML info object
/// </summary>
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
/// <summary>
/// Represents one SoftwareList shared feature object
/// </summary>
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
/// <summary>
/// Represents one SoftwareList feature object
/// </summary>
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
}

View File

@@ -87,7 +87,7 @@ namespace SabreTools.Library.DatItems
/// Features provided to/by the item
/// </summary>
[JsonProperty("features")]
public List<KeyValuePair<string, string>> Features { get; set; }
public List<SoftwareListFeature> Features { get; set; }
/// <summary>
/// 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<KeyValuePair<string, string>>()).Select(f => $"{f.Key}={f.Value}"));
fieldValue = string.Join(";", (Features ?? new List<SoftwareListFeature>()).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<KeyValuePair<string, string>>();
Features = new List<SoftwareListFeature>();
string[] pairs = mappings[Field.Features].Split(';');
foreach (string pair in pairs)
{
string[] split = pair.Split('=');
Features.Add(new KeyValuePair<string, string>(split[0], split[1]));
Features.Add(new SoftwareListFeature(split[0], split[1]));
}
}

View File

@@ -167,7 +167,7 @@ namespace SabreTools.Library.DatItems
/// </summary>
/// <remarks>Also in SoftwareList</remarks>
[JsonProperty("infos")]
public List<KeyValuePair<string, string>> Infos { get; set; } = null;
public List<ListXmlInfo> Infos { get; set; } = null;
#endregion
@@ -259,7 +259,7 @@ namespace SabreTools.Library.DatItems
/// </summary>
/// <remarks>Also in SoftwareList</remarks>
[JsonProperty("sharedfeat")]
public List<KeyValuePair<string, string>> SharedFeatures { get; set; } = null;
public List<SoftwareListSharedFeature> SharedFeatures { get; set; } = null;
#endregion
@@ -358,7 +358,7 @@ namespace SabreTools.Library.DatItems
fieldValue = string.Join(";", SlotOptions ?? new List<string>());
break;
case Field.Infos:
fieldValue = string.Join(";", (Infos ?? new List<KeyValuePair<string, string>>()).Select(i => $"{i.Key}={i.Value}"));
fieldValue = string.Join(";", (Infos ?? new List<ListXmlInfo>()).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<KeyValuePair<string, string>>()).Select(i => $"{i.Key}={i.Value}"));
fieldValue = string.Join(";", (SharedFeatures ?? new List<SoftwareListSharedFeature>()).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<KeyValuePair<string, string>>();
Infos = new List<ListXmlInfo>();
string[] pairs = mappings[Field.Infos].Split(';');
foreach (string pair in pairs)
{
string[] split = pair.Split('=');
Infos.Add(new KeyValuePair<string, string>(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<KeyValuePair<string, string>>();
SharedFeatures = new List<SoftwareListSharedFeature>();
string[] pairs = mappings[Field.SharedFeatures].Split(';');
foreach (string pair in pairs)
{
string[] split = pair.Split('=');
SharedFeatures.Add(new KeyValuePair<string, string>(split[0], split[1]));
SharedFeatures.Add(new SoftwareListSharedFeature(split[0], split[1]));
}
}

View File

@@ -133,7 +133,7 @@ namespace SabreTools.Library.Filtering
/// </summary>
public FilterItem<string> SlotOptions { get; private set; } = new FilterItem<string>();
// TODO: Machine.Infos - List<KeyValuePair<string, string>>
// TODO: Machine.Infos - List<ListXmlInfo>
/// <summary>
/// Include or exclude machine types
@@ -212,7 +212,7 @@ namespace SabreTools.Library.Filtering
/// </summary>
public FilterItem<bool?> Supported { get; private set; } = new FilterItem<bool?>() { Neutral = null };
// TODO: Machine.SharedFeatures - List<KeyValuePair<string, string>>
// TODO: Machine.SharedFeatures - List<SoftwareListSharedFeature>
#endregion
@@ -260,7 +260,7 @@ namespace SabreTools.Library.Filtering
/// </summary>
public FilterItem<string> PartInterface { get; private set; } = new FilterItem<string>();
// TODO: DatItem.Features - List<KeyValuePair<string, string>>
// TODO: DatItem.Features - List<SoftwareListFeature>
/// <summary>
/// Include or exclude area names