コード例 #1
0
        private async Task LoadPackages()
        {
            if (IsLoading)
            {
                // prevent concurrent loading
                return;
            }

            IsLoading    = true;
            ErrorMessage = null;
            AllPackages.Clear();
            _downloadCancelSource = new CancellationTokenSource();

            try
            {
                IQueryable <IPackage> query = _repository.GetPackagesById(LatestPackageInfo.Id, ShowPrerelease);
                query = query.OrderByDescending(p => p.Published);

                IQueryable <PackageInfo> packageInfos = GetPackageInfos(query, _repository);

                PackageInfo[] packageInfoList = await LoadData(packageInfos, _downloadCancelSource.Token);

                var dataServiceRepository = _repository as DataServicePackageRepository;
                if (dataServiceRepository != null)
                {
                    foreach (PackageInfo entity in packageInfoList)
                    {
                        entity.DownloadUrl = dataServiceRepository.GetReadStreamUri(entity);
                    }
                }

                foreach (var p in packageInfoList)
                {
                    p.ShowAll = true;
                }

                // now show packages
                AllPackages.AddRange(packageInfoList);

                HasFinishedLoading = true;
            }
            catch (OperationCanceledException)
            {
            }
            catch (Exception exception)
            {
                ErrorMessage = exception.GetBaseException().Message;
            }
            finally
            {
                _downloadCancelSource = null;
                IsLoading             = false;
            }
        }
コード例 #2
0
        private async Task LoadPackages()
        {
            if (IsLoading)
            {
                // prevent concurrent loading
                return;
            }

            IsLoading    = true;
            ErrorMessage = null;
            AllPackages.Clear();
            _downloadCancelSource = new CancellationTokenSource();

            try
            {
                var versions = await _versionInfos();

                var packageMetadataResource = await _repository.GetResourceAsync <PackageMetadataResource>(_downloadCancelSource.Token);

                using (var sourceCacheContext = new SourceCacheContext())
                {
                    var query = await packageMetadataResource.GetMetadataAsync(LatestPackageInfo.Id, ShowPrerelease, ShowPrerelease, sourceCacheContext, NullLogger.Instance, _downloadCancelSource.Token);

                    query = query.OrderByDescending(p => p.Identity.Version);

                    // now show packages
                    AllPackages.AddRange(query.Select(p => CreatePackageInfo(p, _feedType, versions)));
                }

                HasFinishedLoading = true;
            }
            catch (OperationCanceledException)
            {
            }
            catch (Exception exception)
            {
                if (!(exception is FatalProtocolException) && !(exception is IOException) && !(exception is NullReferenceException) && !(exception is UnauthorizedAccessException))
                {
                    DiagnosticsClient.TrackException(exception);
                }
                ErrorMessage = exception.GetBaseException().Message;
            }
            finally
            {
                _downloadCancelSource.Dispose();
                _downloadCancelSource = null;
                IsLoading             = false;
            }
        }
コード例 #3
0
        private async Task LoadPackages()
        {
            if (IsLoading)
            {
                // prevent concurrent loading
                return;
            }

            IsLoading    = true;
            ErrorMessage = null;
            AllPackages.Clear();
            _downloadCancelSource = new CancellationTokenSource();

            try
            {
                IQueryable <IPackage> query = _repository.GetPackagesById(LatestPackageInfo.Id, ShowPrerelease);
                query = query.OrderByDescending(p => p.Published);

                IQueryable <PackageInfo> packageInfos = GetPackageInfos(query, _repository);

                PackageInfo[] packageInfoList       = null;
                bool          resourceNotFoundError = false;
                try
                {
                    packageInfoList = await LoadData(packageInfos, _downloadCancelSource.Token);
                }
                catch (DataServiceQueryException ex)
                {
                    resourceNotFoundError = IsResourceNotFoundError(ex);
                    if (!resourceNotFoundError)
                    {
                        throw;
                    }
                }

                // for a 404 error, use the legacy way to find packages by id,
                // which requires filtering pre-release packages after the fact
                if (resourceNotFoundError)
                {
                    query           = ((DataServicePackageRepository)_repository).LegacyGetPackagesById(LatestPackageInfo.Id);
                    packageInfos    = GetPackageInfos(query, _repository);
                    packageInfoList = await LoadData(packageInfos, _downloadCancelSource.Token);

                    if (!ShowPrerelease)
                    {
                        packageInfoList = Array.FindAll(packageInfoList, p => !p.IsPrerelease);
                    }
                }

                var dataServiceRepository = _repository as DataServicePackageRepository;
                if (dataServiceRepository != null)
                {
                    foreach (PackageInfo entity in packageInfoList)
                    {
                        entity.DownloadUrl = dataServiceRepository.GetReadStreamUri(entity);
                    }
                }

                foreach (var p in packageInfoList)
                {
                    p.ShowAll = true;
                }

                // now show packages
                AllPackages.AddRange(packageInfoList);

                HasFinishedLoading = true;
            }
            catch (OperationCanceledException)
            {
            }
            catch (Exception exception)
            {
                ErrorMessage = exception.GetBaseException().Message;
            }
            finally
            {
                _downloadCancelSource = null;
                IsLoading             = false;
            }
        }