using System; using System.Collections.Generic; using System.IO; using System.Net; using Newtonsoft.Json; namespace NScript.Gitea { public class ReleaseUtility { public static List GetReleases(string owner, string repo, string apiUrl = "https://git.exmods.org/api/v1") { string fullUrl = $"{apiUrl}/repos/{owner}/{repo}/releases"; WebRequest req = WebRequest.Create(fullUrl); req.Method = "GET"; HttpWebResponse resp = (HttpWebResponse) req.GetResponse(); StreamReader body = new StreamReader(resp.GetResponseStream()); string respBody = body.ReadToEnd(); resp.Close(); return JsonConvert.DeserializeObject>(respBody); } public static byte[] DownloadAsset(Asset asset) { return DownloadAsset(asset.BrowserDownloadUrl); } public static byte[] DownloadAsset(string url) { WebRequest req = WebRequest.Create(url); req.Method = "GET"; HttpWebResponse resp = (HttpWebResponse) req.GetResponse(); BinaryReader body = new BinaryReader(resp.GetResponseStream()); byte[] respBody = body.ReadBytes(int.MaxValue); resp.Close(); return respBody; } public static Release? FindRelease(List releases, bool prerelease = false, bool draft = false) { foreach (Release release in releases) { if (release.PreRelease == prerelease && release.Draft == draft) return release; } return null; } public static Asset? FindAsset(Release release, string name) { return FindAsset(release.Assets, name); } public static Asset? FindAsset(List assets, string name) { foreach (var asset in assets) { if (string.Equals(asset.Name, name, StringComparison.InvariantCulture)) return asset; } return null; } } }