AerialForWindows.Updates.GithubReleaseProvider.GetReleaseInfosAsync C# (CSharp) Method

GetReleaseInfosAsync() public method

public GetReleaseInfosAsync ( ) : Task>
return Task>
        public async Task<IReadOnlyCollection<ReleaseInfo>> GetReleaseInfosAsync() {
            var github = new GitHubClient(new ProductHeaderValue(_clientName));
            var result = new List<ReleaseInfo>();
            foreach (var release in await github.Repository.Release.GetAll(_repositoryOwner, _repositoryName)) {
                var r = new ReleaseInfo {
                    Name = String.IsNullOrWhiteSpace(release.Name) ? release.TagName : release.Name,
                    ReleaseNotes = release.Body,
                    PublishedAt = release.PublishedAt,
                    CreatedAt = release.CreatedAt,
                    HtmlUrl = release.HtmlUrl,
                    TagName = release.TagName,
                    IsPrerelease = release.Prerelease,
                };

                var assets = await github.Repository.Release.GetAllAssets(_repositoryOwner, _repositoryName, release.Id);
                var asset = assets.FirstOrDefault(a => a.Name.EndsWith(".msi"));
                if (asset != null) {
                    r.Filename = asset.Name;
                    r.DownloadUrl = asset.Url;
                }

                var match = Regex.Match(r.TagName, @"^v(?<major>\d+)\.(?<minor>\d+)(\.(?<patch>\d+))?$");
                if (match.Success) {
                    int major, minor, patch;
                    Int32.TryParse(match.Groups["major"].Value, out major);
                    Int32.TryParse(match.Groups["minor"].Value, out minor);
                    if (Int32.TryParse(match.Groups["patch"].Value, out patch)) {
                        r.Version = new Version(major, minor, patch);
                    } else {
                        r.Version = new Version(major, minor);
                    }
                }
                result.Add(r);
            }
            return result;
        }