public async Task Collect(int episodeId)
        {
            _logger.LogInformation($"Collecting SR episode {episodeId}");
            var storedEpisode = await _storage.GetEpisode(episodeId);

            if (storedEpisode != null)
            {
                _logger.LogInformation($"SR episode {episodeId} was already collected");
                return;
            }

            var episode = await GetSrEpisode(episodeId);

            var fileUrl = GetFileUrl(episode);

            if (fileUrl == null)
            {
                throw new Exception($"SR episode {episodeId} does not have any available broadcast file, can't collect");
            }

            storedEpisode = await GetStoredEpisodeModel(fileUrl, episode);

            var audioStream = await GetOnlyAudioStream(storedEpisode.OriginalAudioUrl);

            if (audioStream == null)
            {
                var transferAudioBlockBlob = await _storageTransfer.TransferBlockBlobAndOverwrite(_cloudBlobContainerName, storedEpisode.AudioBlobIdentifier, storedEpisode.OriginalAudioUrl, GetContentType(storedEpisode.AudioBlobIdentifier));

                storedEpisode.AudioUrl = transferAudioBlockBlob.ToString();
            }
            else
            {
                var uploadedAudioBlockBlob = await _storageTransfer.UploadBlockBlobAndOverwrite(_cloudBlobContainerName, storedEpisode.AudioBlobIdentifier, audioStream, GetContentType(storedEpisode.AudioBlobIdentifier));

                storedEpisode.AudioUrl = uploadedAudioBlockBlob.ToString();
            }

            await _storageTransfer.TransferBlockBlobIfNotExists(_cloudBlobContainerName, storedEpisode.ImageBlobIdentifier, storedEpisode.Episode.ImageUrlTemplate, GetContentType(storedEpisode.ImageBlobIdentifier));

            await _storage.StoreEpisode(episode.Id, storedEpisode);

            _logger.LogInformation($"Collected SR episode {episode.Id}");
        }
        private async Task <(string blobIdentifier, Uri blobUri)?> TransferResultForChannel(SrStoredEpisode storedEpisode, Azure.SpeechBatchClient.Transcription transcription, string channel)
        {
            if (!transcription.ResultsUrls.ContainsKey($"channel_{channel}"))
            {
                return(null);
            }

            var targetBlobPrefix     = storedEpisode.AudioBlobIdentifier + "__Transcription_";
            var targetBlobIdentifier = $"{targetBlobPrefix}{channel}.json";
            var resultsUri           = transcription.ResultsUrls[$"channel_{channel}"];

            var targetBlobUrl = await _storageTransfer.TransferBlockBlobIfNotExists(
                _transcriptionsContainerName,
                targetBlobIdentifier,
                resultsUri
                );

            return(targetBlobIdentifier, targetBlobUrl);
        }