summaryrefslogtreecommitdiff
path: root/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2018-12-16 17:25:58 -0500
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2018-12-16 17:25:58 -0500
commitb214a76965d98ca785b64b490533b6bf66371a48 (patch)
tree76017f8b5762d9cb4e179d32a6b44270e6726051 /src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs
parent13ed6decf55a7fd72c34b965397011d3012cb9cc (diff)
parentfd0af5f3c149629b91bbe1651a7bda9564b860eb (diff)
downloadSMAPI-b214a76965d98ca785b64b490533b6bf66371a48.tar.gz
SMAPI-b214a76965d98ca785b64b490533b6bf66371a48.tar.bz2
SMAPI-b214a76965d98ca785b64b490533b6bf66371a48.zip
Merge branch 'develop' into stable
Diffstat (limited to 'src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs')
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs b/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs
index 91078b08..19a4292f 100644
--- a/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs
+++ b/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs
@@ -102,7 +102,7 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.Wiki
// parse stable compatibility
WikiCompatibilityInfo compatibility = new WikiCompatibilityInfo
{
- Status = this.GetAttributeAsStatus(node, "data-status") ?? WikiCompatibilityStatus.Ok,
+ Status = this.GetAttributeAsEnum<WikiCompatibilityStatus>(node, "data-status") ?? WikiCompatibilityStatus.Ok,
BrokeIn = this.GetAttribute(node, "data-broke-in"),
UnofficialVersion = this.GetAttributeAsSemanticVersion(node, "data-unofficial-version"),
UnofficialUrl = this.GetAttribute(node, "data-unofficial-url"),
@@ -112,7 +112,7 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.Wiki
// parse beta compatibility
WikiCompatibilityInfo betaCompatibility = null;
{
- WikiCompatibilityStatus? betaStatus = this.GetAttributeAsStatus(node, "data-beta-status");
+ WikiCompatibilityStatus? betaStatus = this.GetAttributeAsEnum<WikiCompatibilityStatus>(node, "data-beta-status");
if (betaStatus.HasValue)
{
betaCompatibility = new WikiCompatibilityInfo
@@ -126,6 +126,10 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.Wiki
}
}
+ // parse SMAPI 3.0 readiness status
+ WikiSmapi3Status smapi3Status = this.GetAttributeAsEnum<WikiSmapi3Status>(node, "data-smapi-3-status") ?? WikiSmapi3Status.Unknown;
+ string smapi3Url = this.GetAttribute(node, "data-smapi-3-url");
+
// yield model
yield return new WikiModEntry
{
@@ -140,6 +144,8 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.Wiki
CustomUrl = customUrl,
Compatibility = compatibility,
BetaCompatibility = betaCompatibility,
+ Smapi3Status = smapi3Status,
+ Smapi3Url = smapi3Url,
Warnings = warnings,
Anchor = anchor
};
@@ -169,17 +175,18 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.Wiki
: new string[0];
}
- /// <summary>Get an attribute value and parse it as a compatibility status.</summary>
+ /// <summary>Get an attribute value and parse it as an enum value.</summary>
+ /// <typeparam name="TEnum">The enum type.</typeparam>
/// <param name="element">The element whose attributes to read.</param>
/// <param name="name">The attribute name.</param>
- private WikiCompatibilityStatus? GetAttributeAsStatus(HtmlNode element, string name)
+ private TEnum? GetAttributeAsEnum<TEnum>(HtmlNode element, string name) where TEnum : struct
{
string raw = this.GetAttribute(element, name);
if (raw == null)
return null;
- if (!Enum.TryParse(raw, true, out WikiCompatibilityStatus status))
- throw new InvalidOperationException($"Unknown status '{raw}' when parsing compatibility list.");
- return status;
+ if (!Enum.TryParse(raw, true, out TEnum value) && Enum.IsDefined(typeof(TEnum), value))
+ throw new InvalidOperationException($"Unknown {typeof(TEnum).Name} value '{raw}' when parsing compatibility list.");
+ return value;
}
/// <summary>Get an attribute value and parse it as a semantic version.</summary>