33 lines
1.2 KiB
C#
33 lines
1.2 KiB
C#
|
namespace QuestReader.Services;
|
||
|
|
||
|
public class FileDownloader
|
||
|
{
|
||
|
public static async Task DownloadList(string basePath, Uri baseAssetsUrl, IEnumerable<string> files)
|
||
|
{
|
||
|
if (!Directory.Exists(Path.Join(basePath, "assets")))
|
||
|
Directory.CreateDirectory(Path.Join(basePath, "assets"));
|
||
|
|
||
|
var downloadTasks = new List<Task>();
|
||
|
|
||
|
using (var client = new HttpClient()) {
|
||
|
client.BaseAddress = baseAssetsUrl;
|
||
|
Console.Out.WriteLine($"Downloading missing files...");
|
||
|
|
||
|
await Task.WhenAll(
|
||
|
files
|
||
|
.Where(file => !File.Exists(Path.Join(basePath, "assets", file)))
|
||
|
.Select(file => client.GetStreamAsync(file).ContinueWith(async (stream) => {
|
||
|
Console.Out.WriteLine($"Downloading {file}");
|
||
|
using var fileWrite = File.OpenWrite(Path.Join(basePath, "assets", file));
|
||
|
await (await stream).CopyToAsync(fileWrite);
|
||
|
stream.Dispose();
|
||
|
fileWrite.Dispose();
|
||
|
})
|
||
|
)
|
||
|
.ToList()
|
||
|
);
|
||
|
Console.Out.WriteLine($"All files done");
|
||
|
}
|
||
|
}
|
||
|
}
|