Wire up SoftwareList sharedfeat

This commit is contained in:
Matt Nadareski
2020-08-21 13:03:38 -07:00
parent 9eaba8915b
commit 6004bbaad9
8 changed files with 113 additions and 2 deletions

View File

@@ -629,6 +629,25 @@ namespace SabreTools.Library.DatFiles
machine.Supported = jtr.ReadAsString().AsYesNo();
break;
case "sharedfeat":
machine.SharedFeatures = new List<KeyValuePair<string, string>>();
jtr.Read(); // Start Array
while (!sr.EndOfStream)
{
jtr.Read(); // Start object (or end array)
if (jtr.TokenType == JsonToken.EndArray)
break;
jtr.Read(); // Key
string key = jtr.Value as string;
string value = jtr.ReadAsString();
jtr.Read(); // End object
machine.SharedFeatures.Add(new KeyValuePair<string, string>(key, value));
}
break;
#endregion
default:
@@ -1687,6 +1706,20 @@ namespace SabreTools.Library.DatFiles
jtw.WriteValue("no");
}
}
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SharedFeatures, Header.ExcludeFields)))
{
jtw.WritePropertyName("sharedfeat");
jtw.WriteStartArray();
foreach (var feature in datItem.Machine.SharedFeatures)
{
jtw.WriteStartObject();
jtw.WritePropertyName(feature.Key);
jtw.WriteValue(feature.Value);
jtw.WriteEndObject();
}
jtw.WriteEndArray();
}
#endregion

View File

@@ -461,6 +461,17 @@ namespace SabreTools.Library.DatFiles
machine.Supported = value.AsYesNo();
break;
case "Machine.SharedFeatures":
machine.SharedFeatures = new List<KeyValuePair<string, string>>();
var sharedFeatures = value.Split(';');
foreach (var sharedFeature in sharedFeatures)
{
var featurePair = sharedFeature.Split('=');
machine.SharedFeatures.Add(new KeyValuePair<string, string>(featurePair[0], featurePair[1]));
}
break;
#endregion
#endregion // Machine
@@ -1171,6 +1182,17 @@ namespace SabreTools.Library.DatFiles
case "supported":
return "Machine.Supported";
case "sharedfeat":
case "shared feat":
case "shared-feat":
case "sharedfeature":
case "shared feature":
case "shared-feature":
case "sharedfeatures":
case "shared features":
case "shared-features":
return "Machine.SharedFeatures";
#endregion
#endregion // Machine

View File

@@ -146,6 +146,7 @@ namespace SabreTools.Library.DatFiles
CloneOf = reader.GetAttribute("cloneof") ?? string.Empty,
Infos = new List<KeyValuePair<string, string>>(),
SharedFeatures = new List<KeyValuePair<string, string>>(),
MachineType = (machineType == MachineType.NULL ? MachineType.None : machineType),
};
@@ -184,8 +185,7 @@ namespace SabreTools.Library.DatFiles
break;
case "sharedfeat":
// string sharedfeat_name = reader.GetAttribute("name");
// string sharedfeat_value = reader.GetAttribute("value");
machine.SharedFeatures.Add(new KeyValuePair<string, string>(reader.GetAttribute("name"), reader.GetAttribute("value")));
reader.Read();
break;
@@ -742,6 +742,17 @@ 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)
{
xtw.WriteStartElement("sharedfeat");
xtw.WriteAttributeString("name", kvp.Key);
xtw.WriteAttributeString("value", kvp.Value);
xtw.WriteEndElement();
}
}
xtw.Flush();
}
catch (Exception ex)

View File

@@ -222,6 +222,7 @@ namespace SabreTools.Library.DatItems
// SoftwareList
Field.Supported,
Field.SharedFeatures,
};
#endregion

View File

@@ -90,6 +90,7 @@ namespace SabreTools.Library.DatItems
#region SoftwareList
Supported,
SharedFeatures,
#endregion

View File

@@ -165,6 +165,7 @@ namespace SabreTools.Library.DatItems
/// <summary>
/// List of info items
/// </summary>
/// <remarks>Also in SoftwareList</remarks>
[JsonProperty("infos")]
public List<KeyValuePair<string, string>> Infos { get; set; } = null;
@@ -253,6 +254,13 @@ namespace SabreTools.Library.DatItems
[JsonProperty("supported")]
public bool? Supported { get; set; } = true;
/// <summary>
/// List of shared feature items
/// </summary>
/// <remarks>Also in SoftwareList</remarks>
[JsonProperty("sharedfeat")]
public List<KeyValuePair<string, string>> SharedFeatures { get; set; } = null;
#endregion
#endregion
@@ -403,6 +411,9 @@ namespace SabreTools.Library.DatItems
case Field.Supported:
fieldValue = Supported?.ToString();
break;
case Field.SharedFeatures:
fieldValue = string.Join(";", (SharedFeatures ?? new List<KeyValuePair<string, string>>()).Select(i => $"{i.Key}={i.Value}"));
break;
#endregion
@@ -572,6 +583,19 @@ namespace SabreTools.Library.DatItems
if (mappings.Keys.Contains(Field.Supported))
Supported = mappings[Field.Supported].AsYesNo();
if (mappings.Keys.Contains(Field.SharedFeatures))
{
if (SharedFeatures == null)
SharedFeatures = new List<KeyValuePair<string, string>>();
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]));
}
}
#endregion
}
@@ -671,6 +695,7 @@ namespace SabreTools.Library.DatItems
#region SoftwareList
Supported = this.Supported,
SharedFeatures = this.SharedFeatures,
#endregion
};
@@ -1076,6 +1101,9 @@ namespace SabreTools.Library.DatItems
if (fields.Contains(Field.Supported))
Supported = null;
if (fields.Contains(Field.SharedFeatures))
SharedFeatures = null;
#endregion
}
@@ -1221,6 +1249,9 @@ namespace SabreTools.Library.DatItems
if (fields.Contains(Field.Supported))
Supported = machine.Supported;
if (fields.Contains(Field.SharedFeatures))
SharedFeatures = machine.SharedFeatures;
#endregion
}

View File

@@ -212,6 +212,8 @@ namespace SabreTools.Library.Filtering
/// </summary>
public FilterItem<bool?> Supported { get; private set; } = new FilterItem<bool?>() { Neutral = null };
// TODO: Machine.SharedFeatures - List<KeyValuePair<string, string>>
#endregion
#endregion // Machine Filters

View File

@@ -297,6 +297,16 @@ namespace SabreTools.Library.Tools
case "supported":
return Field.Supported;
case "sharedfeat":
case "shared feat":
case "shared-feat":
case "sharedfeature":
case "shared feature":
case "shared-feature":
case "sharedfeatures":
case "shared features":
case "shared-features":
return Field.SharedFeatures;
#endregion