using ReactiveUI; using ReactiveUI.Validation.Extensions; using System; using System.IO; using System.Reflection; using VeloeMinecraftLauncher.MinecraftLauncher; using Avalonia.Controls; namespace VeloeMinecraftLauncher.ViewModels { public class SettingsWindowViewModel : ViewModelBase { public SettingsWindowViewModel() { LauncherVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); var logger = Settings.logger; this.ValidationRule( viewModel => viewModel.MaxRam, value => { UInt32 result; bool resultb = UInt32.TryParse(value, out result); /*logger.Debug("Validator result: {0} {1}", value, resultb);*/ IsValid = resultb; return resultb; }, "Not a number."); } private string launcherVersion; private string minecraftFolderPath = Settings.MinecraftForlderPath; private string javaPath = Settings.JavaPath; private string maxRam = Settings.MaxRam.ToString(); private bool isValid; public bool UseCustomJava { get => Settings.useCustomJava; set { this.RaiseAndSetIfChanged(ref Settings.useCustomJava, value); } } public bool SetMaxRam { get => Settings.setMaxRam; set { this.RaiseAndSetIfChanged(ref Settings.setMaxRam, value); } } public bool SetMinecraftFolder { get => Settings.setPath; set { this.RaiseAndSetIfChanged(ref Settings.setPath, value); } } public bool CheckAssets { get => Settings.checkGameAssets; set { this.RaiseAndSetIfChanged(ref Settings.checkGameAssets, value); } } public string JavaPath { get => javaPath; set { this.RaiseAndSetIfChanged(ref javaPath, value); } } public string MaxRam { get => maxRam.ToString(); set { this.RaiseAndSetIfChanged(ref maxRam, value); } } public bool IsValid { get => isValid; set => this.RaiseAndSetIfChanged(ref isValid, value); } public string MinecraftFolderPath { get => minecraftFolderPath; set { this.RaiseAndSetIfChanged(ref minecraftFolderPath, value); } } public string LauncherVersion { get => launcherVersion; set { this.RaiseAndSetIfChanged(ref launcherVersion, value); } } public bool GameLogToLauncher { get => Settings.gameLogToLauncher; set { this.RaiseAndSetIfChanged(ref Settings.gameLogToLauncher, value); } } public void SaveSettings() { Settings.JavaPath = javaPath; Settings.MinecraftForlderPath = minecraftFolderPath; Settings.MaxRam = UInt32.Parse(maxRam); Settings.SaveSettings(); } public void OpenMinecraftPathDialog(Window window) { OpenFolderDialog dialog = new OpenFolderDialog(); var initPath = String.Empty; if (Settings.MinecraftForlderPath is not null) if(Settings.MinecraftForlderPath != String.Empty) initPath = Path.GetFullPath(Settings.MinecraftForlderPath); dialog.InitialDirectory = initPath; var result = dialog.ShowAsync(window).Result; if (result is null) return; if (result == String.Empty) return; MinecraftFolderPath = result; } public void OpenJavaPathDialog(Window window) { OpenFolderDialog dialog = new OpenFolderDialog(); var initPath = String.Empty; if (Settings.JavaPath is not null) if (Settings.JavaPath != String.Empty) initPath = Path.GetFullPath(Settings.JavaPath); dialog.InitialDirectory = initPath; var result = dialog.ShowAsync(window).Result; if (result is null) return; if (result == String.Empty) return; JavaPath = result; } } }