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"));
        }
Пример #2
0
 public ApiResult <Stream> Execute(MediaDownloadRequest request)
 {
     return(Download("/media/download", request));
 }
Пример #3
0
        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;
        }