/// <summary> /// Updates the server package of this version. /// </summary> /// <param name="package">The server package corresponding to this version.</param> internal void UpdateServerPackage(NugetServerPackage package, IEnumerable <NugetServerPackage> alternateVersions) { OnPropertyChanging(nameof(FullName), nameof(Version)); ServerPackage = package; OnPropertyChanged(nameof(FullName), nameof(Version)); // Always keep track of highest version if (ServerPackage != null && (LatestServerPackage == null || LatestServerPackage.Version < ServerPackage.Version)) { LatestServerPackage = ServerPackage; } Dispatcher.Invoke(UpdateStatus); if (alternateVersions != null) { Dispatcher.Invoke(() => UpdateAlternateVersions(alternateVersions, (alternateVersionViewModel, alternateVersion) => { if (alternateVersion == null && alternateVersionViewModel.LocalPackage == null) { AlternateVersions.Remove(alternateVersionViewModel); } else { alternateVersionViewModel.UpdateServerPackage(alternateVersion); } })); } }
private void UpdateAlternateVersions <T>(IEnumerable <T> alternateVersions, Action <StrideStoreAlternateVersionViewModel, T> updateAction) where T : NugetPackage { var updatedViewModels = new HashSet <StrideStoreAlternateVersionViewModel>(); foreach (var alternateVersion in alternateVersions) { int index = AlternateVersions.IndexOf(x => x.Version == alternateVersion.Version); StrideStoreAlternateVersionViewModel alternateVersionViewModel; if (index < 0) { // If not, add it alternateVersionViewModel = new StrideStoreAlternateVersionViewModel(this); AlternateVersions.Add(alternateVersionViewModel); } else { // If yes, update it and remove it from the list of old version alternateVersionViewModel = AlternateVersions[index]; } updateAction(alternateVersionViewModel, alternateVersion); updatedViewModels.Add(alternateVersionViewModel); } // Update versions that are not installed locally anymore foreach (var alternateVersionViewModel in AlternateVersions.Where(x => !updatedViewModels.Contains(x)).ToList()) { updateAction(alternateVersionViewModel, null); } }
/// <summary> /// Updates the local package of this version. /// </summary> /// <param name="package">The local package corresponding to this version.</param> internal void UpdateLocalPackage(NugetLocalPackage package, IEnumerable <NugetLocalPackage> alternateVersions) { OnPropertyChanging(nameof(FullName), nameof(Version)); LocalPackage = package; OnPropertyChanged(nameof(FullName), nameof(Version)); Dispatcher.Invoke(UpdateStatus); if (alternateVersions != null) { Dispatcher.Invoke(() => { UpdateAlternateVersions(alternateVersions, (alternateVersionViewModel, alternateVersion) => { if (alternateVersion == null && alternateVersionViewModel.ServerPackage == null) { AlternateVersions.Remove(alternateVersionViewModel); } else { alternateVersionViewModel.UpdateLocalPackage(alternateVersion); } }); }); } Dispatcher.Invoke(() => UpdateFrameworks()); }