public async Task <StoreItemResult> CopyAsync(IStoreCollection destinationCollection, string name, bool overwrite, IHttpContext httpContext) { // Just create the folder itself var result = await destinationCollection.CreateCollectionAsync(name, overwrite, httpContext); return(new StoreItemResult(result.Result, result.Collection)); }
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; } } }