public async Task Export(ImportArguments arguments) { var session = configuration.StartSession(arguments.App); var assets = session.Assets; using (var fs = await FileSystems.CreateAsync(arguments.Path, session.WorkingDirectory)) { var folderTree = new FolderTree(session); var folderNames = new HashSet <string>(); var parentId = await folderTree.GetIdAsync(arguments.TargetFolder); var downloadPipeline = new DownloadPipeline(session, log, fs) { FilePathProviderAsync = async asset => { var assetFolder = await folderTree.GetPathAsync(asset.ParentId); var assetPath = asset.FileName; if (!string.IsNullOrWhiteSpace(assetFolder)) { assetPath = Path.Combine(assetFolder, assetPath); } if (!folderNames.Add(assetPath)) { assetPath = Path.Combine(assetFolder !, $"{asset.Id}_{asset.FileName}"); } return(FilePath.Create(assetPath)); } }; try { await assets.GetAllByQueryAsync(session.App, async asset => { await downloadPipeline.DownloadAsync(asset); }, new AssetQuery { ParentId = parentId }); } finally { await downloadPipeline.CompleteAsync(); } log.WriteLine("> Export completed"); } }
private static Task <string?> MapFoldersAsync(string?folderId, FolderTree folders, bool fromId) { if (fromId) { return(folders.GetPathAsync(folderId)); } else { return(folders.GetIdAsync(folderId)); } }
public async Task Should_query_for_path_once_for_each_subtree() { // * folder1 // * folder2 var folder1 = new AssetFolderDto { Id = Guid.NewGuid().ToString(), FolderName = "folder1" }; var folder2 = new AssetFolderDto { Id = Guid.NewGuid().ToString(), FolderName = "folder2" }; A.CallTo(() => assets.GetAssetFoldersAsync("my-app", folder1.Id, A <AssetFolderScope> ._, A <CancellationToken> ._)) .Returns(new AssetFoldersDto { Items = new List <AssetFolderDto>(), Path = new List <AssetFolderDto> { folder1 } }); A.CallTo(() => assets.GetAssetFoldersAsync("my-app", folder2.Id, A <AssetFolderScope> ._, A <CancellationToken> ._)) .Returns(new AssetFoldersDto { Items = new List <AssetFolderDto>(), Path = new List <AssetFolderDto> { folder2 } }); Assert.Equal("folder1", await sut.GetPathAsync(folder1.Id)); Assert.Equal("folder2", await sut.GetPathAsync(folder2.Id)); A.CallTo(() => assets.GetAssetFoldersAsync("my-app", A <string> ._, A <AssetFolderScope> ._, A <CancellationToken> ._)) .MustHaveHappenedTwiceExactly(); }