summaryrefslogtreecommitdiff
path: root/src/SMAPI.Web/Framework/Clients/GitHub/GitHubClient.cs
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2020-06-20 12:43:08 -0400
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2020-06-20 12:43:08 -0400
commite64ecc89f94641d4054162eff4943f660f43030f (patch)
treec43ca79f9947b3e16f946e1dc5fd1d02f70ce571 /src/SMAPI.Web/Framework/Clients/GitHub/GitHubClient.cs
parentdf6e745c6b842290338317ed1d3e969ee222998c (diff)
parentcb9ff7019995eff92104703f097856d2523e02ce (diff)
downloadSMAPI-e64ecc89f94641d4054162eff4943f660f43030f.tar.gz
SMAPI-e64ecc89f94641d4054162eff4943f660f43030f.tar.bz2
SMAPI-e64ecc89f94641d4054162eff4943f660f43030f.zip
Merge branch 'develop' into stable
Diffstat (limited to 'src/SMAPI.Web/Framework/Clients/GitHub/GitHubClient.cs')
-rw-r--r--src/SMAPI.Web/Framework/Clients/GitHub/GitHubClient.cs56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/SMAPI.Web/Framework/Clients/GitHub/GitHubClient.cs b/src/SMAPI.Web/Framework/Clients/GitHub/GitHubClient.cs
index 84c20957..2f1eb854 100644
--- a/src/SMAPI.Web/Framework/Clients/GitHub/GitHubClient.cs
+++ b/src/SMAPI.Web/Framework/Clients/GitHub/GitHubClient.cs
@@ -3,6 +3,7 @@ using System.Linq;
using System.Net;
using System.Threading.Tasks;
using Pathoschild.Http.Client;
+using StardewModdingAPI.Toolkit.Framework.UpdateData;
namespace StardewModdingAPI.Web.Framework.Clients.GitHub
{
@@ -17,6 +18,13 @@ namespace StardewModdingAPI.Web.Framework.Clients.GitHub
/*********
+ ** Accessors
+ *********/
+ /// <summary>The unique key for the mod site.</summary>
+ public ModSiteKey SiteKey => ModSiteKey.GitHub;
+
+
+ /*********
** Public methods
*********/
/// <summary>Construct an instance.</summary>
@@ -79,6 +87,54 @@ namespace StardewModdingAPI.Web.Framework.Clients.GitHub
}
}
+ /// <summary>Get update check info about a mod.</summary>
+ /// <param name="id">The mod ID.</param>
+ public async Task<IModPage> GetModData(string id)
+ {
+ IModPage page = new GenericModPage(this.SiteKey, id);
+
+ if (!id.Contains("/") || id.IndexOf("/", StringComparison.OrdinalIgnoreCase) != id.LastIndexOf("/", StringComparison.OrdinalIgnoreCase))
+ return page.SetError(RemoteModStatus.DoesNotExist, $"The value '{id}' isn't a valid GitHub mod ID, must be a username and project name like 'Pathoschild/SMAPI'.");
+
+ // fetch repo info
+ GitRepo repository = await this.GetRepositoryAsync(id);
+ if (repository == null)
+ return page.SetError(RemoteModStatus.DoesNotExist, "Found no GitHub repository for this ID.");
+ string name = repository.FullName;
+ string url = $"{repository.WebUrl}/releases";
+
+ // get releases
+ GitRelease latest;
+ GitRelease preview;
+ {
+ // get latest release (whether preview or stable)
+ latest = await this.GetLatestReleaseAsync(id, includePrerelease: true);
+ if (latest == null)
+ return page.SetError(RemoteModStatus.DoesNotExist, "Found no GitHub release for this ID.");
+
+ // get stable version if different
+ preview = null;
+ if (latest.IsPrerelease)
+ {
+ GitRelease release = await this.GetLatestReleaseAsync(id, includePrerelease: false);
+ if (release != null)
+ {
+ preview = latest;
+ latest = release;
+ }
+ }
+ }
+
+ // get downloads
+ IModDownload[] downloads = new[] { latest, preview }
+ .Where(release => release != null)
+ .Select(release => (IModDownload)new GenericModDownload(release.Name, release.Body, release.Tag))
+ .ToArray();
+
+ // return info
+ return page.SetInfo(name: name, url: url, version: null, downloads: downloads);
+ }
+
/// <summary>Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.</summary>
public void Dispose()
{