From 59c900a9ac936491386e70d9c841e572f2a49ecd Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Thu, 3 Nov 2016 00:43:41 -0400 Subject: add update check (#154) --- src/StardewModdingAPI/Framework/GitRelease.cs | 19 +++++++++++++ src/StardewModdingAPI/Framework/UpdateHelper.cs | 36 +++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/StardewModdingAPI/Framework/GitRelease.cs create mode 100644 src/StardewModdingAPI/Framework/UpdateHelper.cs (limited to 'src/StardewModdingAPI/Framework') diff --git a/src/StardewModdingAPI/Framework/GitRelease.cs b/src/StardewModdingAPI/Framework/GitRelease.cs new file mode 100644 index 00000000..0da57efd --- /dev/null +++ b/src/StardewModdingAPI/Framework/GitRelease.cs @@ -0,0 +1,19 @@ +using Newtonsoft.Json; + +namespace StardewModdingAPI.Framework +{ + /// Metadata about a GitHub release tag. + internal class GitRelease + { + /********* + ** Accessors + *********/ + /// The display name. + [JsonProperty("name")] + public string Name { get; set; } + + /// The semantic version string. + [JsonProperty("tag_name")] + public string Tag { get; set; } + } +} \ No newline at end of file diff --git a/src/StardewModdingAPI/Framework/UpdateHelper.cs b/src/StardewModdingAPI/Framework/UpdateHelper.cs new file mode 100644 index 00000000..ddd1d840 --- /dev/null +++ b/src/StardewModdingAPI/Framework/UpdateHelper.cs @@ -0,0 +1,36 @@ +using System.IO; +using System.Net; +using System.Reflection; +using System.Threading.Tasks; +using Newtonsoft.Json; + +namespace StardewModdingAPI.Framework +{ + /// Provides utility methods for mod updates. + internal class UpdateHelper + { + /********* + ** Public methods + *********/ + /// Get the latest release from a GitHub repository. + /// The name of the repository from which to fetch releases (like "cjsu/SMAPI"). + public static async Task GetLatestVersionAsync(string repository) + { + // build request + // (avoid HttpClient for Mac compatibility) + HttpWebRequest request = WebRequest.CreateHttp($"https://api.github.com/repos/{repository}/releases/latest"); + AssemblyName assembly = typeof(UpdateHelper).Assembly.GetName(); + request.UserAgent = $"{assembly.Name}/{assembly.Version}"; + request.Accept = "application/vnd.github.v3+json"; + + // fetch data + using (WebResponse response = await request.GetResponseAsync()) + using (Stream responseStream = response.GetResponseStream()) + using (StreamReader reader = new StreamReader(responseStream)) + { + string responseText = reader.ReadToEnd(); + return JsonConvert.DeserializeObject(responseText); + } + } + } +} -- cgit