/// <summary> /// Matches targets with what is available on the server and updates the options model /// </summary> /// <returns>Targets that were removed</returns> private async Task UpdateTargetsAsync() { var targets = await GetTargetsAsync(); var canonicalPlatforms = targets.GroupBy(t => t.Name).Select(t => { return(new TargetPlatform { Name = t.Key, Versions = t.Select(v => new TargetPlatformVersion { PlatformName = t.Key, Version = v.Version, IsSelected = v.IsSet }) .OrderBy(v => v.Version) .ToList() }); }); var reconciledPlatforms = new List <TargetPlatform>(); foreach (var canonicalPlatform in canonicalPlatforms) { var existingTargetPlatform = _optionsModel.Platforms .FirstOrDefault(t => StringComparer.OrdinalIgnoreCase.Equals(t.Name, canonicalPlatform.Name)); var platform = (existingTargetPlatform?.Equals(canonicalPlatform) ?? false) ? existingTargetPlatform : canonicalPlatform; foreach (var alias in _targetMapper.Aliases) { foreach (var name in _targetMapper.GetNames(alias)) { if (String.Equals(platform.Name, name)) { platform.AlternativeNames.Add(alias); } } } reconciledPlatforms.Add(platform); } // This will sort the platforms on the 'Name' property reconciledPlatforms.Sort(); InvalidTargets = Targets.Where(p => !reconciledPlatforms.Contains(p)).ToList(); Targets = reconciledPlatforms; }
private void UpdateTargetPlatforms(IEnumerable <TargetPlatform> targetPlatforms) { lock (_lock) { // Remove any existing subscribed events foreach (var platform in _currentVersions) { platform.PropertyChanged -= TargetPlatformAndResultFormatPropertyChanged; } var reconciledPlatforms = new List <TargetPlatform>(); foreach (var canonicalPlatform in targetPlatforms) { var existingTargetPlatform = _optionsModel.Platforms .FirstOrDefault(t => StringComparer.OrdinalIgnoreCase.Equals(t.Name, canonicalPlatform.Name)); var platform = (existingTargetPlatform?.Equals(canonicalPlatform) ?? false) ? existingTargetPlatform : canonicalPlatform; foreach (var alias in _targetMapper.Aliases) { foreach (var name in _targetMapper.GetNames(alias)) { if (String.Equals(platform.Name, name)) { platform.AlternativeNames.Add(alias); } } } reconciledPlatforms.Add(platform); } // This will sort the platforms on the 'Name' property reconciledPlatforms.Sort(); InvalidTargets = Targets.Where(p => !reconciledPlatforms.Contains(p)).ToList(); Targets = reconciledPlatforms; foreach (var platform in _currentVersions) { platform.PropertyChanged += TargetPlatformAndResultFormatPropertyChanged; } } }