Beispiel #1
0
        public async Task UploadAsync(string fileName, string userId, Stream stream)
        {
            lock (_uploadLockObj)
            {
                if (_uploadTask == null)
                {
                    _uploadTask = Task.Run(async() => await _fileClient.UploadAsync(fileName, userId, stream), _cts.Token);
                }
            }

            await _uploadTask;
        }
Beispiel #2
0
        public async Task ExecuteAsync(UploadDocumentCommand command, CancellationToken cancellationToken = default)
        {
            if (command == null)
            {
                throw new ArgumentNullException(nameof(command));
            }

            if (cancellationToken.IsCancellationRequested)
            {
                _logger.LogInformation($"{nameof(UploadDocumentCommandHandler)}.{nameof(ExecuteAsync)} was cancelled before execution");
                cancellationToken.ThrowIfCancellationRequested();
            }

            using (var stream = command.File.OpenReadStream())
            {
                await _fileClient.UploadAsync(
                    fileName : $"{command.Subject}{Path.GetExtension(command.File.FileName)}",
                    userId : command.Actor,
                    stream : stream,
                    cancellationToken : cancellationToken
                    );
            }

            var aggregate = _aggregateFactory.FromHistory <Document, DocumentState>(Enumerable.Empty <IEvent>());

            if (aggregate == null)
            {
                throw new ArgumentNullException(nameof(aggregate));
            }

            aggregate.Upload(
                subject: command.Subject,
                user: command.Actor,
                translationType: command.TranslationType,
                fileName: command.File.FileName,
                translationSubject: command.TranslationSubject
                );

            await _aggregateRepository.SaveAsync(aggregate, command, 0, cancellationToken);
        }
        public async Task StartAsync(TranslationRequest request)
        {
            int version = request.Version + 1;

            var fileResult = await _fileClient.DownloadAsync(
                fileName : $"{request.CorrelationId}{Path.GetExtension(request.FileName)}",
                userId : request.UserId
                );

            string text;

            using (var fileStream = await fileResult.OpenStreamAsync())
                using (var textExtractor = TextExtractor.Open(fileStream, fileResult.ContentType))
                {
                    text = await textExtractor.ExtractAsync();
                }

            var textChunks = text.ChunkWithDelimeters(5000, '.', '!', '?', ')', '"', '}', ']').ToArray();

            await _eventPublisher.PublishAsync(new TranslationStarted(
                                                   aggregateId : request.AggregateId,
                                                   version : version,
                                                   correlationId : request.CorrelationId,
                                                   causationId : request.CausationId,
                                                   characterCount : textChunks.Sum(tc => tc.Length),
                                                   userId : request.UserId
                                                   ));

            try
            {
                for (int i = 0; i < textChunks.Count(); i++)
                {
                    version++;
                    await _eventPublisher.PublishAsync(new TranslationCharactersProcessed(
                                                           aggregateId : request.AggregateId,
                                                           version : version,
                                                           correlationId : request.CorrelationId,
                                                           causationId : request.CausationId,
                                                           charactersProcessed : textChunks[i].Length,
                                                           userId : request.UserId
                                                           ));
                }

                using (var stream = new MemoryStream())
                    using (TextWriter tw = new StreamWriter(stream))
                    {
                        await tw.WriteAsync("test");

                        await tw.FlushAsync();

                        stream.Position = 0;
                        await _fileClient.UploadAsync($"{request.AggregateId}.mp3", request.UserId, stream);

                        await _eventPublisher.PublishAsync(new TranslationSucceded(
                                                               aggregateId : request.AggregateId,
                                                               version : ++version,
                                                               correlationId : request.CorrelationId,
                                                               causationId : request.CausationId,
                                                               userId : request.UserId
                                                               ));
                    }
            }
            catch (Exception e)
            {
                await _eventPublisher.PublishAsync(new TranslationFailed(
                                                       aggregateId : request.AggregateId,
                                                       version : ++version,
                                                       correlationId : request.CorrelationId,
                                                       causationId : request.CausationId,
                                                       error : e.Message,
                                                       userId : request.UserId
                                                       ));
            }
        }
        public async Task StartAsync(TranslationRequest request)
        {
            int version = request.Version + 1;

            var fileResult = await _fileClient.DownloadAsync(
                fileName : $"{request.CorrelationId}{Path.GetExtension(request.FileName)}",
                userId : request.UserId
                );

            string text;

            using (var fileStream = await fileResult.OpenStreamAsync())
                using (var textExtractor = TextExtractor.Open(fileStream, fileResult.ContentType))
                {
                    text = await textExtractor.ExtractAsync();
                }

            var textChunks = text.ChunkWithDelimeters(5000, '.', '!', '?', ')', '"', '}', ']');

            await _eventPublisher.PublishAsync(new TranslationStarted(
                                                   aggregateId : request.AggregateId,
                                                   version : version,
                                                   correlationId : request.CorrelationId,
                                                   causationId : request.CausationId,
                                                   characterCount : textChunks.Sum(tc => tc.Length),
                                                   userId : request.UserId
                                                   ));

            try
            {
                var result = await _speechSynthesizer.TranslateTextAsync(new GoogleSpeechRequest(
                                                                             voiceSelection : new VoiceSelectionParams
                {
                    Name = request.TranslationSubject
                },
                                                                             audioConfig : new AudioConfig
                {
                    AudioEncoding = AudioEncoding.Mp3
                },
                                                                             content : textChunks,
                                                                             callback : async length =>
                {
                    Interlocked.Increment(ref version);
                    await _semaphoreSlim.WaitAsync();

                    try
                    {
                        await _eventPublisher.PublishAsync(new TranslationCharactersProcessed(
                                                               aggregateId: request.AggregateId,
                                                               version: version,
                                                               correlationId: request.CorrelationId,
                                                               causationId: request.CausationId,
                                                               charactersProcessed: length,
                                                               userId: request.UserId
                                                               ));
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                    finally
                    {
                        _semaphoreSlim.Release();
                    }
                }
                                                                             ));


                using (var stream = await result.OpenStreamAsync())
                {
                    await _fileClient.UploadAsync($"{request.AggregateId}.mp3", request.UserId, stream);

                    await _eventPublisher.PublishAsync(new TranslationSucceded(
                                                           aggregateId : request.AggregateId,
                                                           version : ++version,
                                                           correlationId : request.CorrelationId,
                                                           causationId : request.CausationId,
                                                           userId : request.UserId
                                                           ));
                }
            }
            catch (Exception e)
            {
                await _eventPublisher.PublishAsync(new TranslationFailed(
                                                       aggregateId : request.AggregateId,
                                                       version : ++version,
                                                       correlationId : request.CorrelationId,
                                                       causationId : request.CausationId,
                                                       error : e.Message,
                                                       userId : request.UserId
                                                       ));
            }
        }
Beispiel #5
0
        public async Task StartAsync(TranslationRequest request)
        {
            int version = request.Version + 1;

            var fileResult = await _fileClient.DownloadAsync(
                fileName : $"{request.CorrelationId.ToString()}{Path.GetExtension(request.FileName)}",
                userId : request.UserId
                );

            string text;

            using (var fileStream = await fileResult.OpenStreamAsync())
                using (var textExtractor = TextExtractor.Open(fileStream, fileResult.ContentType))
                {
                    text = await textExtractor.ExtractAsync();
                }

            var textChunks = text.ChunkWithDelimeters(100000, '.', '!', '?', ')', '"', '}', ']');

            await _eventPublisher.PublishAsync(new TranslationStarted(
                                                   aggregateId : request.AggregateId,
                                                   version : version,
                                                   correlationId : request.CorrelationId,
                                                   causationId : request.CausationId,
                                                   characterCount : text.Length,
                                                   userId : request.UserId
                                                   ));

            try
            {
                var result = await _speechSynthesizer.TranslateTextAsync(new AWSSpeechRequest {
                    OutputFormat = "",
                    Content      = textChunks,
                    VoiceId      = request.TranslationSubject,
                    CallBack     = async length =>
                    {
                        Interlocked.Increment(ref version);
                        await _semaphoreSlim.WaitAsync();

                        try
                        {
                            await _eventPublisher.PublishAsync(new TranslationCharactersProcessed(
                                                                   aggregateId: request.AggregateId,
                                                                   version: version,
                                                                   correlationId: request.CorrelationId,
                                                                   causationId: request.CausationId,
                                                                   charactersProcessed: length,
                                                                   userId: request.UserId
                                                                   ));
                        }
                        catch (Exception)
                        {
                            throw;
                        }
                        finally
                        {
                            _semaphoreSlim.Release();
                        }
                    }
                });;


                using (var stream = await result.OpenStreamAsync())
                {
                    await _fileClient.UploadAsync($"{request.AggregateId}.mp3", request.UserId, stream);

                    await _eventPublisher.PublishAsync(new TranslationSucceded(
                                                           aggregateId : request.AggregateId,
                                                           version : version + 1,
                                                           correlationId : request.CorrelationId,
                                                           causationId : request.CausationId,
                                                           userId : request.UserId
                                                           ));
                }
            }
            catch (Exception e)
            {
                await _eventPublisher.PublishAsync(new TranslationFailed(
                                                       aggregateId : request.AggregateId,
                                                       version : version + 1,
                                                       correlationId : request.CorrelationId,
                                                       causationId : request.CausationId,
                                                       error : e.Message,
                                                       userId : request.UserId
                                                       ));
            }
        }