public async Task <Dictionary <string, PersonalMinimumVerificationResult> > CheckPersonalMinimums() { Dictionary <string, PersonalMinimumVerificationResult> results = new Dictionary <string, PersonalMinimumVerificationResult>(); results.Add("Visibility", PersonalMinimumVerificationResult.Unknown); results.Add("Ceiling", PersonalMinimumVerificationResult.Unknown); results.Add("Runway", PersonalMinimumVerificationResult.Unknown); results.Add("Crosswind", PersonalMinimumVerificationResult.Unknown); var minimums = await PersonalMinimums.LoadAsync(); var passRunway = this.Airport.Runways.Where(rwy => rwy.Length.IsOver(minimums.RunwayLength) == PersonalMinimumVerificationResult.Pass && rwy.Width.IsOver(minimums.RunwayWidth) == PersonalMinimumVerificationResult.Pass && !rwy.Closed); var warningRunway = this.Airport.Runways.Where(rwy => rwy.Length.IsOver(minimums.RunwayLength) != PersonalMinimumVerificationResult.Fail && rwy.Width.IsOver(minimums.RunwayWidth) != PersonalMinimumVerificationResult.Fail && !rwy.Closed); if (passRunway.Any()) { results["Runway"] = PersonalMinimumVerificationResult.Pass; } else if (warningRunway.Any()) { results["Runway"] = PersonalMinimumVerificationResult.Warning; } else { results["Runway"] = PersonalMinimumVerificationResult.Fail; } if (this.HasMetar) { results["Visibility"] = this.Metar.Visibility.IsOver(minimums.Visibility); if (this.Metar.Clouds.Any(cl => cl.IsCeiling)) { var ceiling = this.Metar.Clouds.Where(cl => cl.IsCeiling) .OrderBy(cl => cl.Altitude) .First(); results["Ceiling"] = ceiling.Altitude.IsOver(minimums.Ceiling); } else { results["Ceiling"] = PersonalMinimumVerificationResult.Pass; } foreach (var rwy in passRunway) { var windComponents = CrossWindComponents.CreateFromMetarData(this.Metar.Wind.Direction, this.Metar.Wind.Speed, rwy.End1.Heading); results["Crosswind"] = minimums.Crosswind.IsOver(windComponents.Crosswind); if (results["Crosswind"] == PersonalMinimumVerificationResult.Pass) { break; } } } return(results); }
public async Task LoadAsync() { this.DataSources = new ObservableCollection <DataSourceViewModel>(App.DataSourceManager.DataSources.Select(s => new DataSourceViewModel(App.DataSourceManager, s.Key))); this.Minimums = await PersonalMinimums.LoadAsync(); }