Skip to content

Commit

Permalink
fix(DownloadAssetsAsync): support download all files within a folder
Browse files Browse the repository at this point in the history
  • Loading branch information
MingboPeng committed Jan 24, 2024
1 parent c3d62d3 commit 7666c2a
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 4 deletions.
17 changes: 16 additions & 1 deletion src/PollinationSDK.Tests/Api/UtilityTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,22 @@ public void TestGetLatestVersion()
Assert.IsTrue(version != null);
}


[Test]
public void TestDownloadFolder()
{
var api = new ArtifactsApi();
// var relativeFolderPath = new List<string> { "testSubDir" };
var relativeFolderPath = null;
var projOwner = "ladybug-tools";
var projName = "demo-project";


var pathes = Helper.DownloadArtifactFolderAsync(api, projOwner, projName, relativeFolderPath, "").GetAwaiter().GetResult();
Assert.IsTrue(pathes != null);
Assert.IsTrue(pathes.Count() > 20);
}



//[Test]
//public void DownloadRecipeTest()
Expand Down
42 changes: 39 additions & 3 deletions src/PollinationSDK/Helper/Helper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -294,16 +294,26 @@ public static async Task<List<CloudReferenceAsset>> DownloadAssetsAsync(string p
var projOwner = proj[0];
var projName = proj[1];

// check folder assets
var gp = assets.GroupBy(_ => Path.HasExtension(_.RelativePath));
var fileAssets = gp.FirstOrDefault(_ => _.Key == true)?.Select(_ => _)?.ToList() ?? new List<CloudReferenceAsset>();
var folderAssets = gp.FirstOrDefault(_ => _.Key == false)?.Select(_ => _.RelativePath)?.ToList();
if (folderAssets != null && folderAssets.Any())
{
var allFiles = await GetAllFilesAsync(api, projOwner, projName, folderAssets, saveAsDir);
var cloudRefs = allFiles.Select(_ => new CloudReferenceAsset(projOwner, projName, _.Key));
fileAssets.AddRange(cloudRefs);
}

// check if cached
if (useCached)
{
assets = CheckCached(assets, dir).ToList();
fileAssets = CheckCached(fileAssets, dir).ToList();
}

var total = assets.Count();
var total = fileAssets.Count();
var completed = 0;
foreach (var asset in assets)
foreach (var asset in fileAssets)
{
try
{
Expand Down Expand Up @@ -344,6 +354,32 @@ public static async Task<List<CloudReferenceAsset>> DownloadAssetsAsync(string p

}

/// <summary>
/// List all FileMeta from all sub-folders if exists
/// </summary>
/// <param name="api"></param>
/// <param name="projOwner"></param>
/// <param name="projName"></param>
/// <param name="relativeFolderPaths"></param>
/// <param name="saveAsDir"></param>
/// <param name="reportProgressAction"></param>
/// <param name="cancelToken"></param>
/// <returns></returns>
public static async Task<List<FileMeta>> GetAllFilesAsync(ArtifactsApi api, string projOwner, string projName, List<string> relativeFolderPaths, string saveAsDir)
{
var fs = api.ListArtifacts(projOwner, projName, relativeFolderPaths, null, 500).Resources;
var gp = fs.GroupBy(_ => _.FileType == "folder");
var files = gp.FirstOrDefault(_ => _.Key == false)?.Select(_ => _)?.ToList() ?? new List<FileMeta>();
var folders = gp.FirstOrDefault(_=>_.Key == true)?.Select(_ => _.Key)?.ToList() ?? new List<string>();
if (folders.Any())
{
var subItems = await GetAllFilesAsync(api, projOwner, projName, folders, saveAsDir);
files.AddRange(subItems);
}
return files;

}


/// <summary>
///
Expand Down

0 comments on commit 7666c2a

Please sign in to comment.