mirror of
https://github.com/ckaczor/ChrisKaczor.ApplicationUpdate.git
synced 2026-01-13 17:22:16 -05:00
Add basic support for prerelease versions
This commit is contained in:
@@ -1,30 +1,84 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using System.Globalization;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace ChrisKaczor.ApplicationUpdate
|
||||
{
|
||||
public partial class GitHubRelease
|
||||
{
|
||||
[JsonProperty("tag_name")]
|
||||
public string? TagName { get; set; }
|
||||
private const string LatestSegment = "/latest";
|
||||
|
||||
[JsonProperty("assets")]
|
||||
public List<Asset>? Assets { get; set; }
|
||||
private static readonly HttpClient HttpClient = new()
|
||||
{
|
||||
DefaultRequestHeaders =
|
||||
{ UserAgent = { ProductInfoHeaderValue.Parse(UpdateCheck.ApplicationName.Replace(" ", "")) } }
|
||||
};
|
||||
|
||||
private static GitHubRelease? FromJson(string json) =>
|
||||
JsonConvert.DeserializeObject<GitHubRelease>(json, Converter.Settings);
|
||||
|
||||
private static List<GitHubRelease>? FromJsonArray(string json) =>
|
||||
JsonConvert.DeserializeObject<List<GitHubRelease>>(json, Converter.Settings);
|
||||
|
||||
[JsonProperty("tag_name")] public string? TagName { get; set; }
|
||||
|
||||
[JsonProperty("assets")] public List<Asset>? Assets { get; set; }
|
||||
|
||||
[JsonProperty("prerelease")] public bool Prerelease { get; set; }
|
||||
|
||||
public static async Task<VersionInfo?> GetLatestAsync(string baseUrl)
|
||||
{
|
||||
try
|
||||
{
|
||||
var url = baseUrl.EndsWith(LatestSegment) ? baseUrl : baseUrl + LatestSegment;
|
||||
|
||||
var json = await HttpClient.GetStringAsync(url);
|
||||
|
||||
var release = FromJson(json);
|
||||
|
||||
var versionInfo = VersionInfo.CreateFromGitHubRelease(release);
|
||||
|
||||
return versionInfo;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task<VersionInfo?> GetLatestPrereleaseAsync(string baseUrl)
|
||||
{
|
||||
try
|
||||
{
|
||||
var url = baseUrl.EndsWith(LatestSegment) ? baseUrl[..^LatestSegment.Length] : baseUrl;
|
||||
|
||||
var json = await HttpClient.GetStringAsync(url);
|
||||
|
||||
var releases = FromJsonArray(json);
|
||||
|
||||
var release = releases?.FirstOrDefault();
|
||||
|
||||
if (release == null)
|
||||
return null;
|
||||
|
||||
var versionInfo = VersionInfo.CreateFromGitHubRelease(release);
|
||||
|
||||
return versionInfo;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Asset
|
||||
{
|
||||
[JsonProperty("created_at")]
|
||||
public DateTimeOffset? CreatedAt { get; set; }
|
||||
[JsonProperty("created_at")] public DateTimeOffset? CreatedAt { get; set; }
|
||||
|
||||
[JsonProperty("browser_download_url")]
|
||||
public string? BrowserDownloadUrl { get; set; }
|
||||
}
|
||||
|
||||
public partial class GitHubRelease
|
||||
{
|
||||
public static GitHubRelease? FromJson(string json) => JsonConvert.DeserializeObject<GitHubRelease>(json, Converter.Settings);
|
||||
[JsonProperty("browser_download_url")] public string? BrowserDownloadUrl { get; set; }
|
||||
}
|
||||
|
||||
internal class Converter
|
||||
|
||||
Reference in New Issue
Block a user