using System.Net; namespace PluginLoader.Network; public static class GitHub { public const string listRepoName = "sepluginloader/PluginHub"; public const string listRepoCommit = "main"; public const string listRepoHash = "plugins.sha1"; private const string repoZipUrl = "https://github.com/{0}/archive/{1}.zip"; private const string rawUrl = "https://raw.githubusercontent.com/{0}/{1}/"; public static Stream DownloadRepo(string name, string commit, out string fileName) { var uri = new Uri(string.Format(repoZipUrl, name, commit), UriKind.Absolute); LogFile.WriteLine("Downloading " + uri); var request = WebRequest.CreateHttp(uri); request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; request.Timeout = Main.Instance.Config.NetworkTimeout; var response = (HttpWebResponse)request.GetResponse(); fileName = response.Headers["Content-Disposition"]; if (fileName != null) { var index = fileName.IndexOf("filename="); if (index >= 0) { index += "filename=".Length; fileName = fileName.Substring(index).Trim('"'); } } return response.GetResponseStream(); } public static Stream DownloadFile(string name, string commit, string path) { var uri = new Uri(string.Format(rawUrl, name, commit) + path.TrimStart('/'), UriKind.Absolute); LogFile.WriteLine("Downloading " + uri); var request = WebRequest.CreateHttp(uri); request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; request.Timeout = Main.Instance.Config.NetworkTimeout; var response = (HttpWebResponse)request.GetResponse(); return response.GetResponseStream(); } }