コード例 #1
0
ファイル: MongoDbDownloader.cs プロジェクト: 0xced/Mongo2Go
        private async Task ProcessArchiveAsync(Download download, DirectoryInfo extractDirectory, DownloadProgress progress, CancellationToken cancellationToken)
        {
            var archiveExtension = Path.GetExtension(download.Archive.Url.AbsolutePath);

            if (archiveExtension == ".zip")
            {
                await _extractor.DownloadExtractZipArchiveAsync(download, extractDirectory, progress, cancellationToken);
            }
            else
            {
                var archiveFileInfo = await DownloadArchiveAsync(download.Archive, progress, cancellationToken);

                _extractor.ExtractArchive(download, archiveFileInfo, extractDirectory, cancellationToken);
            }
            progress.ReportCompleted();
        }
コード例 #2
0
        private async Task ProcessArchiveAsync(Download download, DirectoryInfo extractDirectory, ProgressBar mainProgressBar, ChildProgressBar archiveProgressBar, CancellationToken cancellationToken)
        {
            string Message(ICopyProgress progress)
            {
                var speed = ByteSize.FromBytes(progress.BytesTransferred / progress.TransferTime.TotalSeconds);

                return($"Downloading {download.Product} for {download.Platform} archive from {download.Archive.Url} at {speed.ToString("0.0")}/s");
            }

            double?Percentage(ICopyProgress progress) => _options.DownloadExtractRatio * progress.PercentComplete;

            var archiveProgress = archiveProgressBar.AsProgress <ICopyProgress>(Message, Percentage);
            var archiveFileInfo = await DownloadArchiveAsync(download.Archive, archiveProgress, cancellationToken);

            archiveProgressBar.Message = $"Extracting {archiveFileInfo.FullName}";
            var extractProgress = archiveProgressBar.AsProgress <double>(percentage: f => _options.DownloadExtractRatio + (1 - _options.DownloadExtractRatio) * f);

            _extractor.ExtractArchive(download, archiveFileInfo, extractDirectory, extractProgress, cancellationToken);

            mainProgressBar.Tick();
        }