/// <summary> /// Calls the server to get updated status of the long-running operation. /// </summary> /// <param name="async">When <c>true</c>, the method will be executed asynchronously; otherwise, it will execute synchronously.</param> /// <param name="cancellationToken">A <see cref="CancellationToken"/> used for the service call.</param> /// <returns>The HTTP response received from the server.</returns> async ValueTask <OperationState <AsyncPageable <DocumentStatusResult> > > IOperation <AsyncPageable <DocumentStatusResult> > .UpdateStateAsync(bool async, CancellationToken cancellationToken) { var update = async ? await _serviceClient.GetTranslationStatusAsync(new Guid(Id), cancellationToken).ConfigureAwait(false) : _serviceClient.GetTranslationStatus(new Guid(Id), cancellationToken); _createdOn = update.Value.CreatedOn; _lastModified = update.Value.LastModified; _status = update.Value.Status; _documentsTotal = update.Value.DocumentsTotal; _documentsFailed = update.Value.DocumentsFailed; _documentsInProgress = update.Value.DocumentsInProgress; _documentsSucceeded = update.Value.DocumentsSucceeded; _documentsNotStarted = update.Value.DocumentsNotStarted; _documentsCanceled = update.Value.DocumentsCanceled; Response rawResponse = update.GetRawResponse(); if (update.Value.Status == DocumentTranslationStatus.Succeeded || update.Value.Status == DocumentTranslationStatus.Failed) { return(OperationState <AsyncPageable <DocumentStatusResult> > .Success(rawResponse, CreateOperationValueAsync(CancellationToken.None))); } else if (update.Value.Status == DocumentTranslationStatus.ValidationFailed) { RequestFailedException requestFailedException = _diagnostics.CreateRequestFailedException(rawResponse, update.Value.Error, CreateAdditionalInformation(update.Value.Error)); return(OperationState <AsyncPageable <DocumentStatusResult> > .Failure(rawResponse, requestFailedException)); } return(OperationState <AsyncPageable <DocumentStatusResult> > .Pending(rawResponse)); }
internal TranslationStatusResult(string id, DateTimeOffset createdOn, DateTimeOffset lastModified, DocumentTranslationStatus status, DocumentTranslationError?error, StatusSummary summary) { Id = id; CreatedOn = createdOn; LastModified = lastModified; Status = status; Error = error; Summary = summary; }
internal DocumentStatusResult(Uri translatedDocumentUri, Uri sourceDocumentUri, DateTimeOffset createdOn, DateTimeOffset lastModified, DocumentTranslationStatus status, string translatedToLanguageCode, JsonElement error, float progress, string id, long charactersCharged) { TranslatedDocumentUri = translatedDocumentUri; SourceDocumentUri = sourceDocumentUri; CreatedOn = createdOn; LastModified = lastModified; Status = status; TranslatedToLanguageCode = translatedToLanguageCode; _error = error; Progress = progress; Id = id; CharactersCharged = charactersCharged; }
/// <summary> /// Initializes a new instance of <see cref="Document.DocumentStatusResult"/> for mocking purposes. /// </summary> /// <param name="id">Sets the <see cref="DocumentStatusResult.Id"/> property.</param> /// <param name="sourceDocumentUri">Sets the <see cref="DocumentStatusResult.SourceDocumentUri"/> property.</param> /// <param name="translatedDocumentUri">Sets the <see cref="DocumentStatusResult.TranslatedDocumentUri"/> property.</param> /// <param name="createdOn">Sets the <see cref="DocumentStatusResult.CreatedOn"/> property.</param> /// <param name="lastModified">Sets the <see cref="DocumentStatusResult.LastModified"/> property.</param> /// <param name="status">Sets the <see cref="DocumentStatusResult.Status"/> property.</param> /// <param name="translatedTo">Sets the <see cref="DocumentStatusResult.TranslatedToLanguageCode"/> property.</param> /// <param name="progress">Sets the <see cref="DocumentStatusResult.Progress"/> property.</param> /// <param name="charactersCharged">Sets the <see cref="DocumentStatusResult.CharactersCharged"/> property.</param> /// <returns>A new instance of <see cref="Document.DocumentStatusResult"/> for mocking purposes.</returns> public static DocumentStatusResult DocumentStatusResult( string id, Uri sourceDocumentUri, Uri translatedDocumentUri, DateTimeOffset createdOn, DateTimeOffset lastModified, DocumentTranslationStatus status, string translatedTo, float progress, long charactersCharged ) { return(new DocumentStatusResult(translatedDocumentUri, sourceDocumentUri, createdOn, lastModified, status, translatedTo, default, progress, id, charactersCharged));
/// <summary> /// Calls the server to get updated status of the long-running operation. /// </summary> /// <param name="async">When <c>true</c>, the method will be executed asynchronously; otherwise, it will execute synchronously.</param> /// <param name="cancellationToken">A <see cref="CancellationToken"/> used for the service call.</param> /// <returns>The HTTP response received from the server.</returns> private async ValueTask <Response> UpdateStatusAsync(bool async, CancellationToken cancellationToken) { if (!_hasCompleted) { using DiagnosticScope scope = _diagnostics.CreateScope($"{nameof(DocumentTranslationOperation)}.{nameof(UpdateStatus)}"); scope.Start(); try { var update = async ? await _serviceClient.GetTranslationStatusAsync(new Guid(Id), cancellationToken).ConfigureAwait(false) : _serviceClient.GetTranslationStatus(new Guid(Id), cancellationToken); _response = update.GetRawResponse(); _retryAfterHeaderValue = update.Headers.RetryAfter; _createdOn = update.Value.CreatedOn; _lastModified = update.Value.LastModified; _status = update.Value.Status; _documentsTotal = update.Value.DocumentsTotal; _documentsFailed = update.Value.DocumentsFailed; _documentsInProgress = update.Value.DocumentsInProgress; _documentsSucceeded = update.Value.DocumentsSucceeded; _documentsNotStarted = update.Value.DocumentsNotStarted; _documentsCanceled = update.Value.DocumentsCanceled; if (update.Value.Status == DocumentTranslationStatus.Succeeded || update.Value.Status == DocumentTranslationStatus.Canceled || update.Value.Status == DocumentTranslationStatus.Failed) { _hasCompleted = true; _hasValue = true; } else if (update.Value.Status == DocumentTranslationStatus.ValidationFailed) { DocumentTranslationError error = (DocumentTranslationError)update.Value.Error; _requestFailedException = _diagnostics.CreateRequestFailedException(_response, error.Message, error.ErrorCode.ToString(), CreateAdditionalInformation(error)); _hasCompleted = true; throw _requestFailedException; } } catch (Exception e) { scope.Failed(e); throw; } } return(GetRawResponse()); }
internal static TranslationStatus DeserializeTranslationStatus(JsonElement element) { string id = default; DateTimeOffset createdDateTimeUtc = default; DateTimeOffset lastActionDateTimeUtc = default; DocumentTranslationStatus status = default; Optional <DocumentTranslationError> error = default; StatusSummary summary = default; foreach (var property in element.EnumerateObject()) { if (property.NameEquals("id")) { id = property.Value.GetString(); continue; } if (property.NameEquals("createdDateTimeUtc")) { createdDateTimeUtc = property.Value.GetDateTimeOffset("O"); continue; } if (property.NameEquals("lastActionDateTimeUtc")) { lastActionDateTimeUtc = property.Value.GetDateTimeOffset("O"); continue; } if (property.NameEquals("status")) { status = new DocumentTranslationStatus(property.Value.GetString()); continue; } if (property.NameEquals("error")) { if (property.Value.ValueKind == JsonValueKind.Null) { property.ThrowNonNullablePropertyIsNull(); continue; } error = DocumentTranslationError.DeserializeDocumentTranslationError(property.Value); continue; } if (property.NameEquals("summary")) { summary = StatusSummary.DeserializeStatusSummary(property.Value); continue; } } return(new TranslationStatus(id, createdDateTimeUtc, lastActionDateTimeUtc, status, Optional.ToNullable(error), summary)); }
internal TranslationStatusResult(string id, DateTimeOffset createdOn, DateTimeOffset lastModified, DocumentTranslationStatus status, StatusSummary summary) { if (id == null) { throw new ArgumentNullException(nameof(id)); } if (summary == null) { throw new ArgumentNullException(nameof(summary)); } Id = id; CreatedOn = createdOn; LastModified = lastModified; Status = status; Summary = summary; }
internal static TranslationStatusResult DeserializeTranslationStatusResult(JsonElement element) { string id = default; DateTimeOffset createdDateTimeUtc = default; DateTimeOffset lastActionDateTimeUtc = default; DocumentTranslationStatus status = default; Optional <JsonElement> error = default; StatusSummary summary = default; foreach (var property in element.EnumerateObject()) { if (property.NameEquals("id")) { id = property.Value.GetString(); continue; } if (property.NameEquals("createdDateTimeUtc")) { createdDateTimeUtc = property.Value.GetDateTimeOffset("O"); continue; } if (property.NameEquals("lastActionDateTimeUtc")) { lastActionDateTimeUtc = property.Value.GetDateTimeOffset("O"); continue; } if (property.NameEquals("status")) { status = new DocumentTranslationStatus(property.Value.GetString()); continue; } if (property.NameEquals("error")) { error = property.Value.Clone(); continue; } if (property.NameEquals("summary")) { summary = StatusSummary.DeserializeStatusSummary(property.Value); continue; } } return(new TranslationStatusResult(id, createdDateTimeUtc, lastActionDateTimeUtc, status, error, summary)); }
internal DocumentStatusResult(Uri sourceDocumentUri, DateTimeOffset createdOn, DateTimeOffset lastModified, DocumentTranslationStatus status, string translatedToLanguageCode, float progress, string id) { if (sourceDocumentUri == null) { throw new ArgumentNullException(nameof(sourceDocumentUri)); } if (translatedToLanguageCode == null) { throw new ArgumentNullException(nameof(translatedToLanguageCode)); } if (id == null) { throw new ArgumentNullException(nameof(id)); } SourceDocumentUri = sourceDocumentUri; CreatedOn = createdOn; LastModified = lastModified; Status = status; TranslatedToLanguageCode = translatedToLanguageCode; Progress = progress; Id = id; }
public static DocumentStatus DocumentStatus(Uri translatedDocumentUri = default, Uri sourceDocumentUri = default, DateTimeOffset createdOn = default, DateTimeOffset lastModified = default, DocumentTranslationStatus status = default, string translatedTo = default, DocumentTranslationError error = default, float progress = default, string id = default, long charactersCharged = default) { return(new DocumentStatus(translatedDocumentUri, sourceDocumentUri, createdOn, lastModified, status, translatedTo, error, progress, id, charactersCharged)); }
internal static DocumentStatusResult DeserializeDocumentStatusResult(JsonElement element) { Optional <Uri> path = default; Uri sourcePath = default; DateTimeOffset createdDateTimeUtc = default; DateTimeOffset lastActionDateTimeUtc = default; DocumentTranslationStatus status = default; string to = default; Optional <DocumentTranslationError> error = default; float progress = default; string id = default; Optional <long> characterCharged = default; foreach (var property in element.EnumerateObject()) { if (property.NameEquals("path")) { if (property.Value.ValueKind == JsonValueKind.Null) { property.ThrowNonNullablePropertyIsNull(); continue; } path = new Uri(property.Value.GetString()); continue; } if (property.NameEquals("sourcePath")) { sourcePath = new Uri(property.Value.GetString()); continue; } if (property.NameEquals("createdDateTimeUtc")) { createdDateTimeUtc = property.Value.GetDateTimeOffset("O"); continue; } if (property.NameEquals("lastActionDateTimeUtc")) { lastActionDateTimeUtc = property.Value.GetDateTimeOffset("O"); continue; } if (property.NameEquals("status")) { status = new DocumentTranslationStatus(property.Value.GetString()); continue; } if (property.NameEquals("to")) { to = property.Value.GetString(); continue; } if (property.NameEquals("error")) { if (property.Value.ValueKind == JsonValueKind.Null) { property.ThrowNonNullablePropertyIsNull(); continue; } error = DocumentTranslationError.DeserializeDocumentTranslationError(property.Value); continue; } if (property.NameEquals("progress")) { progress = property.Value.GetSingle(); continue; } if (property.NameEquals("id")) { id = property.Value.GetString(); continue; } if (property.NameEquals("characterCharged")) { if (property.Value.ValueKind == JsonValueKind.Null) { property.ThrowNonNullablePropertyIsNull(); continue; } characterCharged = property.Value.GetInt64(); continue; } } return(new DocumentStatusResult(path.Value, sourcePath, createdDateTimeUtc, lastActionDateTimeUtc, status, to, error, progress, id, characterCharged)); }