Skip to content

Commit

Permalink
Fixed UI version list sync
Browse files Browse the repository at this point in the history
  • Loading branch information
zhili1208 committed Jan 17, 2017
1 parent 09ea24e commit 18b915c
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -200,12 +200,28 @@ private async Task<IEnumerable<VersionInfo>> FetchAndMergeVersionsAsync(PackageI
tasks.Add(_localRepository.GetPackageMetadataFromLocalSourceAsync(identity, cancellationToken));
}

var ignored = tasks
.Select(task => task.ContinueWith(LogError, TaskContinuationOptions.OnlyOnFaulted))
.ToArray();
var completed = new List<IPackageSearchMetadata>();

var completed = (await Task.WhenAll(tasks))
.Where(m => m != null);
foreach (var task in tasks)
{
try
{
var result = await task;
if (result != null)
{
completed.Add(result);
}
}
catch
{
LogError(task);
}
}

if (completed.Count == 0)
{
return Enumerable.Empty<VersionInfo>();
}

return await MergeVersionsAsync(identity, completed);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,16 +67,15 @@ public virtual void CleanUp()
/// <param name="filter">The current filter. This will used to select the default action.</param>
public async virtual Task SetCurrentPackage(
PackageItemListViewModel searchResultPackage,
ItemFilter filter)
ItemFilter filter,
Func<PackageItemListViewModel> getPackageItemListViewModel)
{
_searchResultPackage = searchResultPackage;
_filter = filter;
OnPropertyChanged(nameof(Id));
OnPropertyChanged(nameof(IconUrl));

var versions = await searchResultPackage.GetVersionsAsync();

_allPackageVersions = versions.Select(v => v.Version).ToList();
var getVersionsTask = searchResultPackage.GetVersionsAsync();

_projectVersionRangeDict = new Dictionary<string, VersionRange>(StringComparer.OrdinalIgnoreCase);

Expand All @@ -92,6 +91,22 @@ public async virtual Task SetCurrentPackage(
_projectVersionRangeDict.Add(project.GetMetadata<string>(NuGetProjectMetadataKeys.Name), packageReference?.AllowedVersions);
}

// Add Current package version to package versions list.
_allPackageVersions = new List<NuGetVersion>() { searchResultPackage.Version };
CreateVersions();
OnCurrentPackageChanged();

var versions = await getVersionsTask;

// GetVersionAsync can take long time to finish, user might changed selected package.
// Check selected package.
if (getPackageItemListViewModel() != searchResultPackage)
{
return;
}

_allPackageVersions = versions.Select(v => v.Version).ToList();

// hook event handler for dependency behavior changed
Options.SelectedChanged += DependencyBehavior_SelectedChanged;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,18 @@ public PackageDetailControlModel(

public async override Task SetCurrentPackage(
PackageItemListViewModel searchResultPackage,
ItemFilter filter)
ItemFilter filter,
Func<PackageItemListViewModel> getPackageItemListViewModel)
{

await base.SetCurrentPackage(searchResultPackage, filter);
await base.SetCurrentPackage(searchResultPackage, filter, getPackageItemListViewModel);

// SetCurrentPackage can take long time to return, user might changed selected package.
// Check selected package.
if (getPackageItemListViewModel() != searchResultPackage)
{
return;
}
InstalledVersion = searchResultPackage.InstalledVersion;
SelectedVersion.IsCurrentInstalled = InstalledVersion == SelectedVersion.Version;
OnPropertyChanged(nameof(SelectedVersion));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -669,7 +669,7 @@ private async Task UpdateDetailPaneAsync()
_packageDetail.Visibility = Visibility.Visible;
_packageDetail.DataContext = _detailModel;

await _detailModel.SetCurrentPackage(selectedPackage, _topPanel.Filter);
await _detailModel.SetCurrentPackage(selectedPackage, _topPanel.Filter, ()=>_packageList.SelectedItem);

_packageDetail.ScrollToHome();

Expand Down

0 comments on commit 18b915c

Please sign in to comment.