public async Task <IActionResult> DownloadFiles(MediaDownloadRequest mediaRequest) { ApplicationUser user = await userManager.GetUserAsync(HttpContext.User); Stream zipStream = await mediaSyncer.Download(user.Id, mediaRequest.Files); return(File(zipStream, "application/octet-stream")); }
public ApiResult <Stream> Execute(MediaDownloadRequest request) { return(Download("/media/download", request)); }
private async void OnDownload() { if (IsDownloading) { return; } IsDownloading = true; var downloadDirectory = new DirectoryInfo(_config[ConfigurationKeys.AudioDownloadDirectory]); var downloadRequest = new MediaDownloadRequest { DataCallback = DataCallback, Directory = downloadDirectory, DownloadInfo = new RemoteResourceDownloadInfo { ChunkSize = 1024, Uri = YouTubeLink } }; var errors = new HashSet <string>(); MediaDownloadResponse response = MediaDownloadResponse.Cancelled(); for (int i = 0; i < _config.Get <int>(ConfigurationKeys.DownloadRetryCount); i++) { _cancellationTokenSource = new CancellationTokenSource(); response = await _audioDownloader.DownloadAsync(downloadRequest, _cancellationTokenSource.Token); downloadRequest.Directory = downloadDirectory; if (response.Finished) { if (_config.Get <bool>(ConfigurationKeys.DeleteVideoAfterMP3Conversion)) { var videosDirectory = _config[ConfigurationKeys.VideoDownloadDirectory]; Directory .GetFiles(videosDirectory, $"{response.Data.Title}.*", SearchOption.TopDirectoryOnly) .ForEach(file => File.Delete(file)); } _windowService.ChangePage <AudioSplitDefinitionPageViewModel>(response); break; } else if (response.UnfinishedReason != MediaDownloadResponse.RequestCancelled) { errors.Add(_localizer[response.UnfinishedReason]); } else { break; } } if (!response.Finished && errors.IsNotNullOrEmpty()) { ShowErrorInInfoBox(errors.Join(Environment.NewLine)); } IsDownloading = false; }