summaryrefslogtreecommitdiff
path: root/src/StardewModdingAPI.Toolkit/Framework/Clients
diff options
context:
space:
mode:
Diffstat (limited to 'src/StardewModdingAPI.Toolkit/Framework/Clients')
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModEntryModel.cs33
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModEntryVersionModel.cs31
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModExtendedMetadataModel.cs123
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSeachModel.cs36
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSearchEntryModel.cs34
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/WebApiClient.cs73
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs237
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiCompatibilityInfo.cs24
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiCompatibilityStatus.cs27
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiModEntry.cs54
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiModList.cs18
11 files changed, 0 insertions, 690 deletions
diff --git a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModEntryModel.cs b/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModEntryModel.cs
deleted file mode 100644
index 8a9c0a25..00000000
--- a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModEntryModel.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
-{
- /// <summary>Metadata about a mod.</summary>
- public class ModEntryModel
- {
- /*********
- ** Accessors
- *********/
- /// <summary>The mod's unique ID (if known).</summary>
- public string ID { get; set; }
-
- /// <summary>The main version.</summary>
- public ModEntryVersionModel Main { get; set; }
-
- /// <summary>The latest optional version, if newer than <see cref="Main"/>.</summary>
- public ModEntryVersionModel Optional { get; set; }
-
- /// <summary>The latest unofficial version, if newer than <see cref="Main"/> and <see cref="Optional"/>.</summary>
- public ModEntryVersionModel Unofficial { get; set; }
-
- /// <summary>The latest unofficial version for the current Stardew Valley or SMAPI beta, if any (see <see cref="HasBetaInfo"/>).</summary>
- public ModEntryVersionModel UnofficialForBeta { get; set; }
-
- /// <summary>Optional extended data which isn't needed for update checks.</summary>
- public ModExtendedMetadataModel Metadata { get; set; }
-
- /// <summary>Whether a Stardew Valley or SMAPI beta which affects mod compatibility is in progress. If this is true, <see cref="UnofficialForBeta"/> should be used for beta versions of SMAPI instead of <see cref="Unofficial"/>.</summary>
- public bool HasBetaInfo { get; set; }
-
- /// <summary>The errors that occurred while fetching update data.</summary>
- public string[] Errors { get; set; } = new string[0];
- }
-}
diff --git a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModEntryVersionModel.cs b/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModEntryVersionModel.cs
deleted file mode 100644
index dadb8c10..00000000
--- a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModEntryVersionModel.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
-{
- /// <summary>Metadata about a version.</summary>
- public class ModEntryVersionModel
- {
- /*********
- ** Accessors
- *********/
- /// <summary>The version number.</summary>
- public ISemanticVersion Version { get; set; }
-
- /// <summary>The mod page URL.</summary>
- public string Url { get; set; }
-
-
- /*********
- ** Public methods
- *********/
- /// <summary>Construct an instance.</summary>
- public ModEntryVersionModel() { }
-
- /// <summary>Construct an instance.</summary>
- /// <param name="version">The version number.</param>
- /// <param name="url">The mod page URL.</param>
- public ModEntryVersionModel(ISemanticVersion version, string url)
- {
- this.Version = version;
- this.Url = url;
- }
- }
-}
diff --git a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModExtendedMetadataModel.cs b/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModExtendedMetadataModel.cs
deleted file mode 100644
index 989c18b0..00000000
--- a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModExtendedMetadataModel.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Converters;
-using StardewModdingAPI.Toolkit.Framework.Clients.Wiki;
-using StardewModdingAPI.Toolkit.Framework.ModData;
-
-namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
-{
- /// <summary>Extended metadata about a mod.</summary>
- public class ModExtendedMetadataModel
- {
- /*********
- ** Accessors
- *********/
- /****
- ** Mod info
- ****/
- /// <summary>The mod's unique ID. A mod may have multiple current IDs in rare cases (e.g. due to parallel releases or unofficial updates).</summary>
- public string[] ID { get; set; } = new string[0];
-
- /// <summary>The mod's display name.</summary>
- public string Name { get; set; }
-
- /// <summary>The mod ID on Nexus.</summary>
- public int? NexusID { get; set; }
-
- /// <summary>The mod ID in the Chucklefish mod repo.</summary>
- public int? ChucklefishID { get; set; }
-
- /// <summary>The mod ID in the ModDrop mod repo.</summary>
- public int? ModDropID { get; set; }
-
- /// <summary>The GitHub repository in the form 'owner/repo'.</summary>
- public string GitHubRepo { get; set; }
-
- /// <summary>The URL to a non-GitHub source repo.</summary>
- public string CustomSourceUrl { get; set; }
-
- /// <summary>The custom mod page URL (if applicable).</summary>
- public string CustomUrl { get; set; }
-
-
- /****
- ** Stable compatibility
- ****/
- /// <summary>The compatibility status.</summary>
- [JsonConverter(typeof(StringEnumConverter))]
- public WikiCompatibilityStatus? CompatibilityStatus { get; set; }
-
- /// <summary>The human-readable summary of the compatibility status or workaround, without HTML formatitng.</summary>
- public string CompatibilitySummary { get; set; }
-
- /// <summary>The game or SMAPI version which broke this mod, if applicable.</summary>
- public string BrokeIn { get; set; }
-
-
- /****
- ** Beta compatibility
- ****/
- /// <summary>The compatibility status for the Stardew Valley beta (if any).</summary>
- [JsonConverter(typeof(StringEnumConverter))]
- public WikiCompatibilityStatus? BetaCompatibilityStatus { get; set; }
-
- /// <summary>The human-readable summary of the compatibility status or workaround for the Stardew Valley beta (if any), without HTML formatitng.</summary>
- public string BetaCompatibilitySummary { get; set; }
-
- /// <summary>The beta game or SMAPI version which broke this mod, if applicable.</summary>
- public string BetaBrokeIn { get; set; }
-
-
- /*********
- ** Public methods
- *********/
- /// <summary>Construct an instance.</summary>
- public ModExtendedMetadataModel() { }
-
- /// <summary>Construct an instance.</summary>
- /// <param name="wiki">The mod metadata from the wiki (if available).</param>
- /// <param name="db">The mod metadata from SMAPI's internal DB (if available).</param>
- public ModExtendedMetadataModel(WikiModEntry wiki, ModDataRecord db)
- {
- // wiki data
- if (wiki != null)
- {
- this.ID = wiki.ID;
- this.Name = wiki.Name.FirstOrDefault();
- this.NexusID = wiki.NexusID;
- this.ChucklefishID = wiki.ChucklefishID;
- this.ModDropID = wiki.ModDropID;
- this.GitHubRepo = wiki.GitHubRepo;
- this.CustomSourceUrl = wiki.CustomSourceUrl;
- this.CustomUrl = wiki.CustomUrl;
-
- this.CompatibilityStatus = wiki.Compatibility.Status;
- this.CompatibilitySummary = wiki.Compatibility.Summary;
- this.BrokeIn = wiki.Compatibility.BrokeIn;
-
- this.BetaCompatibilityStatus = wiki.BetaCompatibility?.Status;
- this.BetaCompatibilitySummary = wiki.BetaCompatibility?.Summary;
- this.BetaBrokeIn = wiki.BetaCompatibility?.BrokeIn;
- }
-
- // internal DB data
- if (db != null)
- {
- this.ID = this.ID.Union(db.FormerIDs).ToArray();
- this.Name = this.Name ?? db.DisplayName;
- }
- }
-
- /// <summary>Get update keys based on the metadata.</summary>
- public IEnumerable<string> GetUpdateKeys()
- {
- if (this.NexusID.HasValue)
- yield return $"Nexus:{this.NexusID}";
- if (this.ChucklefishID.HasValue)
- yield return $"Chucklefish:{this.ChucklefishID}";
- if (this.GitHubRepo != null)
- yield return $"GitHub:{this.GitHubRepo}";
- }
- }
-}
diff --git a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSeachModel.cs b/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSeachModel.cs
deleted file mode 100644
index e352e1cc..00000000
--- a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSeachModel.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Linq;
-
-namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
-{
- /// <summary>Specifies mods whose update-check info to fetch.</summary>
- public class ModSearchModel
- {
- /*********
- ** Accessors
- *********/
- /// <summary>The mods for which to find data.</summary>
- public ModSearchEntryModel[] Mods { get; set; }
-
- /// <summary>Whether to include extended metadata for each mod.</summary>
- public bool IncludeExtendedMetadata { get; set; }
-
-
- /*********
- ** Public methods
- *********/
- /// <summary>Construct an empty instance.</summary>
- public ModSearchModel()
- {
- // needed for JSON deserialising
- }
-
- /// <summary>Construct an instance.</summary>
- /// <param name="mods">The mods to search.</param>
- /// <param name="includeExtendedMetadata">Whether to include extended metadata for each mod.</param>
- public ModSearchModel(ModSearchEntryModel[] mods, bool includeExtendedMetadata)
- {
- this.Mods = mods.ToArray();
- this.IncludeExtendedMetadata = includeExtendedMetadata;
- }
- }
-}
diff --git a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSearchEntryModel.cs b/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSearchEntryModel.cs
deleted file mode 100644
index bca47647..00000000
--- a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSearchEntryModel.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
-{
- /// <summary>Specifies the identifiers for a mod to match.</summary>
- public class ModSearchEntryModel
- {
- /*********
- ** Accessors
- *********/
- /// <summary>The unique mod ID.</summary>
- public string ID { get; set; }
-
- /// <summary>The namespaced mod update keys (if available).</summary>
- public string[] UpdateKeys { get; set; }
-
-
- /*********
- ** Public methods
- *********/
- /// <summary>Construct an empty instance.</summary>
- public ModSearchEntryModel()
- {
- // needed for JSON deserialising
- }
-
- /// <summary>Construct an instance.</summary>
- /// <param name="id">The unique mod ID.</param>
- /// <param name="updateKeys">The namespaced mod update keys (if available).</param>
- public ModSearchEntryModel(string id, string[] updateKeys)
- {
- this.ID = id;
- this.UpdateKeys = updateKeys ?? new string[0];
- }
- }
-}
diff --git a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/WebApiClient.cs b/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/WebApiClient.cs
deleted file mode 100644
index 7c3df384..00000000
--- a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/WebApiClient.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Net;
-using Newtonsoft.Json;
-using StardewModdingAPI.Toolkit.Serialisation;
-
-namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
-{
- /// <summary>Provides methods for interacting with the SMAPI web API.</summary>
- public class WebApiClient
- {
- /*********
- ** Fields
- *********/
- /// <summary>The base URL for the web API.</summary>
- private readonly Uri BaseUrl;
-
- /// <summary>The API version number.</summary>
- private readonly ISemanticVersion Version;
-
- /// <summary>The JSON serializer settings to use.</summary>
- private readonly JsonSerializerSettings JsonSettings = new JsonHelper().JsonSettings;
-
-
- /*********
- ** Public methods
- *********/
- /// <summary>Construct an instance.</summary>
- /// <param name="baseUrl">The base URL for the web API.</param>
- /// <param name="version">The web API version.</param>
- public WebApiClient(string baseUrl, ISemanticVersion version)
- {
- this.BaseUrl = new Uri(baseUrl);
- this.Version = version;
- }
-
- /// <summary>Get metadata about a set of mods from the web API.</summary>
- /// <param name="mods">The mod keys for which to fetch the latest version.</param>
- /// <param name="includeExtendedMetadata">Whether to include extended metadata for each mod.</param>
- public IDictionary<string, ModEntryModel> GetModInfo(ModSearchEntryModel[] mods, bool includeExtendedMetadata = false)
- {
- return this.Post<ModSearchModel, ModEntryModel[]>(
- $"v{this.Version}/mods",
- new ModSearchModel(mods, includeExtendedMetadata)
- ).ToDictionary(p => p.ID);
- }
-
-
- /*********
- ** Private methods
- *********/
- /// <summary>Fetch the response from the backend API.</summary>
- /// <typeparam name="TBody">The body content type.</typeparam>
- /// <typeparam name="TResult">The expected response type.</typeparam>
- /// <param name="url">The request URL, optionally excluding the base URL.</param>
- /// <param name="content">The body content to post.</param>
- private TResult Post<TBody, TResult>(string url, TBody content)
- {
- // note: avoid HttpClient for Mac compatibility
- using (WebClient client = new WebClient())
- {
- Uri fullUrl = new Uri(this.BaseUrl, url);
- string data = JsonConvert.SerializeObject(content);
-
- client.Headers["Content-Type"] = "application/json";
- client.Headers["User-Agent"] = $"SMAPI/{this.Version}";
- string response = client.UploadString(fullUrl, data);
- return JsonConvert.DeserializeObject<TResult>(response, this.JsonSettings);
- }
- }
- }
-}
diff --git a/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs b/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs
deleted file mode 100644
index 3e9b8ea6..00000000
--- a/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs
+++ /dev/null
@@ -1,237 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics.CodeAnalysis;
-using System.Linq;
-using System.Net;
-using System.Threading.Tasks;
-using HtmlAgilityPack;
-using Pathoschild.Http.Client;
-
-namespace StardewModdingAPI.Toolkit.Framework.Clients.Wiki
-{
- /// <summary>An HTTP client for fetching mod metadata from the wiki.</summary>
- public class WikiClient : IDisposable
- {
- /*********
- ** Fields
- *********/
- /// <summary>The underlying HTTP client.</summary>
- private readonly IClient Client;
-
-
- /*********
- ** Public methods
- *********/
- /// <summary>Construct an instance.</summary>
- /// <param name="userAgent">The user agent for the wiki API.</param>
- /// <param name="baseUrl">The base URL for the wiki API.</param>
- public WikiClient(string userAgent, string baseUrl = "https://stardewvalleywiki.com/mediawiki/api.php")
- {
- this.Client = new FluentClient(baseUrl).SetUserAgent(userAgent);
- }
-
- /// <summary>Fetch mods from the compatibility list.</summary>
- public async Task<WikiModList> FetchModsAsync()
- {
- // fetch HTML
- ResponseModel response = await this.Client
- .GetAsync("")
- .WithArguments(new
- {
- action = "parse",
- page = "Modding:Mod_compatibility",
- format = "json"
- })
- .As<ResponseModel>();
- string html = response.Parse.Text["*"];
-
- // parse HTML
- var doc = new HtmlDocument();
- doc.LoadHtml(html);
-
- // fetch game versions
- string stableVersion = doc.DocumentNode.SelectSingleNode("div[@class='game-stable-version']")?.InnerText;
- string betaVersion = doc.DocumentNode.SelectSingleNode("div[@class='game-beta-version']")?.InnerText;
- if (betaVersion == stableVersion)
- betaVersion = null;
-
- // find mod entries
- HtmlNodeCollection modNodes = doc.DocumentNode.SelectNodes("table[@id='mod-list']//tr[@class='mod']");
- if (modNodes == null)
- throw new InvalidOperationException("Can't parse wiki compatibility list, no mods found.");
-
- // parse
- WikiModEntry[] mods = this.ParseEntries(modNodes).ToArray();
- return new WikiModList
- {
- StableVersion = stableVersion,
- BetaVersion = betaVersion,
- Mods = mods
- };
- }
-
- /// <summary>Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.</summary>
- public void Dispose()
- {
- this.Client?.Dispose();
- }
-
-
- /*********
- ** Private methods
- *********/
- /// <summary>Parse valid mod compatibility entries.</summary>
- /// <param name="nodes">The HTML compatibility entries.</param>
- private IEnumerable<WikiModEntry> ParseEntries(IEnumerable<HtmlNode> nodes)
- {
- foreach (HtmlNode node in nodes)
- {
- // extract fields
- string[] names = this.GetAttributeAsCsv(node, "data-name");
- string[] authors = this.GetAttributeAsCsv(node, "data-author");
- string[] ids = this.GetAttributeAsCsv(node, "data-id");
- string[] warnings = this.GetAttributeAsCsv(node, "data-warnings");
- int? nexusID = this.GetAttributeAsNullableInt(node, "data-nexus-id");
- int? chucklefishID = this.GetAttributeAsNullableInt(node, "data-cf-id");
- int? modDropID = this.GetAttributeAsNullableInt(node, "data-moddrop-id");
- string githubRepo = this.GetAttribute(node, "data-github");
- string customSourceUrl = this.GetAttribute(node, "data-custom-source");
- string customUrl = this.GetAttribute(node, "data-url");
- string anchor = this.GetAttribute(node, "id");
- string contentPackFor = this.GetAttribute(node, "data-content-pack-for");
-
- // parse stable compatibility
- WikiCompatibilityInfo compatibility = new WikiCompatibilityInfo
- {
- 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"),
- Summary = this.GetInnerHtml(node, "mod-summary")?.Trim()
- };
-
- // parse beta compatibility
- WikiCompatibilityInfo betaCompatibility = null;
- {
- WikiCompatibilityStatus? betaStatus = this.GetAttributeAsEnum<WikiCompatibilityStatus>(node, "data-beta-status");
- if (betaStatus.HasValue)
- {
- betaCompatibility = new WikiCompatibilityInfo
- {
- Status = betaStatus.Value,
- BrokeIn = this.GetAttribute(node, "data-beta-broke-in"),
- UnofficialVersion = this.GetAttributeAsSemanticVersion(node, "data-beta-unofficial-version"),
- UnofficialUrl = this.GetAttribute(node, "data-beta-unofficial-url"),
- Summary = this.GetInnerHtml(node, "mod-beta-summary")
- };
- }
- }
-
- // yield model
- yield return new WikiModEntry
- {
- ID = ids,
- Name = names,
- Author = authors,
- NexusID = nexusID,
- ChucklefishID = chucklefishID,
- ModDropID = modDropID,
- GitHubRepo = githubRepo,
- CustomSourceUrl = customSourceUrl,
- CustomUrl = customUrl,
- ContentPackFor = contentPackFor,
- Compatibility = compatibility,
- BetaCompatibility = betaCompatibility,
- Warnings = warnings,
- Anchor = anchor
- };
- }
- }
-
- /// <summary>Get an attribute value.</summary>
- /// <param name="element">The element whose attributes to read.</param>
- /// <param name="name">The attribute name.</param>
- private string GetAttribute(HtmlNode element, string name)
- {
- string value = element.GetAttributeValue(name, null);
- if (string.IsNullOrWhiteSpace(value))
- return null;
-
- return WebUtility.HtmlDecode(value);
- }
-
- /// <summary>Get an attribute value and parse it as a comma-delimited list of strings.</summary>
- /// <param name="element">The element whose attributes to read.</param>
- /// <param name="name">The attribute name.</param>
- private string[] GetAttributeAsCsv(HtmlNode element, string name)
- {
- string raw = this.GetAttribute(element, name);
- return !string.IsNullOrWhiteSpace(raw)
- ? raw.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(p => p.Trim()).ToArray()
- : new string[0];
- }
-
- /// <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 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 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>
- /// <param name="element">The element whose attributes to read.</param>
- /// <param name="name">The attribute name.</param>
- private ISemanticVersion GetAttributeAsSemanticVersion(HtmlNode element, string name)
- {
- string raw = this.GetAttribute(element, name);
- return SemanticVersion.TryParse(raw, out ISemanticVersion version)
- ? version
- : null;
- }
-
- /// <summary>Get an attribute value and parse it as a nullable int.</summary>
- /// <param name="element">The element whose attributes to read.</param>
- /// <param name="name">The attribute name.</param>
- private int? GetAttributeAsNullableInt(HtmlNode element, string name)
- {
- string raw = this.GetAttribute(element, name);
- if (raw != null && int.TryParse(raw, out int value))
- return value;
- return null;
- }
-
- /// <summary>Get the text of an element with the given class name.</summary>
- /// <param name="container">The metadata container.</param>
- /// <param name="className">The field name.</param>
- private string GetInnerHtml(HtmlNode container, string className)
- {
- return container.Descendants().FirstOrDefault(p => p.HasClass(className))?.InnerHtml;
- }
-
- /// <summary>The response model for the MediaWiki parse API.</summary>
- [SuppressMessage("ReSharper", "ClassNeverInstantiated.Local")]
- [SuppressMessage("ReSharper", "UnusedAutoPropertyAccessor.Local")]
- private class ResponseModel
- {
- /// <summary>The parse API results.</summary>
- public ResponseParseModel Parse { get; set; }
- }
-
- /// <summary>The inner response model for the MediaWiki parse API.</summary>
- [SuppressMessage("ReSharper", "ClassNeverInstantiated.Local")]
- [SuppressMessage("ReSharper", "CollectionNeverUpdated.Local")]
- [SuppressMessage("ReSharper", "UnusedAutoPropertyAccessor.Local")]
- private class ResponseParseModel
- {
- /// <summary>The parsed text.</summary>
- public IDictionary<string, string> Text { get; set; }
- }
- }
-}
diff --git a/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiCompatibilityInfo.cs b/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiCompatibilityInfo.cs
deleted file mode 100644
index 204acd2b..00000000
--- a/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiCompatibilityInfo.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-namespace StardewModdingAPI.Toolkit.Framework.Clients.Wiki
-{
- /// <summary>Compatibility info for a mod.</summary>
- public class WikiCompatibilityInfo
- {
- /*********
- ** Accessors
- *********/
- /// <summary>The compatibility status.</summary>
- public WikiCompatibilityStatus Status { get; set; }
-
- /// <summary>The human-readable summary of the compatibility status or workaround, without HTML formatting.</summary>
- public string Summary { get; set; }
-
- /// <summary>The game or SMAPI version which broke this mod (if applicable).</summary>
- public string BrokeIn { get; set; }
-
- /// <summary>The version of the latest unofficial update, if applicable.</summary>
- public ISemanticVersion UnofficialVersion { get; set; }
-
- /// <summary>The URL to the latest unofficial update, if applicable.</summary>
- public string UnofficialUrl { get; set; }
- }
-}
diff --git a/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiCompatibilityStatus.cs b/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiCompatibilityStatus.cs
deleted file mode 100644
index a1d2dfae..00000000
--- a/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiCompatibilityStatus.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-namespace StardewModdingAPI.Toolkit.Framework.Clients.Wiki
-{
- /// <summary>The compatibility status for a mod.</summary>
- public enum WikiCompatibilityStatus
- {
- /// <summary>The mod is compatible.</summary>
- Ok = 0,
-
- /// <summary>The mod is compatible if you use an optional official download.</summary>
- Optional = 1,
-
- /// <summary>The mod is compatible if you use an unofficial update.</summary>
- Unofficial = 2,
-
- /// <summary>The mod isn't compatible, but the player can fix it or there's a good alternative.</summary>
- Workaround = 3,
-
- /// <summary>The mod isn't compatible.</summary>
- Broken = 4,
-
- /// <summary>The mod is no longer maintained by the author, and an unofficial update or continuation is unlikely.</summary>
- Abandoned = 5,
-
- /// <summary>The mod is no longer needed and should be removed.</summary>
- Obsolete = 6
- }
-}
diff --git a/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiModEntry.cs b/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiModEntry.cs
deleted file mode 100644
index cf416cc6..00000000
--- a/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiModEntry.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-namespace StardewModdingAPI.Toolkit.Framework.Clients.Wiki
-{
- /// <summary>A mod entry in the wiki list.</summary>
- public class WikiModEntry
- {
- /*********
- ** Accessors
- *********/
- /// <summary>The mod's unique ID. If the mod has alternate/old IDs, they're listed in latest to newest order.</summary>
- public string[] ID { get; set; }
-
- /// <summary>The mod's display name. If the mod has multiple names, the first one is the most canonical name.</summary>
- public string[] Name { get; set; }
-
- /// <summary>The mod's author name. If the author has multiple names, the first one is the most canonical name.</summary>
- public string[] Author { get; set; }
-
- /// <summary>The mod ID on Nexus.</summary>
- public int? NexusID { get; set; }
-
- /// <summary>The mod ID in the Chucklefish mod repo.</summary>
- public int? ChucklefishID { get; set; }
-
- /// <summary>The mod ID in the ModDrop mod repo.</summary>
- public int? ModDropID { get; set; }
-
- /// <summary>The GitHub repository in the form 'owner/repo'.</summary>
- public string GitHubRepo { get; set; }
-
- /// <summary>The URL to a non-GitHub source repo.</summary>
- public string CustomSourceUrl { get; set; }
-
- /// <summary>The custom mod page URL (if applicable).</summary>
- public string CustomUrl { get; set; }
-
- /// <summary>The name of the mod which loads this content pack, if applicable.</summary>
- public string ContentPackFor { get; set; }
-
- /// <summary>The mod's compatibility with the latest stable version of the game.</summary>
- public WikiCompatibilityInfo Compatibility { get; set; }
-
- /// <summary>The mod's compatibility with the latest beta version of the game (if any).</summary>
- public WikiCompatibilityInfo BetaCompatibility { get; set; }
-
- /// <summary>Whether a Stardew Valley or SMAPI beta which affects mod compatibility is in progress. If this is true, <see cref="BetaCompatibility"/> should be used for beta versions of SMAPI instead of <see cref="Compatibility"/>.</summary>
- public bool HasBetaInfo => this.BetaCompatibility != null;
-
- /// <summary>The human-readable warnings for players about this mod.</summary>
- public string[] Warnings { get; set; }
-
- /// <summary>The link anchor for the mod entry in the wiki compatibility list.</summary>
- public string Anchor { get; set; }
- }
-}
diff --git a/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiModList.cs b/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiModList.cs
deleted file mode 100644
index 0d614f28..00000000
--- a/src/StardewModdingAPI.Toolkit/Framework/Clients/Wiki/WikiModList.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-namespace StardewModdingAPI.Toolkit.Framework.Clients.Wiki
-{
- /// <summary>Metadata from the wiki's mod compatibility list.</summary>
- public class WikiModList
- {
- /*********
- ** Accessors
- *********/
- /// <summary>The stable game version.</summary>
- public string StableVersion { get; set; }
-
- /// <summary>The beta game version (if any).</summary>
- public string BetaVersion { get; set; }
-
- /// <summary>The mods on the wiki.</summary>
- public WikiModEntry[] Mods { get; set; }
- }
-}