Orc.NuGetExplorer.PackagesUpdatesSearcherService.SearchForUpdates C# (CSharp) Method

SearchForUpdates() public method

public SearchForUpdates ( bool allowPrerelease = null, bool authenticateIfRequired = true ) : IEnumerable
allowPrerelease bool
authenticateIfRequired bool
return IEnumerable
        public IEnumerable<IPackageDetails> SearchForUpdates(bool? allowPrerelease = null, bool authenticateIfRequired = true)
        {
            var scopeManagers = new List<ScopeManager<AuthenticationScope>>();

            try
            {
                Log.Debug("Searching for updates, allowPrerelease = {0}, authenticateIfRequired = {1}", allowPrerelease, authenticateIfRequired);

                var sourceRepositories = _repositoryService.GetSourceRepositories();
                foreach (var repository in sourceRepositories)
                {
                    var scopeManager = ScopeManager<AuthenticationScope>.GetScopeManager(repository.Source.GetSafeScopeName(), () => new AuthenticationScope(authenticateIfRequired));
                    scopeManagers.Add(scopeManager);
                }

                var availableUpdates = new List<IPackageDetails>();
                var packageRepository = _repositoryCacheService.GetNuGetRepository(_repositoryService.GetSourceAggregateRepository());
                var packages = _repositoryCacheService.GetNuGetRepository(_repositoryService.LocalRepository).GetPackages();

                foreach (var package in packages)
                {
                    var prerelease = allowPrerelease ?? package.IsPrerelease();

                    var packageUpdates = packageRepository.GetUpdates(new[] { package }, prerelease, false).Select(x => _packageCacheService.GetPackageDetails(x));
                    availableUpdates.AddRange(packageUpdates);
                }

                Log.Debug("Finished searching for updates, found '{0}' updates", availableUpdates.Count);

                return availableUpdates;
            }
            finally
            {
                foreach (var scopeManager in scopeManagers)
                {
                    scopeManager.Dispose();
                }

                scopeManagers.Clear();
            }
        }
        #endregion