|
@@ -16,6 +16,7 @@ using VeloeMinecraftLauncher.Models.Entity;
|
|
|
using VeloeMinecraftLauncher.Entity.Version;
|
|
|
using System.Diagnostics;
|
|
|
using System.Linq.Expressions;
|
|
|
+using System.Globalization;
|
|
|
|
|
|
namespace VeloeMinecraftLauncher.ViewModels;
|
|
|
|
|
@@ -74,24 +75,23 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
|
|
|
ArgumentNullException.ThrowIfNull(_logger);
|
|
|
|
|
|
- if (_versionManifest is null) _versionManifest = new();
|
|
|
-
|
|
|
- if (_filteredVersions is null) _filteredVersions = new();
|
|
|
- if (_modpackVersions is null) _modpackVersions = new();
|
|
|
- if (_modpackVersionsAsVersion is null)
|
|
|
- _modpackVersionsAsVersion = _modpackVersions
|
|
|
- .Select(v => new Entity.VersionManifest.Version()
|
|
|
- {
|
|
|
- Id = v.Name,
|
|
|
- Type = "modpack",
|
|
|
- ComplianceLevel = v.Revision
|
|
|
- })
|
|
|
- .ToList();
|
|
|
-
|
|
|
- if (_libraries is null) _libraries = new();
|
|
|
- if (_downloadedVersions is null) _downloadedVersions = new();
|
|
|
- if (_downloadedVersionTree is null) _downloadedVersionTree = new();
|
|
|
- if (DownloadedVersionsDictionary is null) DownloadedVersionsDictionary = new();
|
|
|
+ _versionManifest ??= new();
|
|
|
+
|
|
|
+ _filteredVersions ??= new();
|
|
|
+ _modpackVersions ??= new();
|
|
|
+ _modpackVersionsAsVersion ??= _modpackVersions
|
|
|
+ .Select(v => new Entity.VersionManifest.Version()
|
|
|
+ {
|
|
|
+ Id = v.Name,
|
|
|
+ Type = "modpack",
|
|
|
+ ComplianceLevel = v.Revision
|
|
|
+ })
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ _libraries ??= new();
|
|
|
+ _downloadedVersions ??= new();
|
|
|
+ _downloadedVersionTree ??= new();
|
|
|
+ DownloadedVersionsDictionary ??= new();
|
|
|
|
|
|
try
|
|
|
{
|
|
@@ -210,7 +210,6 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
set
|
|
|
{
|
|
|
this.RaiseAndSetIfChanged(ref _installForge, value);
|
|
|
-
|
|
|
if (InstallFabric)
|
|
|
InstallFabric = false;
|
|
|
}
|
|
@@ -436,6 +435,7 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
{
|
|
|
await Task.Run(async() =>
|
|
|
{
|
|
|
+ CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
|
|
|
try
|
|
|
{
|
|
|
IsControlsEnabled = false;
|
|
@@ -454,10 +454,10 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
|
|
|
foreach (var dversion in DownloadedVersions)
|
|
|
{
|
|
|
- using StreamReader reader = new StreamReader(dversion.path);
|
|
|
+ using StreamReader reader = new(dversion.Path);
|
|
|
|
|
|
Entity.Version.Version versionObject = await JsonSerializer.DeserializeAsync<Entity.Version.Version>(reader.BaseStream, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
|
|
|
- DownloadedVersionsDictionary.Add(dversion.version, versionObject);
|
|
|
+ DownloadedVersionsDictionary.Add(dversion.Version, versionObject);
|
|
|
|
|
|
if (dversion == _downloadedVersion)
|
|
|
{
|
|
@@ -471,7 +471,7 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- var versionDir = new FileInfo(value.path)?.Directory?.FullName;
|
|
|
+ var versionDir = new FileInfo(value.Path)?.Directory?.FullName;
|
|
|
|
|
|
if (versionDir is null)
|
|
|
{
|
|
@@ -503,19 +503,19 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
DirectoryToTreeNode(
|
|
|
dirInfo,
|
|
|
out dirSize,
|
|
|
- (dir) => dir.Name == ".mixin.out" ||
|
|
|
- dir.Name == "assets" ||
|
|
|
- dir.Name == "javaruntime" ||
|
|
|
- dir.Name == "libraries" ||
|
|
|
- dir.Name == "logs" ||
|
|
|
- dir.Name == "versions",
|
|
|
- (file) => file.Name.Contains("Veloe") ||
|
|
|
- file.Name.Contains("log") ||
|
|
|
- file.Name.Contains("exe") ||
|
|
|
- file.Name == "launcher_profiles.json" ||
|
|
|
- file.Name == "libHarfBuzzSharp.dll" ||
|
|
|
- file.Name == "libSkiaSharp.dll" ||
|
|
|
- file.Name == "settings.json")
|
|
|
+ (dir) => dir.Name.Equals(".mixin.out",StringComparison.Ordinal) ||
|
|
|
+ dir.Name.Equals("assets",StringComparison.Ordinal) ||
|
|
|
+ dir.Name.Equals("javaruntime", StringComparison.Ordinal) ||
|
|
|
+ dir.Name.Equals("libraries", StringComparison.Ordinal) ||
|
|
|
+ dir.Name.Equals("logs", StringComparison.Ordinal) ||
|
|
|
+ dir.Name.Equals("versions", StringComparison.Ordinal),
|
|
|
+ (file) => file.Name.Contains("Veloe",StringComparison.Ordinal) ||
|
|
|
+ file.Name.Contains("log", StringComparison.Ordinal) ||
|
|
|
+ file.Name.Contains("exe", StringComparison.Ordinal) ||
|
|
|
+ file.Name.Equals("launcher_profiles.json", StringComparison.Ordinal) ||
|
|
|
+ file.Name.Equals("libHarfBuzzSharp.dll", StringComparison.Ordinal) ||
|
|
|
+ file.Name.Equals("libSkiaSharp.dll", StringComparison.Ordinal) ||
|
|
|
+ file.Name.Equals("settings.json", StringComparison.Ordinal))
|
|
|
);
|
|
|
allSize += dirSize;
|
|
|
}
|
|
@@ -535,7 +535,7 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
|
|
|
if (dirInfo is not null)
|
|
|
{
|
|
|
- var worldsTreeNode = new TreeNode() { Title = "Worlds: " + dirInfo.GetDirectories().Count() };
|
|
|
+ var worldsTreeNode = new TreeNode() { Title = "Worlds: " + dirInfo.GetDirectories().Length };
|
|
|
|
|
|
foreach (var world in dirInfo.GetDirectories())
|
|
|
{ worldsTreeNode.SubNode.Add(new TreeNode() { Title = world.Name }); }
|
|
@@ -545,18 +545,19 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
|
|
|
//check modloader
|
|
|
|
|
|
- var modsTreeNode = new TreeNode();
|
|
|
-
|
|
|
- if (version.InheritsFrom is null)
|
|
|
- modsTreeNode.Title = "Modloader: No";
|
|
|
- else if (version.Libraries.Any(l => l.Downloads?.Artifact?.Url?.Contains("forge") ?? false))
|
|
|
- {
|
|
|
- modsTreeNode.Title = "Modloader: Forge";
|
|
|
- OpenErrorWindow("This version contains forge modloader, it installs some libraries that can't be displayed and deleted in current launcher versions manager.");
|
|
|
- }
|
|
|
- else if (version.Libraries.Any(l => l.Name.Contains("fabric")))
|
|
|
- modsTreeNode.Title = "Modloader: Fabric";
|
|
|
+ var modsTreeNode = new TreeNode() { Title = "Unknown" };
|
|
|
|
|
|
+ if (version.InheritsFrom is null)
|
|
|
+ modsTreeNode.Title = "Modloader: No";
|
|
|
+ else if (version.Libraries.Any(l => l.Downloads?.Artifact?.Url?.Contains("forge", StringComparison.OrdinalIgnoreCase) ?? false))
|
|
|
+ {
|
|
|
+ modsTreeNode.Title = "Modloader: Forge";
|
|
|
+ OpenErrorWindow("This version contains forge modloader, it installs some libraries that can't be displayed and deleted in current launcher versions manager.");
|
|
|
+ }
|
|
|
+ else if (version.Libraries.Any(l => l.Name.Contains("fabric", StringComparison.OrdinalIgnoreCase)))
|
|
|
+ modsTreeNode.Title = "Modloader: Fabric";
|
|
|
+ else if (version.Libraries.Any(l => l.Name.Contains("optifine",StringComparison.OrdinalIgnoreCase)))
|
|
|
+ modsTreeNode.Title = "Modloader: Optifine modified";
|
|
|
//get mods list
|
|
|
|
|
|
if (modsTreeNode.Title != "No" && Directory.Exists(versionDir + "/mods"))
|
|
@@ -583,9 +584,10 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
|
|
|
if (dirInfo is not null)
|
|
|
{
|
|
|
- var resourcepacksTreeNode = new TreeNode();
|
|
|
-
|
|
|
- resourcepacksTreeNode.Title = "Resoursepacks: " + (dirInfo?.GetDirectories()?.Count() + dirInfo?.GetFiles().Count() ?? 0).ToString();
|
|
|
+ var resourcepacksTreeNode = new TreeNode
|
|
|
+ {
|
|
|
+ Title = "Resoursepacks: " + (dirInfo?.GetDirectories()?.Length + dirInfo?.GetFiles().Length ?? 0).ToString()
|
|
|
+ };
|
|
|
foreach (var resourcepack in dirInfo?.GetFileSystemInfos())
|
|
|
{ resourcepacksTreeNode.SubNode.Add(new TreeNode() { Title = resourcepack.Name }); }
|
|
|
|
|
@@ -635,8 +637,10 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
|
|
|
var usedLibraries = version.Libraries;
|
|
|
|
|
|
- var libTreeNode = new TreeNode();
|
|
|
- libTreeNode.Title = "Libraries";
|
|
|
+ var libTreeNode = new TreeNode
|
|
|
+ {
|
|
|
+ Title = "Libraries"
|
|
|
+ };
|
|
|
|
|
|
if (version.InheritsFrom is not null && DownloadedVersionsDictionary.TryGetValue(version.InheritsFrom, out outVersion) && outVersion is not null)
|
|
|
{
|
|
@@ -772,13 +776,13 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
foreach (var dversion in DownloadedVersions)
|
|
|
{
|
|
|
string json;
|
|
|
- using (StreamReader reader = new StreamReader(dversion.path))
|
|
|
+ using (StreamReader reader = new(dversion.Path))
|
|
|
{
|
|
|
json = reader.ReadToEnd();
|
|
|
}
|
|
|
|
|
|
var versionObject = JsonSerializer.Deserialize<Entity.Version.Version>(json, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
|
|
|
- DownloadedVersionsDictionary.Add(dversion.version, versionObject);
|
|
|
+ DownloadedVersionsDictionary.Add(dversion.Version, versionObject);
|
|
|
|
|
|
if (dversion == _downloadedVersion)
|
|
|
{
|
|
@@ -792,7 +796,7 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- var versionDir = new FileInfo(DownloadedVersion.path)?.Directory?.FullName;
|
|
|
+ var versionDir = new FileInfo(DownloadedVersion.Path)?.Directory?.FullName;
|
|
|
|
|
|
if (versionDir is null)
|
|
|
{
|
|
@@ -882,7 +886,7 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
var result = (double)size;
|
|
|
while (j < _size_label.Length && result > 1024)
|
|
|
{
|
|
|
- result = result / 1024;
|
|
|
+ result /= 1024;
|
|
|
j++;
|
|
|
}
|
|
|
return string.Format("{0:N2}", result) + " " + _size_label[j];
|
|
@@ -895,11 +899,9 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
|
|
|
if (!(dirInfo is not null && dirInfo.Exists)) return nodes;
|
|
|
|
|
|
- if (dirExpression is null)
|
|
|
- dirExpression = (x) => false;
|
|
|
+ dirExpression ??= (x) => false;
|
|
|
|
|
|
- if (fileExpression is null)
|
|
|
- fileExpression = (x) => false;
|
|
|
+ fileExpression ??= (x) => false;
|
|
|
|
|
|
var dirDelegate = dirExpression.Compile();
|
|
|
var fileDelegate = fileExpression.Compile();
|
|
@@ -943,7 +945,7 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if (libDir?.GetFileSystemInfos().Count() > 1)
|
|
|
+ if (libDir?.GetFileSystemInfos().Length > 1)
|
|
|
{
|
|
|
Debug.WriteLine(libFileInfo.FullName);
|
|
|
libFileInfo.Delete();
|
|
@@ -978,16 +980,20 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
{
|
|
|
if (DownloadedVersions is null)
|
|
|
DownloadedVersions = new();
|
|
|
-
|
|
|
- DownloadedVersions.Clear();
|
|
|
- DownloadedVersions = new();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ DownloadedVersions.Clear();
|
|
|
+ DownloadedVersions = new();
|
|
|
+ }
|
|
|
|
|
|
DirectoryInfo versions = new(Settings.minecraftForlderPath + "versions");
|
|
|
try
|
|
|
{
|
|
|
var dirs = versions.GetDirectories("*", SearchOption.TopDirectoryOnly);
|
|
|
- LauncherProfiles profiles = new LauncherProfiles();
|
|
|
- profiles.SelectedProfile = "NotImplemented";
|
|
|
+ LauncherProfiles profiles = new()
|
|
|
+ {
|
|
|
+ SelectedProfile = "NotImplemented"
|
|
|
+ };
|
|
|
|
|
|
foreach (var dir in dirs)
|
|
|
{
|
|
@@ -1011,8 +1017,8 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
|
|
|
public void OnOpenForlder()
|
|
|
{
|
|
|
- if (DownloadedVersion?.version is not null && Path.Exists(Settings.minecraftForlderPath + "versions/" + DownloadedVersion.version))
|
|
|
- Process.Start(new System.Diagnostics.ProcessStartInfo() { FileName = Settings.minecraftForlderPath + "versions/" + DownloadedVersion.version, UseShellExecute = true });
|
|
|
+ if (DownloadedVersion?.Version is not null && Path.Exists(Settings.minecraftForlderPath + "versions/" + DownloadedVersion.Version))
|
|
|
+ Process.Start(new System.Diagnostics.ProcessStartInfo() { FileName = Settings.minecraftForlderPath + "versions/" + DownloadedVersion.Version, UseShellExecute = true });
|
|
|
}
|
|
|
|
|
|
public void OnClosing(object sender, CancelEventArgs args)
|
|
@@ -1044,6 +1050,7 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
|
|
|
{
|
|
|
this.PropertyChanged -= OnFilteredVersionPropertyChanged;
|
|
|
this.PropertyChanged -= OnDownloadedVersionPropertyChanged;
|
|
|
+ GC.SuppressFinalize(this);
|
|
|
}
|
|
|
}
|
|
|
|