|
12 | 12 | using System.Web.Mvc; |
13 | 13 | using NuGet.Services.Entities; |
14 | 14 | using NuGet.Services.Messaging.Email; |
| 15 | +using NuGet.Versioning; |
15 | 16 | using NuGetGallery.Areas.Admin; |
16 | 17 | using NuGetGallery.Areas.Admin.ViewModels; |
17 | 18 | using NuGetGallery.Authentication; |
@@ -521,16 +522,12 @@ public virtual ActionResult Packages() |
521 | 522 | var wasAADLoginOrMultiFactorAuthenticated = User.WasMultiFactorAuthenticated() || User.WasAzureActiveDirectoryAccountUsedForSignin(); |
522 | 523 |
|
523 | 524 | var packages = PackageService.FindPackagesByAnyMatchingOwner(currentUser, includeUnlisted: true); |
524 | | - var listedPackages = packages |
525 | | - .Where(p => p.Listed && p.PackageStatusKey == PackageStatus.Available) |
526 | | - .Select(p => _listPackageItemRequiredSignerViewModelFactory.Create(p, currentUser, wasAADLoginOrMultiFactorAuthenticated)) |
527 | | - .OrderBy(p => p.Id) |
528 | | - .ToList(); |
529 | | - var unlistedPackages = packages |
530 | | - .Where(p => !p.Listed || p.PackageStatusKey != PackageStatus.Available) |
531 | | - .Select(p => _listPackageItemRequiredSignerViewModelFactory.Create(p, currentUser, wasAADLoginOrMultiFactorAuthenticated)) |
532 | | - .OrderBy(p => p.Id) |
533 | | - .ToList(); |
| 525 | + |
| 526 | + var listedPackages = GetPackages(packages, currentUser, wasAADLoginOrMultiFactorAuthenticated, |
| 527 | + p => p.Listed && p.PackageStatusKey == PackageStatus.Available); |
| 528 | + |
| 529 | + var unlistedPackages = GetPackages(packages, currentUser, wasAADLoginOrMultiFactorAuthenticated, |
| 530 | + p => !p.Listed || p.PackageStatusKey != PackageStatus.Available); |
534 | 531 |
|
535 | 532 | // find all received ownership requests |
536 | 533 | var userReceived = _packageOwnerRequestService.GetPackageOwnershipRequests(newOwner: currentUser); |
@@ -567,6 +564,36 @@ public virtual ActionResult Packages() |
567 | 564 | return View(model); |
568 | 565 | } |
569 | 566 |
|
| 567 | + /// <summary> |
| 568 | + /// Returns all packages based on the predicate, with the VersionSortOrder populated |
| 569 | + /// </summary> |
| 570 | + /// <param name="packages"></param> |
| 571 | + /// <param name="currentUser"></param> |
| 572 | + /// <param name="wasAADLoginOrMultiFactorAuthenticated"></param> |
| 573 | + /// <param name="predicate"></param> |
| 574 | + /// <returns></returns> |
| 575 | + private List<ListPackageItemRequiredSignerViewModel> GetPackages( |
| 576 | + IEnumerable<Package> packages, |
| 577 | + User currentUser, |
| 578 | + bool wasAADLoginOrMultiFactorAuthenticated, |
| 579 | + Func<Package, bool> predicate) |
| 580 | + { |
| 581 | + var listedPackages = packages |
| 582 | + .Where(p => predicate(p)) |
| 583 | + .Select(p => _listPackageItemRequiredSignerViewModelFactory.Create(p, currentUser, wasAADLoginOrMultiFactorAuthenticated)) |
| 584 | + .OrderBy(p => NuGetVersion.Parse(p.FullVersion)) |
| 585 | + .ToList(); |
| 586 | + |
| 587 | + for (int i = 0; i < listedPackages.Count; i++) |
| 588 | + { |
| 589 | + listedPackages[i].VersionSortOrder = i; |
| 590 | + } |
| 591 | + |
| 592 | + listedPackages.Sort((x, y) => string.Compare(x.Id, y.Id, StringComparison.OrdinalIgnoreCase)); |
| 593 | + |
| 594 | + return listedPackages; |
| 595 | + } |
| 596 | + |
570 | 597 | [HttpGet] |
571 | 598 | [UIAuthorize] |
572 | 599 | public virtual ActionResult Organizations() |
|
0 commit comments