private void HandleRunnningBuildDisplayInformations(BuildResult result) { RunningBuildProgressBarColor = blueBrush; if (result.Waiting) { RunningBuildImagePath = @"pack://*****:*****@"pack://application:,,,/Images/test_failed.png"; RunningBuildImageToolTip = "Unit-test failed"; RunningBuildProgressBarColor = redBrush; if (!isPinedView && !string.Equals(errorPreviousRunningBuildNumber, result.RunningBuildNumber)) { errorPreviousRunningBuildNumber = result.RunningBuildNumber; ToastNotifications.CreateToastNotification(result, true, ToastActivated); } } else if (result.TestsRunning) { RunningBuildImagePath = @"pack://*****:*****@"pack://application:,,,/Images/finishDisc.png"; RunningBuildImageToolTip = "Final steps (WIX setup)"; } else { RunningBuildImagePath = @"pack://application:,,,/Images/building.png"; RunningBuildImageToolTip = "Building DLLs"; } }
/// <summary>Refreshes this instance.</summary> internal async void Refresh() { PreviousBuildNumber = Number; PreviousRunningBuildNumber = RunningBuildNumber; Status = BuildStatus.Waiting; var resultCollection = await buildExplorer.GetBuildResultCollection(BuildInformation); if (!string.IsNullOrEmpty(resultCollection.ErrorMessage)) { Name = resultCollection.ErrorMessage; Number = string.Empty; RequestedBy = string.Empty; FinishDateTime = string.Empty; Status = BuildStatus.Unknown; IsRunning = false; TfsUri = string.Empty; RunningTfsUri = string.Empty; return; } var firstNotWaiting = resultCollection.BuildResults.FirstOrDefault(x => !x.Waiting); if (firstNotWaiting == null) { return; } var firstFinished = resultCollection.BuildResults.FirstOrDefault( x => x.Status != BuildStatus.InProgress && x.Status != BuildStatus.Waiting); if (!isPinedView && !string.IsNullOrEmpty(PreviousBuildNumber) && !string.Equals(PreviousBuildNumber, firstNotWaiting.Number) && (firstNotWaiting.Status == BuildStatus.PartiallySucceeded || firstNotWaiting.Status == BuildStatus.Failed)) { ToastNotifications.CreateToastNotification(firstNotWaiting, false, ToastActivated); } var doNotGetTests = !mainWindowViewModel.UseFullWidth && mainWindowViewModel.BigSizeMode; var buildChanged = string.IsNullOrEmpty(PreviousBuildNumber) || !string.Equals(PreviousBuildNumber, firstFinished.Number); if ((buildChanged || !testsLoaded) && !doNotGetTests) { await buildExplorer.GetTestResultAsync(BuildInformation, firstNotWaiting); tempBuildContainer.PassedTests = firstNotWaiting.PassedTests; tempBuildContainer.FailedTests = firstNotWaiting.FailedTests; tempBuildContainer.TotalTests = firstNotWaiting.TotalTests; testsLoaded = true; } if (buildChanged) { Changeset = await buildExplorer.GetChangesetAsync(BuildInformation, firstFinished.SourceVersion); } Name = firstNotWaiting.Name; Number = GetValue(firstNotWaiting.IsRunning, x => x.Number, firstNotWaiting, firstFinished); RequestedBy = GetValue(firstNotWaiting.IsRunning, x => x.RequestedBy, firstNotWaiting, firstFinished); FinishDateTime = GetValue(firstNotWaiting.IsRunning, x => x.FinishTime, firstNotWaiting, firstFinished); Status = GetValue(firstNotWaiting.IsRunning, x => x.Status, firstNotWaiting, firstFinished); IsRunning = firstNotWaiting.IsRunning; IsGatedCheckin = firstNotWaiting.IsGatedCheckin; TfsUri = InsertDetailUrl(GetValue(firstNotWaiting.IsRunning, x => x.TfsUri, firstNotWaiting, firstFinished)); RunningTfsUri = InsertDetailUrl(firstNotWaiting.RunningTfsUri); PassedTests = tempBuildContainer.PassedTests; FailedTests = tempBuildContainer.FailedTests; TotalTests = tempBuildContainer.TotalTests; RunningBuildErrorDetails.Clear(); if (!firstNotWaiting.IsRunning) { return; } var runningBuildChanged = string.IsNullOrEmpty(PreviousRunningBuildNumber) || !string.Equals(PreviousRunningBuildNumber, firstNotWaiting.RunningBuildNumber); if (runningBuildChanged && !firstNotWaiting.IsGatedCheckin) { RunningBuildChangeset = await buildExplorer.GetChangesetAsync(BuildInformation, firstNotWaiting.RunningBuildSourceVersion); } var span = DateTime.Now - firstNotWaiting.RunningStartTime; RunningMinutes = firstNotWaiting.Waiting ? 0 : (int)span.TotalMinutes; RunningBuildRequestedBy = firstNotWaiting.RunningBuildRequestedBy; RunningBuildNumber = firstNotWaiting.RunningBuildNumber; RunningBuildId = firstNotWaiting.RunningBuildId; ErrorsInBuild = firstNotWaiting.TestsFailed; HandleRunnningBuildDisplayInformations(firstNotWaiting); foreach (var error in firstNotWaiting.FailingDetails.Take(5)) { RunningBuildErrorDetails.Add(error); } if (RunningBuildErrorDetails.Count > 5) { RunningBuildErrorDetails.Add("(...)"); } var buildTimes = resultCollection.BuildResults.Where( x => x.Status == BuildStatus.PartiallySucceeded || x.Status == BuildStatus.Succeeded) .Select(x => x.Duration).ToList(); if (!buildTimes.Any()) { return; } var average = buildTimes.Average(); AverageMinutes = (int)average; var progress = (int)(span.TotalMinutes * 100 / average); RunningProgress = progress > 100 ? 100 : progress; }