Example #1
0
        private async Task <Tuple <TaskResultStatus, bool> > DownloadFiles(IEnumerable <DownloadFile> downloadList)
        {
            return(await Task.Run(async() =>
            {
                var retryCount = 0;

                await DownloadHelper.AdvancedDownloadListFile(downloadList, DownloadThread, null)
                .ConfigureAwait(false);

                if (!_needRetry)
                {
                    return new Tuple <TaskResultStatus, bool>(TaskResultStatus.Success, false);
                }

                while (_retryFileList.Any() && retryCount < TotalRetry)
                {
                    foreach (var rF in _retryFileList)
                    {
                        rF.RetryCount++;
                    }

                    var tempList = _retryFileList;
                    await DownloadHelper.AdvancedDownloadListFile(tempList, DownloadThread, null, DownloadParts)
                    .ConfigureAwait(false);

                    retryCount++;
                }


                var flag = _retryFileList.Any(rF => rF.FileType.Equals("Library/Native", StringComparison.Ordinal));
                var resultType = _retryFileList.Any() ? TaskResultStatus.PartialSuccess : TaskResultStatus.Success;

                return new Tuple <TaskResultStatus, bool>(resultType, flag);
            }).ConfigureAwait(false));
        }
Example #2
0
        private async Task <Tuple <TaskResultStatus, bool> > DownloadFiles(IEnumerable <DownloadFile> downloadList)
        {
            var retryFileList = new List <DownloadFile>();
            var retryCount    = 0;
            var needRetry     = false;

            if (TotalRetry != 0)
            {
                DownloadFileCompletedEvent += (sender, args) =>
                {
                    if (args.Success)
                    {
                        return;
                    }

                    retryFileList.Add(args.File);
                    needRetry = true;
                }
            }
            ;

            return(await Task.Run(async() =>
            {
                if (retryCount == 0)
                {
                    await DownloadHelper.AdvancedDownloadListFile(downloadList, DownloadThread, null)
                    .ConfigureAwait(false);
                }

                if (!needRetry)
                {
                    return new Tuple <TaskResultStatus, bool>(TaskResultStatus.Success, false);
                }

                while (retryFileList.Any() && retryCount <= TotalRetry)
                {
                    foreach (var rF in retryFileList)
                    {
                        rF.RetryCount++;
                    }

                    var tempList = retryFileList;
                    await DownloadHelper.AdvancedDownloadListFile(tempList, DownloadThread, null).ConfigureAwait(false);

                    retryCount++;
                }


                var flag = retryFileList.Any(rF => rF.FileType.Equals("Library", StringComparison.Ordinal));
                var resultType = retryFileList.Any() ? TaskResultStatus.PartialSuccess : TaskResultStatus.Success;

                return new Tuple <TaskResultStatus, bool>(resultType, flag);
            }).ConfigureAwait(false));
        }
Example #3
0
        private async Task <ValueTuple <TaskResultStatus, ResourceCompleterCheckResult?> > DownloadFiles(IEnumerable <DownloadFile> downloadList)
        {
            await DownloadHelper.AdvancedDownloadListFile(downloadList, DownloadParts);

            var leftRetries = TotalRetry;
            var fileBag     = new ConcurrentBag <DownloadFile>(_retryFiles);

            while (!fileBag.IsEmpty && leftRetries >= 0)
            {
                _retryFiles.Clear();
                TotalDownloaded = 0;
                NeedToDownload  = fileBag.Count;

                var files = fileBag.Select(f => (DownloadFile)f.Clone()).ToList();
                fileBag.Clear();

                foreach (var file in files)
                {
                    file.RetryCount++;
                    file.Completed = WhenCompleted;
                }

                await DownloadHelper.AdvancedDownloadListFile(files);

                fileBag = new ConcurrentBag <DownloadFile>(_retryFiles);
                leftRetries--;
            }

            var isLibraryFailed = fileBag.Any(f => f.FileType.Equals("Library/Native", StringComparison.OrdinalIgnoreCase));
            var resultType      = fileBag.IsEmpty ? TaskResultStatus.Success : TaskResultStatus.PartialSuccess;

            if (isLibraryFailed)
            {
                resultType = TaskResultStatus.Error;
            }

            return(resultType, new ResourceCompleterCheckResult {
                IsLibDownloadFailed = isLibraryFailed
            });
        }