コード例 #1
0
        public async Task ExportAsync(ISyncService sync, SyncOptions options, ISession session)
        {
            var downloadPipeline = new DownloadPipeline(session, log, sync.FileSystem)
            {
                FilePathProvider = asset => asset.Id.GetBlobPath()
            };

            try
            {
                var assets     = new List <AssetModel>();
                var assetBatch = 0;

                async Task SaveAsync()
                {
                    var model = new AssetsModel
                    {
                        Assets = assets
                    };

                    await log.DoSafeAsync($"Exporting Assets ({assetBatch})", async() =>
                    {
                        await sync.WriteWithSchema(new FilePath("assets", $"{assetBatch}.json"), model, Ref);
                    });
                }

                await session.Assets.GetAllAsync(session.App, async asset =>
                {
                    var model = asset.ToModel();

                    model.FolderPath = await sync.Folders.GetPathAsync(asset.ParentId);

                    assets.Add(model);

                    if (assets.Count > 50)
                    {
                        await SaveAsync();

                        assets.Clear();
                        assetBatch++;
                    }

                    await downloadPipeline.DownloadAsync(asset);
                });

                if (assets.Count > 0)
                {
                    await SaveAsync();
                }
            }
            finally
            {
                await downloadPipeline.CompleteAsync();
            }
        }
コード例 #2
0
        public async Task ExportAsync(DirectoryInfo directoryInfo, JsonHelper jsonHelper, SyncOptions options, ISession session)
        {
            var downloadPipeline = new DownloadPipeline(session, log, directoryInfo);

            var assets     = new List <AssetModel>();
            var assetBatch = 0;

            async Task SaveAsync()
            {
                var model = new AssetsModel
                {
                    Assets = assets
                };

                await log.DoSafeAsync($"Exporting Assets ({assetBatch})", async() =>
                {
                    await jsonHelper.WriteWithSchema(directoryInfo, $"assets/{assetBatch}.json", model, Ref);
                });
            }

            var tree = new FolderTree(session);

            await session.Assets.GetAllAsync(session.App, async asset =>
            {
                assets.Add(await asset.ToModelAsync(tree));

                if (assets.Count > 50)
                {
                    await SaveAsync();

                    assets.Clear();
                    assetBatch++;
                }

                await downloadPipeline.DownloadAsync(asset);
            });

            if (assets.Count > 0)
            {
                await SaveAsync();
            }

            await downloadPipeline.CompleteAsync();
        }
コード例 #3
0
        public async Task ExportAsync(ISyncService sync, SyncOptions options, ISession session)
        {
            var downloadPipeline = new DownloadPipeline(session, log, sync.FileSystem);

            var assets     = new List <AssetModel>();
            var assetBatch = 0;

            async Task SaveAsync()
            {
                var model = new AssetsModel
                {
                    Assets = assets
                };

                await log.DoSafeAsync($"Exporting Assets ({assetBatch})", async() =>
                {
                    await sync.WriteWithSchema(new FilePath("assets", $"{assetBatch}.json"), model, Ref);
                });
            }

            var tree = new FolderTree(session);

            await session.Assets.GetAllAsync(session.App, async asset =>
            {
                assets.Add(await asset.ToModelAsync(tree));

                if (assets.Count > 50)
                {
                    await SaveAsync();

                    assets.Clear();
                    assetBatch++;
                }

                await downloadPipeline.DownloadAsync(asset);
            });

            if (assets.Count > 0)
            {
                await SaveAsync();
            }

            await downloadPipeline.CompleteAsync();
        }
コード例 #4
0
        public async Task GenerateSchemaAsync(ISyncService sync)
        {
            await sync.WriteJsonSchemaAsync <AssetsModel>(new FilePath("assets.json"));

            var sample = new AssetsModel
            {
                Assets = new List <AssetModel>
                {
                    new AssetModel
                    {
                        Id       = Guid.NewGuid().ToString(),
                        FileName = "my.file.txt",
                        FileHash = "<Optional Hash>",
                        MimeType = "plain/text"
                    }
                }
            };

            await sync.WriteWithSchema(new FilePath("assets", "__asset.json"), sample, Ref);
        }
コード例 #5
0
        public async Task GenerateSchemaAsync(DirectoryInfo directoryInfo, JsonHelper jsonHelper)
        {
            await jsonHelper.WriteJsonSchemaAsync <AssetsModel>(directoryInfo, "assets.json");

            var sample = new AssetsModel
            {
                Assets = new List <AssetModel>
                {
                    new AssetModel
                    {
                        Id       = Guid.NewGuid().ToString(),
                        FileName = "my.file.txt",
                        FileHash = "<Optional Hash>",
                        MimeType = "plain/text"
                    }
                }
            };

            await jsonHelper.WriteWithSchema(directoryInfo, "assets/__asset.json", sample, Ref);
        }