using System.Reflection; using System.Windows.Input; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Microsoft.UI.Xaml; using RustTools.Contracts.Services; using RustTools.Helpers; using Windows.ApplicationModel; namespace RustTools.ViewModels; public partial class SettingsViewModel : ObservableRecipient { private readonly IThemeSelectorService _themeSelectorService; [ObservableProperty] private ElementTheme _elementTheme; [ObservableProperty] private string _versionDescription; public ICommand SwitchThemeCommand { get; } public SettingsViewModel(IThemeSelectorService themeSelectorService) { _themeSelectorService = themeSelectorService; _elementTheme = _themeSelectorService.Theme; _versionDescription = GetVersionDescription(); SwitchThemeCommand = new RelayCommand( async (param) => { if (ElementTheme != param) { ElementTheme = param; await _themeSelectorService.SetThemeAsync(param); } }); } private static string GetVersionDescription() { Version version; if (RuntimeHelper.IsMSIX) { var packageVersion = Package.Current.Id.Version; version = new(packageVersion.Major, packageVersion.Minor, packageVersion.Build, packageVersion.Revision); } else { version = Assembly.GetExecutingAssembly().GetName().Version!; } return $"{"AppDisplayName".GetLocalized()} - {version.Major}.{version.Minor}.{version.Build}.{version.Revision}"; } }