private void UpdateIcon(BambooPlan plan) { switch (plan.BuildState) { case BuildState.Failed: IconSource = new Uri("pack://application:,,,/Images/bamboo-failed.ico"); break; case BuildState.Successful: if (_bambooPlans.All(x => x.Value.BuildState == BuildState.Successful)) { IconSource = new Uri("pack://application:,,,/Images/bamboo-successful.ico"); } break; case BuildState.Unknown: if (_bambooPlans.All(x => x.Value.BuildState == BuildState.Unknown)) { IconSource = new Uri("pack://application:,,,/Images/bamboo.ico"); } break; default: throw new ArgumentOutOfRangeException(); } }
private async Task UpdatePlans(Session session, CancellationToken token) { Dictionary <string, Result> oldResults = new Dictionary <string, Result>(); while (!token.IsCancellationRequested) { Plans plans = await GetFavouritePlans(session).ConfigureAwait(false); if (plans != null) { IEnumerable <Task <Result> > resultTasks = plans.PlanList.Select(plan => GetLatestBuild(session, plan.PlanKey.Key)); Result[] results = await Task.WhenAll(resultTasks); if (plans.PlanList.Count < oldResults.Count) { string removedPlanKey = oldResults.First(x => !plans.PlanList.Any(y => y.PlanKey.Key == x.Key)).Key; oldResults.Remove(removedPlanKey); _bambooPlanPublisher.FirePlanRemoved(new BambooPlan { PlanKey = removedPlanKey }); } foreach (PlanResult planResult in plans.PlanList.Zip(results, (plan, result) => new PlanResult(plan, result))) { BambooPlan bambooPlan = new BambooPlan(); if (planResult.Plan.IsBuilding) { bambooPlan.RemainingTime = planResult.Result.Progress.PrettyTimeRamaining; } if (oldResults.Values.Contains(planResult.Result)) { continue; } oldResults[planResult.Plan.PlanKey.Key] = planResult.Result; bambooPlan.BuildName = planResult.Plan.BuildName; bambooPlan.PlanKey = planResult.Plan.PlanKey.Key; bambooPlan.BuildState = planResult.Result.BuildState; bambooPlan.ProjectKey = planResult.Plan.ProjectKey; bambooPlan.ProjectName = planResult.Plan.ProjectName; bambooPlan.IsBuilding = planResult.Plan.IsBuilding; bambooPlan.IsQueuing = planResult.Plan.IsActive && planResult.Plan.IsBuilding == false; bambooPlan.IsEnabled = planResult.Plan.Enabled; _bambooPlanPublisher.FirePlanChanged(bambooPlan); } } Thread.Sleep(Timeout); } }
private void fillPlanList(IEnumerable <BambooPlan> plans) { if (plans == null) { return; } checkedListBuilds.Items.Clear(); int i = 0; foreach (var plan in plans) { checkedListBuilds.Items.Add(plan); BambooPlan planCopy = plan; if (planKeys.Any(key => planCopy.Key.Equals(key))) { checkedListBuilds.SetItemChecked(i, true); } ++i; } }
public void FirePlanChanged(BambooPlan plan) { PlanChanged?.Invoke(this, new PlanEventArgs(plan)); }
private ICollection <BambooPlan> getPlansFromUrlWithStartIndex(string endpoint, int start) { using (Stream stream = getQueryResultStream(endpoint + getBasicAuthParameter(endpoint) + "&start-index=" + start, true)) { XPathDocument doc = XPathUtils.getXmlDocument(stream); string code = getRestErrorStatusCode(doc); if (code != null) { throw new Exception(code); } XPathNavigator nav = doc.CreateNavigator(); XPathExpression expr = nav.Compile("/plans/plans"); XPathNodeIterator it = nav.Select(expr); int totalPlansCount = 0; int maxResult = 0; int startIndex = 0; if (it.MoveNext()) { totalPlansCount = int.Parse(XPathUtils.getAttributeSafely(it.Current, "size", "0")); maxResult = int.Parse(XPathUtils.getAttributeSafely(it.Current, "max-result", "0")); startIndex = int.Parse(XPathUtils.getAttributeSafely(it.Current, "start-index", "0")); } expr = nav.Compile("/plans/plans/plan"); it = nav.Select(expr); List <BambooPlan> plans = new List <BambooPlan>(); while (it.MoveNext()) { string enabledValue = XPathUtils.getAttributeSafely(it.Current, "enabled", "true"); string key = XPathUtils.getAttributeSafely(it.Current, "key", null); string name = XPathUtils.getAttributeSafely(it.Current, "name", null); bool enabled = true; if (enabledValue != null) { enabled = Boolean.Parse(enabledValue); } it.Current.MoveToFirstChild(); bool favourite = false; do { switch (it.Current.Name) { case "isFavourite": favourite = it.Current.Value.Equals("true"); break; } } while (it.Current.MoveToNext()); if (key == null || name == null) { continue; } BambooPlan plan = new BambooPlan(key, name, enabled, favourite); plans.Add(plan); } // Yes, recursion here. I hope it works as I think it should. If not, we are all doomed if (totalPlansCount > maxResult + startIndex) { plans.AddRange(getPlansFromUrlWithStartIndex(endpoint, startIndex + maxResult)); } return(plans); } }
public PlanEventArgs(BambooPlan plan) { Plan = plan; }