summaryrefslogtreecommitdiff
path: root/src/StardewModdingAPI.Toolkit/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'src/StardewModdingAPI.Toolkit/Framework')
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModEntryModel.cs30
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModInfoModel.cs56
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSeachModel.cs15
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSearchEntryModel.cs34
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/WebApiClient.cs39
5 files changed, 76 insertions, 98 deletions
diff --git a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModEntryModel.cs b/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModEntryModel.cs
new file mode 100644
index 00000000..0f268231
--- /dev/null
+++ b/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModEntryModel.cs
@@ -0,0 +1,30 @@
+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 mod name.</summary>
+ public string Name { get; set; }
+
+ /// <summary>The mod's latest release number.</summary>
+ public string Version { get; set; }
+
+ /// <summary>The mod's web URL.</summary>
+ public string Url { get; set; }
+
+ /// <summary>The mod's latest optional release, if newer than <see cref="Version"/>.</summary>
+ public string PreviewVersion { get; set; }
+
+ /// <summary>The web URL to the mod's latest optional release, if newer than <see cref="Version"/>.</summary>
+ public string PreviewUrl { 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/ModInfoModel.cs b/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModInfoModel.cs
deleted file mode 100644
index c8e296f0..00000000
--- a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModInfoModel.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
-{
- /// <summary>Generic metadata about a mod.</summary>
- public class ModInfoModel
- {
- /*********
- ** Accessors
- *********/
- /// <summary>The mod name.</summary>
- public string Name { get; set; }
-
- /// <summary>The mod's latest release number.</summary>
- public string Version { get; set; }
-
- /// <summary>The mod's latest optional release, if newer than <see cref="Version"/>.</summary>
- public string PreviewVersion { get; set; }
-
- /// <summary>The mod's web URL.</summary>
- public string Url { get; set; }
-
- /// <summary>The error message indicating why the mod is invalid (if applicable).</summary>
- public string Error { get; set; }
-
-
- /*********
- ** Public methods
- *********/
- /// <summary>Construct an empty instance.</summary>
- public ModInfoModel()
- {
- // needed for JSON deserialising
- }
-
- /// <summary>Construct an instance.</summary>
- /// <param name="name">The mod name.</param>
- /// <param name="version">The semantic version for the mod's latest release.</param>
- /// <param name="previewVersion">The semantic version for the mod's latest preview release, if available and different from <see cref="Version"/>.</param>
- /// <param name="url">The mod's web URL.</param>
- /// <param name="error">The error message indicating why the mod is invalid (if applicable).</param>
- public ModInfoModel(string name, string version, string url, string previewVersion = null, string error = null)
- {
- this.Name = name;
- this.Version = version;
- this.PreviewVersion = previewVersion;
- this.Url = url;
- this.Error = error; // mainly initialised here for the JSON deserialiser
- }
-
- /// <summary>Construct an instance.</summary>
- /// <param name="error">The error message indicating why the mod is invalid.</param>
- public ModInfoModel(string error)
- {
- this.Error = error;
- }
- }
-}
diff --git a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSeachModel.cs b/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSeachModel.cs
index c0ee34ea..ffca32ca 100644
--- a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSeachModel.cs
+++ b/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSeachModel.cs
@@ -1,4 +1,4 @@
-using System.Collections.Generic;
+using System;
using System.Linq;
namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
@@ -10,10 +10,11 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
** Accessors
*********/
/// <summary>The namespaced mod keys to search.</summary>
+ [Obsolete]
public string[] ModKeys { get; set; }
- /// <summary>Whether to allow non-semantic versions, instead of returning an error for those.</summary>
- public bool AllowInvalidVersions { get; set; }
+ /// <summary>The mods for which to find data.</summary>
+ public ModSearchEntryModel[] Mods { get; set; }
/*********
@@ -26,12 +27,10 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
}
/// <summary>Construct an instance.</summary>
- /// <param name="modKeys">The namespaced mod keys to search.</param>
- /// <param name="allowInvalidVersions">Whether to allow non-semantic versions, instead of returning an error for those.</param>
- public ModSearchModel(IEnumerable<string> modKeys, bool allowInvalidVersions)
+ /// <param name="mods">The mods to search.</param>
+ public ModSearchModel(ModSearchEntryModel[] mods)
{
- this.ModKeys = modKeys.ToArray();
- this.AllowInvalidVersions = allowInvalidVersions;
+ this.Mods = mods.ToArray();
}
}
}
diff --git a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSearchEntryModel.cs b/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSearchEntryModel.cs
new file mode 100644
index 00000000..bca47647
--- /dev/null
+++ b/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/ModSearchEntryModel.cs
@@ -0,0 +1,34 @@
+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
index d94b0259..892dfeba 100644
--- a/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/WebApiClient.cs
+++ b/src/StardewModdingAPI.Toolkit/Framework/Clients/WebApi/WebApiClient.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using System.Linq;
using System.Net;
using Newtonsoft.Json;
@@ -31,44 +30,16 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
this.Version = version;
}
- /// <summary>Get the latest SMAPI version.</summary>
- /// <param name="modKeys">The mod keys for which to fetch the latest version.</param>
- public IDictionary<string, ModInfoModel> GetModInfo(params string[] modKeys)
+ /// <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>
+ public IDictionary<string, ModEntryModel> GetModInfo(params ModSearchEntryModel[] mods)
{
- return this.Post<ModSearchModel, Dictionary<string, ModInfoModel>>(
+ return this.Post<ModSearchModel, Dictionary<string, ModEntryModel>>(
$"v{this.Version}/mods",
- new ModSearchModel(modKeys, allowInvalidVersions: true)
+ new ModSearchModel(mods)
);
}
- /// <summary>Get the latest version for a mod.</summary>
- /// <param name="updateKeys">The update keys to search.</param>
- public ISemanticVersion GetLatestVersion(string[] updateKeys)
- {
- if (!updateKeys.Any())
- return null;
-
- // fetch update results
- ModInfoModel[] results = this
- .GetModInfo(updateKeys)
- .Values
- .Where(p => p.Error == null)
- .ToArray();
- if (!results.Any())
- return null;
-
- ISemanticVersion latest = null;
- foreach (ModInfoModel result in results)
- {
- if (!SemanticVersion.TryParse(result.PreviewVersion ?? result.Version, out ISemanticVersion cur))
- continue;
-
- if (latest == null || cur.IsNewerThan(latest))
- latest = cur;
- }
- return latest;
- }
-
/*********
** Private methods