blob: e01e55c8a0b10ac257b3af352cd7d5d0e00bf9f4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
using System.IO;
using System.Net;
using System.Reflection;
using System.Threading.Tasks;
using Newtonsoft.Json;
using StardewModdingAPI.Framework.Models;
namespace StardewModdingAPI.Framework
{
/// <summary>Provides utility methods for mod updates.</summary>
internal class UpdateHelper
{
/*********
** Public methods
*********/
/// <summary>Get the latest release from a GitHub repository.</summary>
/// <param name="repository">The name of the repository from which to fetch releases (like "cjsu/SMAPI").</param>
public static async Task<GitRelease> 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<GitRelease>(responseText);
}
}
}
}
|