in sources/Google.Solutions.IapDesktop.Application/Client/GithubClient.cs [113:203]
public async Task<IRelease?> FindLatestReleaseAsync(
ReleaseFeedOptions options,
CancellationToken cancellationToken)
{
using (ApplicationTraceSource.Log.TraceMethod().WithoutParameters())
{
Release? latestRelease;
if (!options.HasFlag(ReleaseFeedOptions.IncludeCanaryReleases))
{
//
// Use the whacky /latest API to avoid having
// to page over dozens of releases.
//
// The /latest API ignores prereleases
//
latestRelease = await this.restAdapter
.GetAsync<Release>(
new Uri($"https://api.github.com/repos/{this.Repository}/releases/latest"),
cancellationToken)
.ConfigureAwait(false);
}
else
{
//
// Use the latest release (by version), regardless of
// whether it's a prerelease or not.
//
var releases = await
ListReleasesAsync(
options,
cancellationToken)
.ConfigureAwait(false);
latestRelease = (Release)releases.FirstOrDefault();
}
if (latestRelease == null)
{
return null;
}
else
{
ApplicationTraceSource.Log.TraceVerbose(
"Found new release: {0}", latestRelease.TagVersion);
var surveyAssetUrl = latestRelease
.Assets
.EnsureNotNull()
.FirstOrDefault(u => u.DownloadUrl.EndsWith(
"survey.dat",
StringComparison.OrdinalIgnoreCase))?
.DownloadUrl;
if (surveyAssetUrl != null)
{
ApplicationTraceSource.Log.TraceVerbose(
"Found survey: {0}", surveyAssetUrl);
//
// Try to load survey details.
//
try
{
var survey = await this.restAdapter
.GetAsync<ReleaseSurvey>(
new Uri(surveyAssetUrl),
cancellationToken)
.ConfigureAwait(false);
if (survey != null &&
!string.IsNullOrEmpty(survey.Title) &&
!string.IsNullOrEmpty(survey.Description) &&
!string.IsNullOrEmpty(survey.Url))
{
latestRelease.Survey = survey;
}
}
catch (Exception e)
{
// Ignore in Release builds.
if (!Install.IsExecutingTests)
{
Debug.Fail(e.FullMessage());
}
}
}
//
// New release available.
//
return latestRelease;
}
}
}