using System; using System.Collections.ObjectModel; using System.Reflection; using System.Threading.Tasks; using Avalonia; using Avalonia.Platform.Storage; using Glitonea.Extensions; using Glitonea.Mvvm; using Glitonea.Mvvm.Messaging; using Glitonea.Utilities; using Saradomin.Infrastructure; using Saradomin.Infrastructure.Services; using Saradomin.Model.Settings.Client; using Saradomin.Model.Settings.Launcher; using Saradomin.Utilities; namespace Saradomin.ViewModel.Controls { public class SettingsViewModel : ViewModelBase { private readonly ISettingsService _settingsService; public LauncherSettings Launcher => _settingsService.Launcher; public ClientSettings Client => _settingsService.Client; public string VersionString { get { var version = Assembly.GetExecutingAssembly().GetName().Version!; return $"Version {version.Major}.{version.Minor}.{version.Build}"; } } public ClientSettings.ServerProfile ServerProfile { get { switch (Client.GameServerAddress) { case ClientSettings.LiveServerAddress: return ClientSettings.ServerProfile.Live; case ClientSettings.TestServerAddress: return ClientSettings.ServerProfile.Testing; case ClientSettings.LocalServerAddress: return ClientSettings.ServerProfile.Local; default: return ClientSettings.ServerProfile.Unsupported; } } set { Client.ManagementServerAddress = value.ToDescription().Hint; Client.GameServerAddress = value.ToDescription().Hint; OnPropertyChanged(nameof(ServerProfile)); } } public ObservableCollection ServerProfiles { get; private set; } = new() { ClientSettings.ServerProfile.Live.ToDescription(), ClientSettings.ServerProfile.Testing.ToDescription(), ClientSettings.ServerProfile.Local.ToDescription() }; public SettingsViewModel(ISettingsService settingsService) { _settingsService = settingsService; Message.Subscribe(this, OnMainViewLoaded); } public void LaunchScapeWebsite() => CrossPlatform.LaunchURL("https://2009scape.org"); public void OpenPluginTutorial() => CrossPlatform.LaunchURL("https://gitlab.com/2009scape/tools/client-plugins"); public void LaunchProjectWebsite() => CrossPlatform.LaunchURL("https://gitlab.com/2009scape/Saradomin-Launcher"); public async Task BrowseForJavaExecutable() { var window = Application.Current!.GetMainWindow(); var pickerOptions = new FilePickerOpenOptions { Title = "Browse for Java...", AllowMultiple = false, SuggestedStartLocation =await window!.StorageProvider.TryGetFolderFromPathAsync( Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) ) }; var storageFiles = await window.StorageProvider.OpenFilePickerAsync(pickerOptions); if (storageFiles.Count > 0) { Launcher.JavaExecutableLocation = storageFiles[0].Path.AbsolutePath; } } private void OnMainViewLoaded(MainViewLoadedMessage _) { Message.Subscribe(this, OnSettingsModified); } private void OnSettingsModified(SettingsModifiedMessage _) { _settingsService.SaveAll(); } } }