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