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