private async Task MoveAsync(IStoreCollection sourceCollection, IStoreItem moveItem, IStoreCollection destinationCollection, string destinationName, bool overwrite, IHttpContext httpContext, Uri baseUri, UriResultCollection errors) { // Determine the new base URI var subBaseUri = UriHelper.Combine(baseUri, destinationName); // Obtain the actual item if (moveItem is IStoreCollection moveCollection && !moveCollection.SupportsFastMove(destinationCollection, destinationName, overwrite, httpContext)) { // Create a new collection var newCollectionResult = await destinationCollection.CreateCollectionAsync(destinationName, overwrite, httpContext).ConfigureAwait(false); if (newCollectionResult.Result != DavStatusCode.Created && newCollectionResult.Result != DavStatusCode.NoContent) { errors.AddResult(subBaseUri, newCollectionResult.Result); return; } // Move all sub items foreach (var entry in await moveCollection.GetItemsAsync(httpContext).ConfigureAwait(false)) { await MoveAsync(moveCollection, entry, newCollectionResult.Collection, entry.Name, overwrite, httpContext, subBaseUri, errors).ConfigureAwait(false); } // Delete the source collection var deleteResult = await sourceCollection.DeleteItemAsync(moveItem.Name, httpContext).ConfigureAwait(false); if (deleteResult != DavStatusCode.Ok) { errors.AddResult(subBaseUri, newCollectionResult.Result); } }
private async Task MoveAsync(IStoreCollection sourceCollection, string sourceName, IStoreCollection destinationCollection, string destinationName, bool overwrite, IHttpContext httpContext, Uri baseUri, UriResultCollection errors) { // Determine the new base URI var subBaseUri = UriHelper.Combine(baseUri, destinationName); // Obtain the actual item var moveCollection = await sourceCollection.GetItemAsync(sourceName, httpContext).ConfigureAwait(false) as IStoreCollection; if (moveCollection != null) { // Create a new collection var newCollectionResult = await destinationCollection.CreateCollectionAsync(destinationName, overwrite, httpContext); if (newCollectionResult.Result != DavStatusCode.Created && newCollectionResult.Result != DavStatusCode.NoContent) { errors.AddResult(subBaseUri, newCollectionResult.Result); return; } // Move all subitems foreach (var entry in await moveCollection.GetItemsAsync(httpContext).ConfigureAwait(false)) { await MoveAsync(moveCollection, entry.Name, newCollectionResult.Collection, entry.Name, overwrite, httpContext, subBaseUri, errors); } // Delete the source collection var deleteResult = await sourceCollection.DeleteItemAsync(sourceName, httpContext); if (deleteResult != DavStatusCode.Ok) { errors.AddResult(subBaseUri, newCollectionResult.Result); return; } } else { // Items should be moved directly var result = await sourceCollection.MoveItemAsync(sourceName, destinationCollection, destinationName, overwrite, httpContext); if (result.Result != DavStatusCode.Created && result.Result != DavStatusCode.NoContent) { errors.AddResult(subBaseUri, result.Result); return; } } }
private async Task <DavStatusCode> DeleteItemAsync(IStoreCollection collection, string name, IHttpContext httpContext, Uri baseUri, UriResultCollection errors) { // Obtain the actual item var deleteCollection = await collection.GetItemAsync(name, httpContext).ConfigureAwait(false) as IStoreCollection; if (deleteCollection != null) { // Determine the new base URI var subBaseUri = UriHelper.Combine(baseUri, name); // Delete all entries first foreach (var entry in await deleteCollection.GetItemsAsync(httpContext).ConfigureAwait(false)) { await DeleteItemAsync(deleteCollection, entry.Name, httpContext, subBaseUri, errors); } } // Attempt to delete the item return(await collection.DeleteItemAsync(name, httpContext).ConfigureAwait(false)); }
private static async Task <DavStatusCode> DeleteItemAsync(IStoreCollection collection, string name, IHttpContext httpContext) { // Attempt to delete the item return(await collection.DeleteItemAsync(name, httpContext).ConfigureAwait(false)); }
private async Task <DavStatusCode> DeleteItemAsync(IStoreCollection collection, string name, IHttpContext httpContext, Uri baseUri, UriResultCollection errors) { // Attempt to delete the item return(await collection.DeleteItemAsync(name, httpContext).ConfigureAwait(false)); }