|
@@ -1,4 +1,5 @@
|
|
|
-using System;
|
|
|
+using Microsoft.Extensions.Logging;
|
|
|
+using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Collections.ObjectModel;
|
|
|
using System.IO;
|
|
@@ -20,10 +21,12 @@ internal class Downloader
|
|
|
static HttpClient _sHttpClient = new();
|
|
|
|
|
|
public DownloaderParameters Parameters { get; private set; }
|
|
|
+ private readonly Serilog.ILogger _logger;
|
|
|
|
|
|
- public Downloader(DownloaderParameters parameters)
|
|
|
+ public Downloader(DownloaderParameters parameters, Serilog.ILogger logger)
|
|
|
{
|
|
|
Parameters = parameters;
|
|
|
+ _logger = logger;
|
|
|
}
|
|
|
|
|
|
public async Task DownloadClient(
|
|
@@ -68,15 +71,21 @@ internal class Downloader
|
|
|
ArgumentNullException.ThrowIfNull(versionJson);
|
|
|
|
|
|
//SetMaxProgressBarValue(size);
|
|
|
- Settings.logger.Debug("Downloading minecraft {0}", versionJson.Id);
|
|
|
+ _logger.Debug("Downloading minecraft {0}", versionJson.Id);
|
|
|
|
|
|
//download java
|
|
|
if (Parameters.Parameter.DownloadJava)
|
|
|
{
|
|
|
- await DownloadJava(httpClient, versionJson, cancellationToken);
|
|
|
-
|
|
|
- tasksIterator++;
|
|
|
- Parameters.Action.TasksStatus($"Task {tasksIterator} of {tasksCount} complete.");
|
|
|
+ try
|
|
|
+ {
|
|
|
+ await DownloadJava(httpClient, versionJson, cancellationToken);
|
|
|
+ tasksIterator++;
|
|
|
+ Parameters.Action.TasksStatus($"Task {tasksIterator} of {tasksCount} complete.");
|
|
|
+ }
|
|
|
+ catch (Exception ex) when (ex is (ArgumentException or HttpRequestException) )
|
|
|
+ {
|
|
|
+ _logger.Warning(ex.Message);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
await DownloadMainJar(httpClient, versionJson, cancellationToken);
|
|
@@ -127,7 +136,7 @@ internal class Downloader
|
|
|
|
|
|
//RemoveProgressBar(webClient);
|
|
|
//Progress = 100;
|
|
|
- Settings.logger.Debug("Downloading finished.");
|
|
|
+ _logger.Debug("Downloading finished.");
|
|
|
Parameters.Action.DownloadingFileName("Finished!");
|
|
|
Parameters.Action.IsControlsEnabled(true);
|
|
|
|
|
@@ -142,7 +151,7 @@ internal class Downloader
|
|
|
Parameters.Action.DownloadingFileName($"Downloading {Parameters.Data.SelectedVersion.Id} canceled.");
|
|
|
else
|
|
|
Parameters.Action.DownloadingFileName("Downloading canceled: version config is null!");
|
|
|
- Settings.logger.Warning(ex.Message);
|
|
|
+ _logger.Warning(ex.Message);
|
|
|
return;// Task.FromCanceled(cancellationToken);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
@@ -154,9 +163,9 @@ internal class Downloader
|
|
|
Parameters.Action.DownloadingFileName($"Error occured while downloading {Parameters.Data.SelectedVersion.Id}.");
|
|
|
else
|
|
|
Parameters.Action.DownloadingFileName($"Error occured while downloading: version config is null!");
|
|
|
- Settings.logger.Error(ex.Message);
|
|
|
+ _logger.Error(ex.Message);
|
|
|
if (ex.StackTrace is not null)
|
|
|
- Settings.logger.Error(ex.StackTrace);
|
|
|
+ _logger.Error(ex.StackTrace);
|
|
|
return;// Task.FromException(ex);
|
|
|
}
|
|
|
return;
|
|
@@ -175,11 +184,11 @@ internal class Downloader
|
|
|
|
|
|
if (!Directory.Exists($"{Settings.minecraftForlderPath}versions/{Parameters.Data.SelectedModpack.Name}"))
|
|
|
{
|
|
|
- Settings.logger.Debug("Creating path: {0}", $"{Settings.minecraftForlderPath}versions/{Parameters.Data.SelectedModpack.Name}");
|
|
|
+ _logger.Debug("Creating path: {0}", $"{Settings.minecraftForlderPath}versions/{Parameters.Data.SelectedModpack.Name}");
|
|
|
Directory.CreateDirectory($"{Settings.minecraftForlderPath}versions/{Parameters.Data.SelectedModpack.Name}");
|
|
|
}
|
|
|
|
|
|
- Settings.logger.Debug("Downloading: {0}", $"{Parameters.Data.SelectedModpack.Name}.zip");
|
|
|
+ _logger.Debug("Downloading: {0}", $"{Parameters.Data.SelectedModpack.Name}.zip");
|
|
|
Parameters.Action.DownloadingFileName($"{Parameters.Data.SelectedModpack.Name}.zip");
|
|
|
await DownloadFileAsync(modpackUrl, Settings.minecraftForlderPath + $"versions/{Parameters.Data.SelectedModpack.Name}.zip", cancellationToken, httpClient);
|
|
|
|
|
@@ -207,7 +216,7 @@ internal class Downloader
|
|
|
if (Directory.Exists($"{Settings.minecraftForlderPath}versions/{Parameters.Data.SelectedModpack.Name}/config"))
|
|
|
Directory.Delete($"{Settings.minecraftForlderPath}versions/{Parameters.Data.SelectedModpack.Name}/config", true);
|
|
|
|
|
|
- Settings.logger.Debug("Extracting: {0}", $"{Parameters.Data.SelectedModpack.Name}.zip");
|
|
|
+ _logger.Debug("Extracting: {0}", $"{Parameters.Data.SelectedModpack.Name}.zip");
|
|
|
Parameters.Action.DownloadingFileName($"Unpacking {Parameters.Data.SelectedModpack.Name}.zip");
|
|
|
ZipFile.ExtractToDirectory($"{Settings.minecraftForlderPath}versions/{Parameters.Data.SelectedModpack.Name}.zip", Settings.minecraftForlderPath + $"versions/{Parameters.Data.SelectedModpack.Name}", true);
|
|
|
File.Delete($"{Settings.minecraftForlderPath}versions/{Parameters.Data.SelectedModpack.Name}.zip");
|
|
@@ -215,74 +224,74 @@ internal class Downloader
|
|
|
File.WriteAllText($"{Settings.minecraftForlderPath}versions/{Parameters.Data.SelectedModpack.Name}/revision.json", JsonSerializer.Serialize(Parameters.Data.SelectedModpack.Revision));
|
|
|
}
|
|
|
|
|
|
- private async Task DownloadForgeOptifine(HttpClient httpClient, Entity.Version.Version? versionJson, CancellationToken cancellationToken)
|
|
|
+ private async Task DownloadForgeOptifine(HttpClient httpClient, Entity.Version.Version versionJson, CancellationToken cancellationToken)
|
|
|
{
|
|
|
if (!Directory.Exists($"{Settings.minecraftForlderPath}versions/Forge{versionJson.Id}/mods"))
|
|
|
{
|
|
|
- Settings.logger.Debug("Creating path: {0}", $"{Settings.minecraftForlderPath}versions/Forge" + versionJson.Id + "/mods");
|
|
|
+ _logger.Debug("Creating path: {0}", $"{Settings.minecraftForlderPath}versions/Forge" + versionJson.Id + "/mods");
|
|
|
Directory.CreateDirectory($"{Settings.minecraftForlderPath}versions/Forge" + versionJson.Id + "/mods");
|
|
|
}
|
|
|
|
|
|
- Settings.logger.Debug("Downloading: {0}", $"Optifine{versionJson.Id}.jar");
|
|
|
+ _logger.Debug("Downloading: {0}", $"Optifine{versionJson.Id}.jar");
|
|
|
Parameters.Action.DownloadingFileName($"Optifine{versionJson.Id}.jar");
|
|
|
await DownloadFileAsync($@"https://files.veloe.link/launcher/forge/Forge{versionJson.Id}/Optifine{versionJson.Id}.jar", Settings.minecraftForlderPath + "versions/Forge" + versionJson.Id + "/mods/" + "Optifine" + versionJson.Id + ".jar", cancellationToken, httpClient);
|
|
|
}
|
|
|
|
|
|
- private async Task DownloadOptifine(HttpClient httpClient, Entity.Version.Version? versionJson, CancellationToken cancellationToken)
|
|
|
+ private async Task DownloadOptifine(HttpClient httpClient, Entity.Version.Version versionJson, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var optifinePath = $"Optifine{versionJson.Id}";
|
|
|
var optifineUrl = $"https://files.veloe.link/launcher/optifine/Optifine{versionJson.Id}/";
|
|
|
|
|
|
if (!Directory.Exists($"{Settings.minecraftForlderPath}versions/{optifinePath}"))
|
|
|
{
|
|
|
- Settings.logger.Debug("Creating path: {0}", $"{Settings.minecraftForlderPath}versions/" + optifinePath);
|
|
|
+ _logger.Debug("Creating path: {0}", $"{Settings.minecraftForlderPath}versions/" + optifinePath);
|
|
|
Directory.CreateDirectory($"{Settings.minecraftForlderPath}versions/" + optifinePath);
|
|
|
}
|
|
|
|
|
|
- Settings.logger.Debug("Downloading: {0}", $"Optifine{versionJson.Id}.json");
|
|
|
+ _logger.Debug("Downloading: {0}", $"Optifine{versionJson.Id}.json");
|
|
|
Parameters.Action.DownloadingFileName($"Optifine{versionJson.Id}.json");
|
|
|
await DownloadFileAsync($"{optifineUrl}Optifine{versionJson.Id}.json", Settings.minecraftForlderPath + "versions/" + optifinePath + "/" + optifinePath + ".json", cancellationToken, httpClient);
|
|
|
|
|
|
|
|
|
- Settings.logger.Debug("Downloading: {0}", $"Optifine{versionJson.Id}.jar");
|
|
|
+ _logger.Debug("Downloading: {0}", $"Optifine{versionJson.Id}.jar");
|
|
|
Parameters.Action.DownloadingFileName($"Optifine{versionJson.Id}.json");
|
|
|
await DownloadFileAsync($"{optifineUrl}Optifine{versionJson.Id}.jar", Settings.minecraftForlderPath + "versions/" + optifinePath + "/" + optifinePath + ".jar", cancellationToken, httpClient);
|
|
|
|
|
|
|
|
|
- Settings.logger.Debug("Downloading: {0}", "libraries.zip");
|
|
|
+ _logger.Debug("Downloading: {0}", "libraries.zip");
|
|
|
Parameters.Action.DownloadingFileName("libraries.zip");
|
|
|
await DownloadFileAsync(optifineUrl + "libraries.zip", Settings.minecraftForlderPath + "versions/" + optifinePath + "/libraries.zip", cancellationToken, httpClient);
|
|
|
|
|
|
|
|
|
- Settings.logger.Debug("Extracting: {0}", "libraries.zip");
|
|
|
+ _logger.Debug("Extracting: {0}", "libraries.zip");
|
|
|
Parameters.Action.DownloadingFileName("Unpacking libraries.zip");
|
|
|
ZipFile.ExtractToDirectory($"{Settings.minecraftForlderPath}versions/Optifine{versionJson.Id}/libraries.zip", Settings.minecraftForlderPath, true);
|
|
|
File.Delete($"{Settings.minecraftForlderPath}versions/Optifine{versionJson.Id}/libraries.zip");
|
|
|
}
|
|
|
|
|
|
- private async Task DownloadForge(HttpClient httpClient, Entity.Version.Version? versionJson, CancellationToken cancellationToken)
|
|
|
+ private async Task DownloadForge(HttpClient httpClient, Entity.Version.Version versionJson, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var forgePath = $"Forge{versionJson.Id}";
|
|
|
var forgeUrl = $"https://files.veloe.link/launcher/forge/Forge{versionJson.Id}/";
|
|
|
|
|
|
if (!Directory.Exists($"{Settings.minecraftForlderPath}versions/Forge{versionJson.Id}"))
|
|
|
{
|
|
|
- Settings.logger.Debug("Creating path: {0}", $"{Settings.minecraftForlderPath}versions/" + forgePath);
|
|
|
+ _logger.Debug("Creating path: {0}", $"{Settings.minecraftForlderPath}versions/" + forgePath);
|
|
|
Directory.CreateDirectory($"{Settings.minecraftForlderPath}versions/" + forgePath);
|
|
|
}
|
|
|
|
|
|
|
|
|
- Settings.logger.Debug("Downloading: {0}", $"Forge{versionJson.Id}.json");
|
|
|
+ _logger.Debug("Downloading: {0}", $"Forge{versionJson.Id}.json");
|
|
|
Parameters.Action.DownloadingFileName($"Forge{versionJson.Id}.json");
|
|
|
await DownloadFileAsync($"{forgeUrl}Forge{versionJson.Id}.json", Settings.minecraftForlderPath + "versions/" + forgePath + "/" + forgePath + ".json", cancellationToken, httpClient);
|
|
|
|
|
|
|
|
|
- Settings.logger.Debug("Downloading: {0}", "libraries.zip");
|
|
|
+ _logger.Debug("Downloading: {0}", "libraries.zip");
|
|
|
Parameters.Action.DownloadingFileName("libraries.zip");
|
|
|
await DownloadFileAsync(forgeUrl + "libraries.zip", Settings.minecraftForlderPath + "versions/" + forgePath + "/libraries.zip", cancellationToken, httpClient);
|
|
|
|
|
|
|
|
|
- Settings.logger.Debug("Extracting: {0}", "libraries.zip");
|
|
|
+ _logger.Debug("Extracting: {0}", "libraries.zip");
|
|
|
Parameters.Action.DownloadingFileName("Unpacking libraries.zip");
|
|
|
ZipFile.ExtractToDirectory($"{Settings.minecraftForlderPath}versions/Forge{versionJson.Id}/libraries.zip", Settings.minecraftForlderPath, true);
|
|
|
File.Delete($"{Settings.minecraftForlderPath}versions/Forge{versionJson.Id}/libraries.zip");
|
|
@@ -295,13 +304,13 @@ internal class Downloader
|
|
|
var assetsUrl = "https://resources.download.minecraft.net/";
|
|
|
|
|
|
//download assets json
|
|
|
- Settings.logger.Debug("Downloading: {0}", versionJson.Assets + ".json");
|
|
|
+ _logger.Debug("Downloading: {0}", versionJson.Assets + ".json");
|
|
|
|
|
|
if (!Directory.Exists(Settings.minecraftForlderPath + "/assets/" + versionJson.Assets + "/indexes/"))
|
|
|
Directory.CreateDirectory(Settings.minecraftForlderPath + "/assets/" + versionJson.Assets + "/indexes/");
|
|
|
await DownloadFileAsync(versionJson.AssetIndex.Url, Settings.minecraftForlderPath + "/assets/" + versionJson.Assets + "/indexes/" + versionJson.Assets + ".json", cancellationToken);
|
|
|
|
|
|
- Settings.logger.Debug("Downloading assets.");
|
|
|
+ _logger.Debug("Downloading assets.");
|
|
|
Parameters.Action.SetProgress(0);
|
|
|
var assetsCount = assetsJson?.Objects?.Count ?? 1;
|
|
|
var assetsIterator = 1;
|
|
@@ -325,14 +334,14 @@ internal class Downloader
|
|
|
|
|
|
var assetRoot = folder.Contains("icons") ? $"{Settings.minecraftForlderPath}assets/{versionJson.Assets}" : assetsPath;
|
|
|
|
|
|
- var chksum = String.Empty;
|
|
|
+ var chksum = string.Empty;
|
|
|
//here hash check
|
|
|
if (File.Exists(Path.Combine(assetRoot, folder, name)))
|
|
|
{
|
|
|
Parameters.Action.DownloadingFileName($"Checking hash {assetsIterator} of {assetsCount}");
|
|
|
using FileStream fop = File.OpenRead(Path.Combine(assetRoot, folder, name));
|
|
|
byte[] hash = System.Security.Cryptography.SHA1.Create().ComputeHash(fop);
|
|
|
- chksum = BitConverter.ToString(hash).Replace("-", String.Empty).ToLower();
|
|
|
+ chksum = BitConverter.ToString(hash).Replace("-", string.Empty).ToLower();
|
|
|
fop.Close();
|
|
|
}
|
|
|
|
|
@@ -344,7 +353,7 @@ internal class Downloader
|
|
|
if (!Directory.Exists(assetRoot + "/" + folder))
|
|
|
Directory.CreateDirectory(assetRoot + "/" + folder);
|
|
|
|
|
|
- Settings.logger.Debug("Downloading asset: {0} ", name);
|
|
|
+ _logger.Debug("Downloading asset: {0} ", name);
|
|
|
//DownloadingFileName($"Asset {assetsIterator} of {assetsCount}");
|
|
|
Parameters.Action.DownloadingFileName($"Asset {assetsIterator} of {assetsCount}");
|
|
|
await DownloadFileAsync(assetsUrl + asset.Value.Hash[..2] + "/" + asset.Value.Hash, Path.Combine(assetRoot, folder , name), cancellationToken, httpClient);
|
|
@@ -363,25 +372,24 @@ internal class Downloader
|
|
|
|
|
|
}
|
|
|
|
|
|
- private async Task DownloadLibraries(HttpClient httpClient, Entity.Version.Version? versionJson, CancellationToken cancellationToken)
|
|
|
+ private async Task DownloadLibraries(HttpClient httpClient, Entity.Version.Version versionJson, CancellationToken cancellationToken)
|
|
|
{
|
|
|
- Settings.logger.Debug("Downloading libraries.");
|
|
|
+ _logger.Debug("Downloading libraries.");
|
|
|
|
|
|
foreach (var library in versionJson.Libraries)
|
|
|
{
|
|
|
var libPath = Settings.minecraftForlderPath + "libraries/";
|
|
|
- string libUrl = "";
|
|
|
- string sha1 = String.Empty;
|
|
|
+ string libUrl = string.Empty;
|
|
|
+ string sha1 = string.Empty;
|
|
|
// getting path and url if universal lib
|
|
|
if (library.Natives is null)
|
|
|
{
|
|
|
- libPath = Settings.minecraftForlderPath + "libraries/" + library.Downloads.Artifact.Path;
|
|
|
+ libPath += library.Downloads.Artifact.Path;
|
|
|
libUrl = library.Downloads.Artifact.Url;
|
|
|
sha1 = library.Downloads.Artifact.Sha1;
|
|
|
}
|
|
|
else
|
|
|
{ // getting path if native
|
|
|
- libPath = Settings.minecraftForlderPath + "libraries/";
|
|
|
libUrl = "";
|
|
|
if (library.Downloads.Classifiers is not null)
|
|
|
{
|
|
@@ -419,7 +427,7 @@ internal class Downloader
|
|
|
}
|
|
|
|
|
|
//if no lib url
|
|
|
- if (libUrl == String.Empty)
|
|
|
+ if (libUrl == string.Empty)
|
|
|
continue;
|
|
|
|
|
|
var libName = Path.GetFileName(libPath);
|
|
@@ -428,9 +436,9 @@ internal class Downloader
|
|
|
if (libName is null || libDir is null)
|
|
|
{
|
|
|
if (libPath == string.Empty)
|
|
|
- Settings.logger.Warning("Library dir, name are null, because libraryPath is empty! Skipping...");
|
|
|
+ _logger.Warning("Library dir, name are null, because libraryPath is empty! Skipping...");
|
|
|
else
|
|
|
- Settings.logger.Warning("Library dir or name are null! Skipping...");
|
|
|
+ _logger.Warning("Library dir or name are null! Skipping...");
|
|
|
continue;
|
|
|
}
|
|
|
|
|
@@ -439,18 +447,18 @@ internal class Downloader
|
|
|
{
|
|
|
if (!Directory.Exists(libDir))
|
|
|
{
|
|
|
- Settings.logger.Debug("Creating path: {0}", libDir);
|
|
|
+ _logger.Debug("Creating path: {0}", libDir);
|
|
|
Directory.CreateDirectory(libDir);
|
|
|
}
|
|
|
|
|
|
- var chksum = String.Empty;
|
|
|
+ var chksum = string.Empty;
|
|
|
|
|
|
if (File.Exists(libPath))
|
|
|
{
|
|
|
Parameters.Action.DownloadingFileName($"Checking hash: {libName}");
|
|
|
FileStream fop = File.OpenRead(libPath);
|
|
|
byte[] hash = System.Security.Cryptography.SHA1.Create().ComputeHash(fop);
|
|
|
- chksum = BitConverter.ToString(hash).Replace("-", String.Empty).ToLower();
|
|
|
+ chksum = BitConverter.ToString(hash).Replace("-", string.Empty).ToLower();
|
|
|
|
|
|
fop.Close();
|
|
|
fop.Dispose();
|
|
@@ -458,7 +466,7 @@ internal class Downloader
|
|
|
|
|
|
if (chksum != sha1)
|
|
|
{
|
|
|
- Settings.logger.Debug("Downloading: {0}", libName);
|
|
|
+ _logger.Debug("Downloading: {0}", libName);
|
|
|
Parameters.Action.DownloadingFileName(libName);
|
|
|
await DownloadFileAsync(libUrl, libDir + "/" + libName, cancellationToken, httpClient);
|
|
|
}
|
|
@@ -471,18 +479,18 @@ internal class Downloader
|
|
|
{
|
|
|
if (!Directory.Exists(libDir))
|
|
|
{
|
|
|
- Settings.logger.Debug("Creating path: {0}", libDir);
|
|
|
+ _logger.Debug("Creating path: {0}", libDir);
|
|
|
Directory.CreateDirectory(libDir);
|
|
|
}
|
|
|
|
|
|
- var chksum = String.Empty;
|
|
|
+ var chksum = string.Empty;
|
|
|
|
|
|
- if (File.Exists(libDir + "/" + libName) && sha1 != String.Empty)
|
|
|
+ if (File.Exists(libDir + "/" + libName) && sha1 != string.Empty)
|
|
|
{
|
|
|
Parameters.Action.DownloadingFileName($"Checking hash: {libName}");
|
|
|
FileStream fop = File.OpenRead(libDir + "/" + libName);
|
|
|
byte[] hash = System.Security.Cryptography.SHA1.Create().ComputeHash(fop);
|
|
|
- chksum = BitConverter.ToString(hash).Replace("-", String.Empty).ToLower();
|
|
|
+ chksum = BitConverter.ToString(hash).Replace("-", string.Empty).ToLower();
|
|
|
|
|
|
fop.Close();
|
|
|
fop.Dispose();
|
|
@@ -490,7 +498,7 @@ internal class Downloader
|
|
|
|
|
|
if (chksum != sha1)
|
|
|
{
|
|
|
- Settings.logger.Debug("Downloading: {0}", libName);
|
|
|
+ _logger.Debug("Downloading: {0}", libName);
|
|
|
Parameters.Action.DownloadingFileName(libName);
|
|
|
await DownloadFileAsync(libUrl, libDir + "/" + libName, cancellationToken, httpClient);
|
|
|
}
|
|
@@ -502,10 +510,10 @@ internal class Downloader
|
|
|
{
|
|
|
if (!Directory.Exists(libPath))
|
|
|
{
|
|
|
- Settings.logger.Debug("Creating path: {0}", path);
|
|
|
+ _logger.Debug("Creating path: {0}", path);
|
|
|
Directory.CreateDirectory(libPath);
|
|
|
}
|
|
|
- Settings.logger.Debug("Downloading: {0}", libName);
|
|
|
+ _logger.Debug("Downloading: {0}", libName);
|
|
|
DownloadingFileName = libName;
|
|
|
webClient.DownloadFileAsync(new System.Uri(libUrl), libPath + "/" + libName);
|
|
|
|
|
@@ -527,22 +535,22 @@ internal class Downloader
|
|
|
|
|
|
if (!Directory.Exists(Settings.minecraftForlderPath + "versions/" + versionJson.Id + "/natives/"))
|
|
|
{
|
|
|
- Settings.logger.Debug("Creating path: {0}", Settings.minecraftForlderPath + "versions/" + versionJson.Id + "/natives/");
|
|
|
+ _logger.Debug("Creating path: {0}", Settings.minecraftForlderPath + "versions/" + versionJson.Id + "/natives/");
|
|
|
Directory.CreateDirectory(Settings.minecraftForlderPath + "versions/" + versionJson.Id + "/natives/");
|
|
|
}
|
|
|
- Settings.logger.Debug("Extracting {0} to {1}", libName, Settings.minecraftForlderPath + "versions/" + versionJson.Id + "/natives/");
|
|
|
+ _logger.Debug("Extracting {0} to {1}", libName, Settings.minecraftForlderPath + "versions/" + versionJson.Id + "/natives/");
|
|
|
ZipFile.ExtractToDirectory(libDir + "/" + libName, Settings.minecraftForlderPath + "versions/" + versionJson.Id + "/natives/", true);
|
|
|
}
|
|
|
catch (IOException)
|
|
|
{
|
|
|
- Settings.logger.Error("IOException on native lib extraction");
|
|
|
+ _logger.Error("IOException on native lib extraction");
|
|
|
}
|
|
|
//TODO delete META-INF and sha1 files after
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private async Task DownloadMainJar(HttpClient httpClient, Entity.Version.Version? versionJson, CancellationToken cancellationToken)
|
|
|
+ private async Task DownloadMainJar(HttpClient httpClient, Entity.Version.Version versionJson, CancellationToken cancellationToken)
|
|
|
{
|
|
|
//download json
|
|
|
var path = Settings.minecraftForlderPath + "/versions/" + versionJson.Id;
|
|
@@ -550,18 +558,18 @@ internal class Downloader
|
|
|
//download jar
|
|
|
if (!Directory.Exists(path))
|
|
|
{
|
|
|
- Settings.logger.Debug("Creating path: {0}", path);
|
|
|
+ _logger.Debug("Creating path: {0}", path);
|
|
|
Directory.CreateDirectory(path);
|
|
|
}
|
|
|
|
|
|
- string chksum = String.Empty;
|
|
|
+ string chksum = string.Empty;
|
|
|
//here hash check
|
|
|
if (File.Exists(path + "/" + versionJson.Id + ".jar"))
|
|
|
{
|
|
|
Parameters.Action.DownloadingFileName($"Checking hash: {versionJson.Id}.jar");
|
|
|
FileStream fop = File.OpenRead(path + "/" + versionJson.Id + ".jar");
|
|
|
byte[] hash = System.Security.Cryptography.SHA1.Create().ComputeHash(fop);
|
|
|
- chksum = BitConverter.ToString(hash).Replace("-", String.Empty).ToLower();
|
|
|
+ chksum = BitConverter.ToString(hash).Replace("-", string.Empty).ToLower();
|
|
|
|
|
|
fop.Close();
|
|
|
fop.Dispose();
|
|
@@ -569,80 +577,35 @@ internal class Downloader
|
|
|
|
|
|
if (chksum != versionJson.Downloads.Client.Sha1)
|
|
|
{
|
|
|
- Settings.logger.Debug("Downloading {0}", $"{versionJson.Id}.jar");
|
|
|
+ _logger.Debug("Downloading {0}", $"{versionJson.Id}.jar");
|
|
|
Parameters.Action.DownloadingFileName($"{versionJson.Id}.jar");
|
|
|
await DownloadFileAsync(versionJson.Downloads.Client.Url, path + "/" + versionJson.Id + ".jar", cancellationToken, httpClient);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private async Task DownloadJava(HttpClient httpClient, Entity.Version.Version? versionJson, CancellationToken cancellationToken)
|
|
|
+ private async Task DownloadJava(HttpClient httpClient, Entity.Version.Version versionJson, CancellationToken cancellationToken)
|
|
|
{
|
|
|
- Settings.logger.Debug("Getting required Java version.");
|
|
|
- string javaUrl = "";
|
|
|
- if (versionJson.JavaVersion is not null && versionJson.JavaVersion.MajorVersion != null)
|
|
|
- {
|
|
|
- switch (versionJson.JavaVersion.MajorVersion)
|
|
|
- {
|
|
|
- case 8:
|
|
|
- if (Environment.Is64BitOperatingSystem && OperatingSystem.IsWindows())
|
|
|
- javaUrl = "https://files.veloe.link/launcher/java/8/windows64/java.zip";
|
|
|
- if (!Environment.Is64BitOperatingSystem && OperatingSystem.IsWindows())
|
|
|
- javaUrl = "https://files.veloe.link/launcher/java/8/windows32/java.zip";
|
|
|
-
|
|
|
- if (Environment.Is64BitOperatingSystem && OperatingSystem.IsLinux())
|
|
|
- javaUrl = "https://files.veloe.link/launcher/java/8/linux64/java.zip";
|
|
|
- if (!Environment.Is64BitOperatingSystem && OperatingSystem.IsLinux())
|
|
|
- javaUrl = "https://files.veloe.link/launcher/java/8/linux32/java.zip";
|
|
|
- break;
|
|
|
- case 16:
|
|
|
- if (Environment.Is64BitOperatingSystem && OperatingSystem.IsWindows())
|
|
|
- javaUrl = "https://files.veloe.link/launcher/java/16/windows64/java.zip";
|
|
|
- if (Environment.Is64BitOperatingSystem && OperatingSystem.IsLinux())
|
|
|
- javaUrl = "https://files.veloe.link/launcher/java/16/linux64/java.zip";
|
|
|
- break;
|
|
|
- case 17:
|
|
|
- if (Environment.Is64BitOperatingSystem && OperatingSystem.IsWindows())
|
|
|
- javaUrl = "https://files.veloe.link/launcher/java/17/windows64/java.zip";
|
|
|
- if (Environment.Is64BitOperatingSystem && OperatingSystem.IsLinux())
|
|
|
- javaUrl = "https://files.veloe.link/launcher/java/17/linux64/java.zip";
|
|
|
-
|
|
|
- break;
|
|
|
- case 18:
|
|
|
- if (Environment.Is64BitOperatingSystem && OperatingSystem.IsWindows())
|
|
|
- javaUrl = "https://files.veloe.link/launcher/java/18/windows64/java.zip";
|
|
|
- if (Environment.Is64BitOperatingSystem && OperatingSystem.IsLinux())
|
|
|
- javaUrl = "https://files.veloe.link/launcher/java/18/linux64/java.zip";
|
|
|
-
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
+ _logger.Debug("Getting required Java version.");
|
|
|
|
|
|
- if (versionJson.Assets == "legacy")
|
|
|
- {
|
|
|
- if (Environment.Is64BitOperatingSystem && OperatingSystem.IsWindows())
|
|
|
- javaUrl = "https://files.veloe.link/launcher/java/8/windows64/java.zip";
|
|
|
- if (!Environment.Is64BitOperatingSystem && OperatingSystem.IsWindows())
|
|
|
- javaUrl = "https://files.veloe.link/launcher/java/8/windows32/java.zip";
|
|
|
-
|
|
|
- if (Environment.Is64BitOperatingSystem && OperatingSystem.IsLinux())
|
|
|
- javaUrl = "https://files.veloe.link/launcher/java/8/linux64/java.zip";
|
|
|
- if (!Environment.Is64BitOperatingSystem && OperatingSystem.IsLinux())
|
|
|
- javaUrl = "https://files.veloe.link/launcher/java/8/linux32/java.zip";
|
|
|
- }
|
|
|
+ var javaVersion = (versionJson.JavaVersion?.MajorVersion ??
|
|
|
+ (versionJson.Assets == "legacy" ? 8 :
|
|
|
+ throw new ArgumentException("Required Java version was not found in json file.")));
|
|
|
+
|
|
|
+ var javaUrl = $"https://files.veloe.link/launcher/java/{javaVersion}/{(OperatingSystem.IsWindows() ? "windows" : "linux")}{(Environment.Is64BitOperatingSystem ? "64" : "32")}/java.zip";
|
|
|
|
|
|
- if (javaUrl != "")
|
|
|
+ if (await IsFileAvaliable(javaUrl, cancellationToken))
|
|
|
{
|
|
|
- Settings.logger.Debug("Downloading Java");
|
|
|
+ _logger.Debug("Downloading Java");
|
|
|
Parameters.Action.DownloadingFileName("java.zip");
|
|
|
await DownloadFileAsync(javaUrl, Settings.minecraftForlderPath + "java.zip", cancellationToken, httpClient);
|
|
|
|
|
|
- Settings.logger.Debug("Unpacking Java");
|
|
|
+ _logger.Debug("Unpacking Java");
|
|
|
Parameters.Action.DownloadingFileName("Unpacking java.zip");
|
|
|
ZipFile.ExtractToDirectory($"{Settings.minecraftForlderPath}java.zip", Settings.minecraftForlderPath, true);
|
|
|
File.Delete($"{Settings.minecraftForlderPath}java.zip");
|
|
|
}
|
|
|
else
|
|
|
- Settings.logger.Debug("Required Java version don't found in json file."); //log that java was not downloaded;
|
|
|
+ throw new HttpRequestException("Required Java version was not found on server.");
|
|
|
}
|
|
|
|
|
|
private async Task<Entity.Version.Version?> GetVersionJson()
|
|
@@ -660,24 +623,27 @@ internal class Downloader
|
|
|
Parameters.Parameter.InstallOptifine = Parameters.Data.SelectedModpack.Optifine;
|
|
|
Parameters.Parameter.InstallFabric = Parameters.Data.SelectedModpack.Fabric;
|
|
|
|
|
|
- Settings.logger.Debug("Downloading {0}.json", Parameters.Data.SelectedVersion.Id);
|
|
|
+ _logger.Debug("Downloading {0}.json", Parameters.Data.SelectedVersion.Id);
|
|
|
Parameters.Action.DownloadingFileName($"{Parameters.Data.SelectedVersion.Id}.json");
|
|
|
return await Downloader.DownloadAndDeserializeJsonData<Entity.Version.Version>(Parameters.Data.SelectedVersion.Url, Settings.minecraftForlderPath + "versions/" + Parameters.Data.SelectedVersion.Id + "/", Parameters.Data.SelectedVersion.Id + ".json");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Parameters.Action.DownloadingFileName($"{Parameters.Data.SelectedVersion.Id}.json");
|
|
|
- Settings.logger.Debug("Downloading {0}.json", Parameters.Data.SelectedVersion.Id);
|
|
|
+ _logger.Debug("Downloading {0}.json", Parameters.Data.SelectedVersion.Id);
|
|
|
return await Downloader.DownloadAndDeserializeJsonData<Entity.Version.Version>(Parameters.Data.SelectedVersion.Url, Settings.minecraftForlderPath + "versions/" + Parameters.Data.SelectedVersion.Id + "/", Parameters.Data.SelectedVersion.Id + ".json");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public static async Task<T?> DownloadAndDeserializeJsonData<T>(string url, string path = "", string filename = "") where T : new()
|
|
|
+ public static async Task<T?> DownloadAndDeserializeJsonData<T>(string url, string path = "", string filename = "", Serilog.ILogger? logger = null) where T : new()
|
|
|
{
|
|
|
string jsonData;
|
|
|
+
|
|
|
+ if (logger is null) logger = Settings.logger;
|
|
|
+
|
|
|
try
|
|
|
{
|
|
|
- Settings.logger.Debug($"Downloading: {url.Split('/').Last()}");
|
|
|
+ logger.Debug($"Downloading: {url.Split('/').Last()}");
|
|
|
jsonData = await _sHttpClient.GetStringAsync(url);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
@@ -687,7 +653,7 @@ internal class Downloader
|
|
|
|
|
|
if (string.IsNullOrEmpty(jsonData))
|
|
|
{
|
|
|
- Settings.logger.Warning("Empty string!");
|
|
|
+ logger.Warning("Empty string!");
|
|
|
return new T();
|
|
|
}
|
|
|
else
|
|
@@ -696,12 +662,12 @@ internal class Downloader
|
|
|
{
|
|
|
if (!Directory.Exists(path))
|
|
|
{
|
|
|
- Settings.logger.Debug("Creating path: {0}", path);
|
|
|
+ logger.Debug("Creating path: {0}", path);
|
|
|
Directory.CreateDirectory(path);
|
|
|
}
|
|
|
File.WriteAllText(path + filename, jsonData);
|
|
|
}
|
|
|
- //Settings.logger.Debug("Return serialized string.");
|
|
|
+ //_logger.Debug("Return serialized string.");
|
|
|
return JsonSerializer.Deserialize<T>(jsonData, new JsonSerializerOptions{PropertyNameCaseInsensitive = true});
|
|
|
}
|
|
|
}
|
|
@@ -741,7 +707,7 @@ internal class Downloader
|
|
|
foreach (var library in Parameters.Data.VersionJson.Libraries)
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(library.Name) || string.IsNullOrEmpty(library.Url))
|
|
|
- { continue; }
|
|
|
+ continue;
|
|
|
|
|
|
var relativePath = StartCommandBuilder.GetLibRelativePathFromName(library.Name);
|
|
|
var libPath = Settings.minecraftForlderPath + "libraries/" + relativePath;
|
|
@@ -756,7 +722,7 @@ internal class Downloader
|
|
|
if (await IsFileAvaliable($"{library.Url}{relativePath}", ct))
|
|
|
await DownloadFileAsync($"{library.Url}{relativePath}", libPath, ct, httpClient);
|
|
|
else
|
|
|
- Settings.logger.Warning($"Library {library.Name} url is not accessible. Skipping...");
|
|
|
+ _logger.Warning($"Library {library.Name} url is not accessible. Skipping...");
|
|
|
|
|
|
}
|
|
|
}
|