private static async Task <string> DownloadAndExtractUpdate(string tempDir, GitHubAsset updateAsset) { var saveLocation = Path.Combine(tempDir, updateAsset.name); if (!File.Exists(saveLocation)) { using (var httpClient = new HttpClient { DefaultRequestHeaders = { { "User-Agent", UserAgentValue } } }) { var response = await httpClient.GetAsync(updateAsset.browser_download_url); using (var outputStream = File.Create(saveLocation)) using (var inputStream = await response.Content.ReadAsStreamAsync()) { await inputStream.CopyToAsync(outputStream); } } } var unzipDir = Path.Combine(tempDir, Path.GetFileNameWithoutExtension(updateAsset.name)); Directory.CreateDirectory(unzipDir); await Task.Run(() => ZipFile.ExtractToDirectory(saveLocation, unzipDir, true)); return(unzipDir); }
public async Task <string> DownloadAsset(GitHubRelease release, GitHubAsset asset) { var tempPath = Path.GetTempPath(); var tempFileName = Path.Combine(tempPath, asset.Name); if (!File.Exists(tempFileName)) { var downloadUrl = string.Format(AssetBaseUrl, release.TagName, asset.Name); var webClient = CreateWebClient(); await webClient.DownloadFileTaskAsync(downloadUrl, tempFileName); } return(tempFileName); }
private string getBestUrl(GitHubRelease release) { GitHubAsset bestAsset = null; switch (RuntimeInfo.OS) { case RuntimeInfo.Platform.Windows: bestAsset = release.Assets?.Find(f => f.Name.EndsWith(".exe")); break; case RuntimeInfo.Platform.MacOsx: bestAsset = release.Assets?.Find(f => f.Name.EndsWith(".app.zip")); break; } return(bestAsset?.BrowserDownloadUrl ?? release.HtmlUrl); }
private bool IsValidClientType(WowClientType clientType, GitHubAsset asset) { var isClassic = IsClassicAsset(asset); switch (clientType) { case WowClientType.Retail: case WowClientType.RetailPtr: case WowClientType.Beta: return(!isClassic); case WowClientType.Classic: case WowClientType.ClassicPtr: return(isClassic); default: return(false); } }
private byte[] LoadGitHubReleaseAsset(GitHubAsset gitHubAsset) { using var cts = new CancellationTokenSource(DefaultTimeout); var uri = new Uri(gitHubAsset.BrowserDownloadUrl); using var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, uri) { Headers = { Accept = { MediaTypeWithQualityHeaderValue.Parse(gitHubAsset.ContentType) }, UserAgent = { ProductInfoHeaderValue.Parse("Anything") } } }; using var httpResponseMessage = httpClient.Send(httpRequestMessage, cts.Token); httpResponseMessage.EnsureSuccessStatusCode(); using var stream = httpResponseMessage.Content.ReadAsStream(cts.Token); return(stream.ReadAllBytes()); }
public override TemporaryDirectory DownloadPackage(Upset package) { string sourceName = Regex.Replace(package.MetaInformation.dirName, ".Upset.xml$", ".unitypackage", RegexOptions.IgnoreCase); releases = GetPackagesReleases(); GitHubRelease release = releases.FirstOrDefault(rel => rel.assets.Any(asset => asset.name.Contains(sourceName))); if (release == null) { throw new ArgumentException(string.Format("Package {0} is not present in this repository", package.PackageName)); } GitHubAsset packageAsset = release.assets.First(asset => asset.name.Contains(sourceName)); TemporaryDirectory td = new TemporaryDirectory(); using (StreamReader sr = new StreamReader(GitHub.GetAssetStream(packageAsset, GetToken()))) { UnityPackage unityPackage = new UnityPackage(); unityPackage.Extract(sr.BaseStream, td.Path); } return(td); }
private bool IsClassicAsset(GitHubAsset asset) { return(asset.Name.EndsWith("-classic.zip")); }
private bool IsValidContentType(GitHubAsset asset) { return(ReleaseContentTypes.Any(ct => ct == asset.ContentType)); }
private bool IsNotNoLib(GitHubAsset asset) { return(!asset.Name.Contains("-nolib", StringComparison.OrdinalIgnoreCase)); }
private static bool IsDownloadOrUpdate(GitHubAsset asset) { return(!CheckIfPluginPackageExists(asset.name) || CheckIfPluginPackageNeedsUpdate(asset.name, asset.updated_at)); }