natives unzip

This commit is contained in:
2024-09-29 09:28:24 +05:00
parent 4704f1217a
commit beb701ca40
7 changed files with 55 additions and 16 deletions

View File

@@ -99,7 +99,7 @@ public class AssetsDownloadTaskFactory : INetworkTaskFactory
private async Task Download(NetworkProgressReporter pr, CancellationToken ct)
{
Приложение.Логгер.LogInfo(nameof(Сеть), "started downloading assets");
Приложение.Логгер.LogInfo(nameof(Сеть), $"started downloading assets '{_descriptor.assetIndex.id}'");
ParallelOptions opt = new() { MaxDegreeOfParallelism = ParallelDownloadsN, CancellationToken = ct };
await Parallel.ForEachAsync(_assetsToDownload, opt,
async (a, _ct) =>
@@ -107,6 +107,6 @@ public class AssetsDownloadTaskFactory : INetworkTaskFactory
Приложение.Логгер.LogDebug(nameof(Сеть), $"downloading asset '{a.name}' {a.hash}");
await DownloadFileHTTP(a.url, a.filePath, _ct, pr.AddBytesCount);
});
Приложение.Логгер.LogInfo(nameof(Сеть), "finished downloading assets");
Приложение.Логгер.LogInfo(nameof(Сеть), $"finished downloading assets '{_descriptor.assetIndex.id}'");
}
}

View File

@@ -1,4 +1,5 @@
using System.Security.Cryptography;
using System.IO.Compression;
using System.Security.Cryptography;
using DTLib.Extensions;
using Млаумчерб.Клиент.видимое;
using Млаумчерб.Клиент.классы;
@@ -12,12 +13,14 @@ public class LibrariesDownloadTaskFactory : INetworkTaskFactory
private Libraries _libraries;
private SHA1 _hasher;
private List<Libraries.JarLib> _libsToDownload = new();
private IOPath _nativesDir;
public LibrariesDownloadTaskFactory(VersionDescriptor descriptor, Libraries libraries)
{
_descriptor = descriptor;
_libraries = libraries;
_hasher = SHA1.Create();
_nativesDir = Пути.GetNativeLibrariesDir(descriptor.id);
}
public Task<NetworkTask?> CreateAsync(bool checkHashes)
@@ -35,6 +38,7 @@ public class LibrariesDownloadTaskFactory : INetworkTaskFactory
private bool CheckFiles(bool checkHashes)
{
_libsToDownload.Clear();
bool nativeDirExists = Directory.Exists(_nativesDir);
foreach (var l in _libraries.Libs)
{
@@ -42,6 +46,10 @@ public class LibrariesDownloadTaskFactory : INetworkTaskFactory
{
_libsToDownload.Add(l);
}
else if (!nativeDirExists && l is Libraries.NativeLib)
{
_libsToDownload.Add(l);
}
else if (checkHashes)
{
using var fs = File.OpenRead(l.jarFilePath);
@@ -64,15 +72,30 @@ public class LibrariesDownloadTaskFactory : INetworkTaskFactory
private async Task Download(NetworkProgressReporter pr, CancellationToken ct)
{
Приложение.Логгер.LogInfo(nameof(Сеть), "started downloading libraries");
Приложение.Логгер.LogInfo(nameof(Сеть), $"started downloading libraries '{_descriptor.id}'");
ParallelOptions opt = new() { MaxDegreeOfParallelism = ParallelDownloadsN, CancellationToken = ct };
await Parallel.ForEachAsync(_libsToDownload, opt, async (l, _ct) =>
{
Приложение.Логгер.LogDebug(nameof(Сеть),
$"downloading library '{l.name}' to '{l.jarFilePath}'");
await DownloadFileHTTP(l.artifact.url, l.jarFilePath, _ct, pr.AddBytesCount);
//TODO: extract natives from jar
if (l is Libraries.NativeLib n)
{
var zipf = File.OpenRead(n.jarFilePath);
ZipFile.ExtractToDirectory(zipf, _nativesDir.ToString(), true);
if (n.extractionOptions?.exclude != null)
{
foreach (var excluded in n.extractionOptions.exclude)
{
IOPath path = Path.Concat(_nativesDir, excluded);
if(Directory.Exists(path))
Directory.Delete(path);
if(File.Exists(path))
File.Delete(path);
}
}
}
});
Приложение.Логгер.LogInfo(nameof(Сеть), "finished downloading libraries");
Приложение.Логгер.LogInfo(nameof(Сеть), $"finished downloading libraries '{_descriptor.id}'");
}
}

View File

@@ -1,5 +1,6 @@
using System.Security.Cryptography;
using DTLib.Extensions;
using Млаумчерб.Клиент.видимое;
using Млаумчерб.Клиент.классы;
using static Млаумчерб.Клиент.сеть.Сеть;
@@ -46,8 +47,10 @@ public class VersionFileDownloadTaskFactory : INetworkTaskFactory
return _descriptor.downloads.client.size;
}
private Task Download(NetworkProgressReporter pr, CancellationToken ct)
private async Task Download(NetworkProgressReporter pr, CancellationToken ct)
{
return DownloadFileHTTP(_descriptor.downloads.client.url, _filePath, ct, pr.AddBytesCount);
Приложение.Логгер.LogInfo(nameof(Сеть), $"started downloading version file '{_descriptor.id}'");
await DownloadFileHTTP(_descriptor.downloads.client.url, _filePath, ct, pr.AddBytesCount);
Приложение.Логгер.LogInfo(nameof(Сеть), $"finished downloading version file '{_descriptor.id}'");
}
}