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; } }
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; } }
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; } }