public Task <SpkResult> GetRepositoryPackages(PredefinedSources predefinedSources, RepositoryRequestDto request, IList <string> userSources)
        {
            var versionDto = this.versionService.FindBestMatch(request.Build, request.Major, request.Minor, request.Micro);

            if (versionDto == null)
            {
                throw new RepositoryException($"Unable to determine the version {request.Major}.{request.Minor}.{request.Micro}.{request.Build}");
            }

            return(GetRepositoryPackagesInternal(predefinedSources, request.PackageUpdateChannel, request.Arch, request.Unique, versionDto, userSources));
        }
 private IList <string> GetSources(PredefinedSources predefinedSources, IList <string> userSources, int majorVersion)
 {
     return(predefinedSources switch
     {
         PredefinedSources.All => sourceService.GetActiveSources(null, majorVersion).Select(p => p.Name).ToList(),
         PredefinedSources.SynopackageChoice => sourceService.GetActiveSources(true, majorVersion).Select(p => p.Name).ToList(),
         //PredefinedSources.Digitalbox => sourceService.GetActiveSources(null, majorVersion).Where(p => p.Name.StartsWith("digitalbox")).Select(p => p.Name).ToList(),
         //PredefinedSources.Bliss => sourceService.GetActiveSources(null, majorVersion).Where(p => p.Name.StartsWith("bliss")).Select(p => p.Name).ToList(),
         //PredefinedSources.Imnks => sourceService.GetActiveSources(null, majorVersion).Where(p => p.Name.StartsWith("imnks")).Select(p => p.Name).ToList(),
         PredefinedSources.UserDefined =>
         sourceService.GetAllActiveSources()
         .Where(p => userSources.Any(x => string.Equals(x, p.Name, StringComparison.InvariantCultureIgnoreCase)))
         .Select(p => p.Name)
         .ToList(),
         _ => new List <string>(),
     });
        private async Task <SpkResult> GetRepositoryPackagesInternal(
            PredefinedSources predefinedSources,
            string packageUpdateChannel,
            string arch,
            string unique,
            VersionDTO versionDto,
            IList <string> manualSources
            )
        {
            bool           isBeta  = string.Equals("beta", packageUpdateChannel, StringComparison.InvariantCultureIgnoreCase);
            IList <string> sources = GetSources(predefinedSources, manualSources, versionDto.Major);

            IList <Task <RawSpkResultDto> > downloadTasks = new List <Task <RawSpkResultDto> >();
            SpkResult spkResult = new SpkResult();

            foreach (var sourceName in sources)
            {
                var sourceDto = sourceService.GetSource(sourceName);
                var task      = this.spkService.GetRawPackages(sourceName,
                                                               sourceDto.Url,
                                                               arch,
                                                               unique,
                                                               versionDto,
                                                               isBeta,
                                                               sourceDto.CustomUserAgent,
                                                               false,
                                                               null,
                                                               sourceDto.UseGetMethod);
                downloadTasks.Add(task);
            }
            await Task.WhenAll(downloadTasks.ToArray()).ConfigureAwait(false);

            foreach (var task in downloadTasks)
            {
                var result = await task.ConfigureAwait(false);

                if (result.Success && result.SpkResult?.Packages != null)
                {
                    spkResult.Packages.AddRange(result.SpkResult.Packages);
                }
            }
            return(spkResult);
        }