summaryrefslogtreecommitdiff
path: root/src/SMAPI.Web/Framework/Clients/CurseForge
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-05-01 18:16:09 -0400
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-05-01 18:16:09 -0400
commitc8ad50dad1d706a1901798f9396f6becfea36c0e (patch)
tree28bd818a5db39ec5ece1bd141a28de955950463b /src/SMAPI.Web/Framework/Clients/CurseForge
parent451b70953ff4c0b1b27ae0de203ad99379b45b2a (diff)
parentf78093bdb58d477b400cde3f19b70ffd6ddf833d (diff)
downloadSMAPI-c8ad50dad1d706a1901798f9396f6becfea36c0e.tar.gz
SMAPI-c8ad50dad1d706a1901798f9396f6becfea36c0e.tar.bz2
SMAPI-c8ad50dad1d706a1901798f9396f6becfea36c0e.zip
Merge branch 'develop' into stable
Diffstat (limited to 'src/SMAPI.Web/Framework/Clients/CurseForge')
-rw-r--r--src/SMAPI.Web/Framework/Clients/CurseForge/CurseForgeClient.cs14
-rw-r--r--src/SMAPI.Web/Framework/Clients/CurseForge/ResponseModels/ModFileModel.cs20
-rw-r--r--src/SMAPI.Web/Framework/Clients/CurseForge/ResponseModels/ModModel.cs28
3 files changed, 49 insertions, 13 deletions
diff --git a/src/SMAPI.Web/Framework/Clients/CurseForge/CurseForgeClient.cs b/src/SMAPI.Web/Framework/Clients/CurseForge/CurseForgeClient.cs
index d8008721..d351b42d 100644
--- a/src/SMAPI.Web/Framework/Clients/CurseForge/CurseForgeClient.cs
+++ b/src/SMAPI.Web/Framework/Clients/CurseForge/CurseForgeClient.cs
@@ -17,7 +17,7 @@ namespace StardewModdingAPI.Web.Framework.Clients.CurseForge
private readonly IClient Client;
/// <summary>A regex pattern which matches a version number in a CurseForge mod file name.</summary>
- private readonly Regex VersionInNamePattern = new Regex(@"^(?:.+? | *)v?(\d+\.\d+(?:\.\d+)?(?:-.+?)?) *(?:\.(?:zip|rar|7z))?$", RegexOptions.Compiled);
+ private readonly Regex VersionInNamePattern = new(@"^(?:.+? | *)v?(\d+\.\d+(?:\.\d+)?(?:-.+?)?) *(?:\.(?:zip|rar|7z))?$", RegexOptions.Compiled);
/*********
@@ -40,7 +40,7 @@ namespace StardewModdingAPI.Web.Framework.Clients.CurseForge
/// <summary>Get update check info about a mod.</summary>
/// <param name="id">The mod ID.</param>
- public async Task<IModPage> GetModData(string id)
+ public async Task<IModPage?> GetModData(string id)
{
IModPage page = new GenericModPage(this.SiteKey, id);
@@ -49,9 +49,9 @@ namespace StardewModdingAPI.Web.Framework.Clients.CurseForge
return page.SetError(RemoteModStatus.DoesNotExist, $"The value '{id}' isn't a valid CurseForge mod ID, must be an integer ID.");
// get raw data
- ModModel mod = await this.Client
+ ModModel? mod = await this.Client
.GetAsync($"addon/{parsedId}")
- .As<ModModel>();
+ .As<ModModel?>();
if (mod == null)
return page.SetError(RemoteModStatus.DoesNotExist, "Found no CurseForge mod with this ID.");
@@ -71,7 +71,7 @@ namespace StardewModdingAPI.Web.Framework.Clients.CurseForge
/// <summary>Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.</summary>
public void Dispose()
{
- this.Client?.Dispose();
+ this.Client.Dispose();
}
@@ -80,9 +80,9 @@ namespace StardewModdingAPI.Web.Framework.Clients.CurseForge
*********/
/// <summary>Get a raw version string for a mod file, if available.</summary>
/// <param name="file">The file whose version to get.</param>
- private string GetRawVersion(ModFileModel file)
+ private string? GetRawVersion(ModFileModel file)
{
- Match match = this.VersionInNamePattern.Match(file.DisplayName);
+ Match match = this.VersionInNamePattern.Match(file.DisplayName ?? "");
if (!match.Success)
match = this.VersionInNamePattern.Match(file.FileName);
diff --git a/src/SMAPI.Web/Framework/Clients/CurseForge/ResponseModels/ModFileModel.cs b/src/SMAPI.Web/Framework/Clients/CurseForge/ResponseModels/ModFileModel.cs
index 9de74847..e9adcf20 100644
--- a/src/SMAPI.Web/Framework/Clients/CurseForge/ResponseModels/ModFileModel.cs
+++ b/src/SMAPI.Web/Framework/Clients/CurseForge/ResponseModels/ModFileModel.cs
@@ -3,10 +3,26 @@ namespace StardewModdingAPI.Web.Framework.Clients.CurseForge.ResponseModels
/// <summary>Metadata from the CurseForge API about a mod file.</summary>
public class ModFileModel
{
+ /*********
+ ** Accessors
+ *********/
/// <summary>The file name as downloaded.</summary>
- public string FileName { get; set; }
+ public string FileName { get; }
/// <summary>The file display name.</summary>
- public string DisplayName { get; set; }
+ public string? DisplayName { get; }
+
+
+ /*********
+ ** Public methods
+ *********/
+ /// <summary>Construct an instance.</summary>
+ /// <param name="fileName">The file name as downloaded.</param>
+ /// <param name="displayName">The file display name.</param>
+ public ModFileModel(string fileName, string? displayName)
+ {
+ this.FileName = fileName;
+ this.DisplayName = displayName;
+ }
}
}
diff --git a/src/SMAPI.Web/Framework/Clients/CurseForge/ResponseModels/ModModel.cs b/src/SMAPI.Web/Framework/Clients/CurseForge/ResponseModels/ModModel.cs
index 48cd185b..fd7796f2 100644
--- a/src/SMAPI.Web/Framework/Clients/CurseForge/ResponseModels/ModModel.cs
+++ b/src/SMAPI.Web/Framework/Clients/CurseForge/ResponseModels/ModModel.cs
@@ -3,16 +3,36 @@ namespace StardewModdingAPI.Web.Framework.Clients.CurseForge.ResponseModels
/// <summary>An mod from the CurseForge API.</summary>
public class ModModel
{
+ /*********
+ ** Accessors
+ *********/
/// <summary>The mod's unique ID on CurseForge.</summary>
- public int ID { get; set; }
+ public int ID { get; }
/// <summary>The mod name.</summary>
- public string Name { get; set; }
+ public string Name { get; }
/// <summary>The web URL for the mod page.</summary>
- public string WebsiteUrl { get; set; }
+ public string WebsiteUrl { get; }
/// <summary>The available file downloads.</summary>
- public ModFileModel[] LatestFiles { get; set; }
+ public ModFileModel[] LatestFiles { get; }
+
+
+ /*********
+ ** Public methods
+ *********/
+ /// <summary>Construct an instance.</summary>
+ /// <param name="id">The mod's unique ID on CurseForge.</param>
+ /// <param name="name">The mod name.</param>
+ /// <param name="websiteUrl">The web URL for the mod page.</param>
+ /// <param name="latestFiles">The available file downloads.</param>
+ public ModModel(int id, string name, string websiteUrl, ModFileModel[] latestFiles)
+ {
+ this.ID = id;
+ this.Name = name;
+ this.WebsiteUrl = websiteUrl;
+ this.LatestFiles = latestFiles;
+ }
}
}