public async ValueTask <int> GetTotalCountAsync( int maxCount, IReadOnlyCollection <IProjectContextInfo> projectContextInfos, IReadOnlyCollection <PackageSourceContextInfo> packageSources, IReadOnlyCollection <string> targetFrameworks, SearchFilter searchFilter, ItemFilter itemFilter, CancellationToken cancellationToken) { Assumes.NotNullOrEmpty(projectContextInfos); Assumes.NotNullOrEmpty(packageSources); Assumes.NotNull(searchFilter); IReadOnlyCollection <SourceRepository>?sourceRepositories = await _sharedServiceState.GetRepositoriesAsync(packageSources, cancellationToken); (IPackageFeed? mainFeed, IPackageFeed? recommenderFeed) = await CreatePackageFeedAsync(projectContextInfos, targetFrameworks, itemFilter, recommendPackages: false, sourceRepositories, cancellationToken); Assumes.NotNull(mainFeed); SourceRepository packagesFolderSourceRepository = await _packagesFolderLocalRepositoryLazy.GetValueAsync(cancellationToken); IEnumerable <SourceRepository> globalPackageFolderRepositories = await _globalPackageFolderRepositoriesLazy.GetValueAsync(cancellationToken); var metadataProvider = new MultiSourcePackageMetadataProvider( sourceRepositories, packagesFolderSourceRepository, globalPackageFolderRepositories, new VisualStudioActivityLogger()); var searchObject = new SearchObject(mainFeed, recommenderFeed, metadataProvider, packageSources, searchCache: null); return(await searchObject.GetTotalCountAsync(maxCount, searchFilter, cancellationToken)); }
public async ValueTask <IReadOnlyCollection <PackageSearchMetadataContextInfo> > GetAllPackagesAsync( IReadOnlyCollection <IProjectContextInfo> projectContextInfos, IReadOnlyCollection <PackageSourceContextInfo> packageSources, IReadOnlyCollection <string> targetFrameworks, SearchFilter searchFilter, ItemFilter itemFilter, bool isSolution, CancellationToken cancellationToken) { Assumes.NotNullOrEmpty(projectContextInfos); Assumes.NotNullOrEmpty(packageSources); Assumes.NotNull(searchFilter); bool recommendPackages = false; IReadOnlyCollection <SourceRepository> sourceRepositories = await _sharedServiceState.GetRepositoriesAsync(packageSources, cancellationToken); (IPackageFeed? mainFeed, IPackageFeed? recommenderFeed)packageFeeds = await CreatePackageFeedAsync( projectContextInfos, targetFrameworks, itemFilter, isSolution, recommendPackages, sourceRepositories, cancellationToken); Assumes.NotNull(packageFeeds.mainFeed); SourceRepository packagesFolderSourceRepository = await _packagesFolderLocalRepositoryLazy.GetValueAsync(cancellationToken); IEnumerable <SourceRepository> globalPackageFolderRepositories = await GetAllPackageFoldersAsync(projectContextInfos, cancellationToken); var metadataProvider = new MultiSourcePackageMetadataProvider( sourceRepositories, packagesFolderSourceRepository, globalPackageFolderRepositories, new VisualStudioActivityLogger()); var searchObject = new SearchObject(packageFeeds.mainFeed, packageFeeds.recommenderFeed, metadataProvider, packageSources, PackageSearchMetadataMemoryCache); return(await searchObject.GetAllPackagesAsync(searchFilter, cancellationToken)); }
private async Task <(IPackageFeed?mainFeed, IPackageFeed?recommenderFeed)> CreatePackageFeedAsync( IReadOnlyCollection <IProjectContextInfo> projectContextInfos, IReadOnlyCollection <string> targetFrameworks, ItemFilter itemFilter, bool recommendPackages, IEnumerable <SourceRepository> sourceRepositories, CancellationToken cancellationToken) { var logger = new VisualStudioActivityLogger(); var uiLogger = ServiceLocator.GetInstance <INuGetUILogger>(); var packageFeeds = (mainFeed: (IPackageFeed?)null, recommenderFeed: (IPackageFeed?)null); if (itemFilter == ItemFilter.All && recommendPackages == false) { packageFeeds.mainFeed = new MultiSourcePackageFeed(sourceRepositories, uiLogger, TelemetryActivity.NuGetTelemetryService); return(packageFeeds); } IInstalledAndTransitivePackages installedAndTransitivePackages = await GetInstalledAndTransitivePackagesAsync(projectContextInfos, cancellationToken); PackageCollection installedPackageCollection = PackageCollection.FromPackageReferences(installedAndTransitivePackages.InstalledPackages); PackageCollection transitivePackageCollection = PackageCollection.FromPackageReferences(installedAndTransitivePackages.TransitivePackages); SourceRepository packagesFolderSourceRepository = await _packagesFolderLocalRepositoryLazy.GetValueAsync(cancellationToken); IEnumerable <SourceRepository> globalPackageFolderRepositories = await _globalPackageFolderRepositoriesLazy.GetValueAsync(cancellationToken); var metadataProvider = new MultiSourcePackageMetadataProvider( sourceRepositories, packagesFolderSourceRepository, globalPackageFolderRepositories, logger); if (itemFilter == ItemFilter.All) { // if we get here, recommendPackages == true packageFeeds.mainFeed = new MultiSourcePackageFeed(sourceRepositories, uiLogger, TelemetryActivity.NuGetTelemetryService); packageFeeds.recommenderFeed = new RecommenderPackageFeed( sourceRepositories, installedPackageCollection, transitivePackageCollection, targetFrameworks, metadataProvider, logger); return(packageFeeds); } if (itemFilter == ItemFilter.Installed) { packageFeeds.mainFeed = new InstalledPackageFeed(installedPackageCollection, metadataProvider, logger); return(packageFeeds); } if (itemFilter == ItemFilter.Consolidate) { packageFeeds.mainFeed = new ConsolidatePackageFeed(installedPackageCollection, metadataProvider, logger); return(packageFeeds); } // Search all / updates available cannot work without a source repo if (sourceRepositories == null) { return(packageFeeds); } if (itemFilter == ItemFilter.UpdatesAvailable) { packageFeeds.mainFeed = new UpdatePackageFeed( _serviceBroker, installedPackageCollection, metadataProvider, projectContextInfos.ToArray()); return(packageFeeds); } throw new InvalidOperationException( string.Format(CultureInfo.CurrentCulture, Strings.UnsupportedFeedType, itemFilter)); }