Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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());
        }
Example #6
0
        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);
        }
Example #7
0
 private bool IsClassicAsset(GitHubAsset asset)
 {
     return(asset.Name.EndsWith("-classic.zip"));
 }
Example #8
0
 private bool IsValidContentType(GitHubAsset asset)
 {
     return(ReleaseContentTypes.Any(ct => ct == asset.ContentType));
 }
Example #9
0
 private bool IsNotNoLib(GitHubAsset asset)
 {
     return(!asset.Name.Contains("-nolib", StringComparison.OrdinalIgnoreCase));
 }
Example #10
0
 private static bool IsDownloadOrUpdate(GitHubAsset asset)
 {
     return(!CheckIfPluginPackageExists(asset.name) || CheckIfPluginPackageNeedsUpdate(asset.name, asset.updated_at));
 }