static Document ReadDocument(DatabaseApi couchApi, TextReader reader) { using (reader) return new Document(reader) { DatabaseApiReference = new DatabaseApiReference(couchApi) }; }
private SaveDocumentTask(DatabaseApi parent, Document document, bool overwriteConcurrentUpdates) { this.parent = parent; this.document = document; if (overwriteConcurrentUpdates) { conflictAction = ReturnDefault; completionSource = new TaskCompletionSource<DocumentInfo>(); } else conflictAction = ThrowConflict; }
static async Task<Document> ReadMultipart(DatabaseApi couchApi, HttpContent content) { var multipart = (await content.ReadAsMultipartAsync()).ToArray(); var jsonPart = multipart.FirstOrDefault( part => part.Headers.ContentType != null && part.Headers.ContentType.MediaType == MediaType.Json); if (jsonPart == null) return null; var document = ReadDocument( couchApi, await jsonPart.ReadAsUtf8TextReaderAsync()); PrefillAttachmentDataGetters(multipart, document); return document; }
private SaveDocumentTask(DatabaseApi parent, Document document, bool overwriteConcurrentUpdates) { this.parent = parent; this.document = document; if (overwriteConcurrentUpdates) { conflictAction = ReturnDefault; completionSource = new TaskCompletionSource <DocumentInfo>(); } else { conflictAction = ThrowConflict; } }
static async Task <Document> ReadMultipart(DatabaseApi couchApi, HttpContent content) { var multipart = (await content.ReadAsMultipartAsync()).ToArray(); var jsonPart = multipart.FirstOrDefault( part => part.Headers.ContentType != null && part.Headers.ContentType.MediaType == MediaType.Json); if (jsonPart == null) { return(null); } var document = ReadDocument( couchApi, await jsonPart.ReadAsUtf8TextReaderAsync()); PrefillAttachmentDataGetters(multipart, document); return(document); }
public static async Task <Document> Start( DbUriConstructor uriConstructor, DatabaseApi databaseApi, CouchApi couchApi, string documentId, string revision, AdditionalDocumentProperty additionalProperties) { var documentUri = uriConstructor.GetFullDocumentUri(documentId, revision, additionalProperties); var request = new HttpRequestMessage(HttpMethod.Get, documentUri); var response = await couchApi.RequestCouchDb(request); if (!response.IsSuccessStatusCode) { var error = new CouchError(couchApi.Settings.Serializer, response); error.ThrowDatabaseMissingExceptionIfNedded(uriConstructor); if (response.StatusCode == HttpStatusCode.NotFound) { return(null); } error.ThrowCouchCommunicationException(); } var content = response.Content; var mediaType = content.Headers.ContentType != null? content.Headers.ContentType.MediaType: "<unknown>"; switch (mediaType) { case MediaType.Json: return(ReadDocument( databaseApi, await content.ReadAsUtf8TextReaderAsync() )); case MediaType.Multipart: return(await ReadMultipart(databaseApi, content)); default: throw new CouchCommunicationException( "Unexpected media type response recived requesting CouchDB document: {0}", mediaType); } }
public static async Task<Document> Start( DbUriConstructor uriConstructor, DatabaseApi databaseApi, CouchApi couchApi, string documentId, string revision, AdditionalDocumentProperty additionalProperties) { var documentUri = uriConstructor.GetFullDocumentUri(documentId, revision, additionalProperties); var request = new HttpRequestMessage(HttpMethod.Get, documentUri); var response = await couchApi.RequestCouchDb(request); if (!response.IsSuccessStatusCode) { var error = new CouchError(couchApi.Settings.Serializer, response); error.ThrowDatabaseMissingExceptionIfNedded(uriConstructor); if (response.StatusCode == HttpStatusCode.NotFound) return null; error.ThrowCouchCommunicationException(); } var content = response.Content; var mediaType = content.Headers.ContentType != null? content.Headers.ContentType.MediaType: "<unknown>"; switch (mediaType) { case MediaType.Json: return ReadDocument( databaseApi, await content.ReadAsUtf8TextReaderAsync() ); case MediaType.Multipart: return await ReadMultipart(databaseApi, content); default: throw new CouchCommunicationException( "Unexpected media type response recived requesting CouchDB document: {0}", mediaType); } }
public static Task <DocumentInfo> Start(DatabaseApi parent, Document document, bool overwriteConcurrentUpdates) { var saver = new SaveDocumentTask(parent, document, overwriteConcurrentUpdates); return(overwriteConcurrentUpdates ? saver.SaveOverriding() : saver.Save()); }
public static Task<DocumentInfo> Start(DatabaseApi parent, Document document, bool overwriteConcurrentUpdates) { var saver = new SaveDocumentTask(parent, document, overwriteConcurrentUpdates); return overwriteConcurrentUpdates ? saver.SaveOverriding() : saver.Save(); }