private async Task <JObject> FetchBuildDetailsManagingVersionUpdateAsync(AppVeyorBuildInfo buildDetails, CancellationToken cancellationToken) { try { return(JObject.Parse(await GetResponseAsync(_httpClientAppVeyor, buildDetails.AppVeyorBuildReportUrl, cancellationToken).ConfigureAwait(false))); } catch { var buildHistoryUrl = buildDetails.BaseApiUrl + "/history?recordsNumber=1&startBuildId=" + (int.Parse(buildDetails.BuildId) + 1); var builds = JObject.Parse(await GetResponseAsync(_httpClientAppVeyor, buildHistoryUrl, cancellationToken).ConfigureAwait(false)); var version = builds["builds"][0]["version"].ToObject <string>(); buildDetails.Id = version; buildDetails.AppVeyorBuildReportUrl = buildDetails.BaseApiUrl + "/build/" + version; buildDetails.Url = buildDetails.BaseWebUrl + version; return(JObject.Parse(await GetResponseAsync(_httpClientAppVeyor, buildDetails.AppVeyorBuildReportUrl, cancellationToken).ConfigureAwait(false))); } }
private void UpdateDescription(AppVeyorBuildInfo buildDetails, CancellationToken cancellationToken) { var buildDetailsParsed = ThreadHelper.JoinableTaskFactory.Run(() => FetchBuildDetailsManagingVersionUpdateAsync(buildDetails, cancellationToken)); if (buildDetailsParsed == null) { return; } var buildData = buildDetailsParsed["build"]; var buildDescription = buildData["jobs"].Last(); var status = buildDescription["status"].ToObject <string>(); buildDetails.Status = ParseBuildStatus(status); buildDetails.ChangeProgressCounter(); if (!buildDetails.IsRunning) { buildDetails.Duration = GetBuildDuration(buildData); } int testCount = buildDescription["testsCount"].ToObject <int>(); if (testCount != 0) { int failedTestCount = buildDescription["failedTestsCount"].ToObject <int>(); int skippedTestCount = testCount - buildDescription["passedTestsCount"].ToObject <int>(); var testResults = testCount + " tests"; if (failedTestCount != 0 || skippedTestCount != 0) { testResults += string.Format(" ( {0} failed, {1} skipped )", failedTestCount, skippedTestCount); } buildDetails.TestsResultText = testResults; } }
private static void UpdateDisplay(IObserver <BuildInfo> observer, AppVeyorBuildInfo build) { build.UpdateDescription(); observer.OnNext(build); }