48 lines
1.8 KiB
C#
48 lines
1.8 KiB
C#
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();
|
|
}
|
|
} |