示例#1
0
            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");
                }
            }
示例#2
0
 private static Task <string?> MapFoldersAsync(string?folderId, FolderTree folders, bool fromId)
 {
     if (fromId)
     {
         return(folders.GetPathAsync(folderId));
     }
     else
     {
         return(folders.GetIdAsync(folderId));
     }
 }
示例#3
0
        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();
        }