natives unzip
This commit is contained in:
parent
4704f1217a
commit
beb701ca40
@ -22,7 +22,7 @@
|
||||
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.*" />
|
||||
<PackageReference Include="Avalonia.Labs.Gif" Version="11.2.999-cibuild-00051673"/>
|
||||
<PackageReference Include="CliWrap" Version="3.6.*" />
|
||||
<PackageReference Include="DTLib" Version="1.4.2" />
|
||||
<PackageReference Include="DTLib" Version="1.4.3" />
|
||||
<PackageReference Include="MessageBox.Avalonia" Version="3.1.*" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.*" />
|
||||
</ItemGroup>
|
||||
|
||||
@ -7,7 +7,7 @@ public class Libraries
|
||||
private static readonly string[] enabled_features = [];
|
||||
|
||||
public record JarLib(string name, IOPath jarFilePath, Artifact artifact);
|
||||
public record NativeLib(string name, IOPath jarFilePath, Artifact artifact, IOPath nativeFilesDir, Extract? extractionOptions)
|
||||
public record NativeLib(string name, IOPath jarFilePath, Artifact artifact, Extract? extractionOptions)
|
||||
: JarLib(name, jarFilePath, artifact);
|
||||
|
||||
public IReadOnlyCollection<JarLib> Libs { get; }
|
||||
@ -43,9 +43,9 @@ public class Libraries
|
||||
if(!libHashes.Add(artifact.sha1))
|
||||
continue;
|
||||
|
||||
IOPath dir = Пути.GetVersionDir(descriptor.id);
|
||||
IOPath jarPath = Path.Concat(dir, Path.ReplaceRestrictedChars(l.name));
|
||||
libs.Add(new NativeLib(l.name, jarPath, artifact, dir, l.extract));
|
||||
string urlTail = artifact.url.AsSpan().After("://").After('/').ToString();
|
||||
IOPath jarFilePath = Path.Concat(Пути.GetLibrariesDir(), urlTail);
|
||||
libs.Add(new NativeLib(l.name, jarFilePath, artifact, l.extract));
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -57,8 +57,9 @@ public class Libraries
|
||||
if(!libHashes.Add(artifact.sha1))
|
||||
continue;
|
||||
|
||||
IOPath path = artifact.url.AsSpan().After("://").After('/').ToString();
|
||||
libs.Add(new JarLib(l.name, Path.Concat(Пути.GetLibrariesDir(), path), artifact));
|
||||
string urlTail = artifact.url.AsSpan().After("://").After('/').ToString();
|
||||
IOPath jarFilePath = Path.Concat(Пути.GetLibrariesDir(), urlTail);
|
||||
libs.Add(new JarLib(l.name, jarFilePath, artifact));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -52,5 +52,14 @@ public static class Буржуазия
|
||||
}
|
||||
|
||||
return allowed;
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetOs() =>
|
||||
Environment.OSVersion.Platform switch
|
||||
{
|
||||
PlatformID.Win32NT => "windows",
|
||||
PlatformID.Unix => "linux",
|
||||
PlatformID.MacOSX => "osx",
|
||||
_ => throw new ArgumentOutOfRangeException(Environment.OSVersion.Platform.ToString())
|
||||
};
|
||||
}
|
||||
|
||||
@ -25,6 +25,9 @@ public static class Пути
|
||||
public static IOPath GetLibrariesDir() =>
|
||||
Path.Concat(Приложение.Настройки.путь_к_кубачу, "libraries");
|
||||
|
||||
public static IOPath GetNativeLibrariesDir(string id) =>
|
||||
Path.Concat(GetVersionDir(id), "natives", Буржуазия.GetOs());
|
||||
|
||||
public static IOPath GetJavaRuntimesDir() =>
|
||||
Path.Concat(Приложение.Настройки.путь_к_кубачу, "java");
|
||||
|
||||
|
||||
@ -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}'");
|
||||
}
|
||||
}
|
||||
@ -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}'");
|
||||
}
|
||||
}
|
||||
@ -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}'");
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user