using Playnite.SDK; using Playnite.SDK.Data; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LANCommander.PlaynitePlugin { public class SettingsViewModel : ObservableObject, ISettings { private readonly LANCommanderLibraryPlugin Plugin; private string serverAddress { get; set; } = String.Empty; public string ServerAddress { get => serverAddress; set { serverAddress = value; OnPropertyChanged(); } } public string AccessToken { get; set; } = String.Empty; public string RefreshToken { get; set; } = String.Empty; private string installDirectory { get; set; } = String.Empty; public string InstallDirectory { get => installDirectory; set { installDirectory = value; OnPropertyChanged(); } } private string playerName { get; set; } = String.Empty; public string PlayerName { get => playerName; set { playerName = value; OnPropertyChanged(); OnPropertyChanged(nameof(DisplayName)); } } private string playerAlias { get; set; } = String.Empty; public string PlayerAlias { get => playerAlias; set { playerAlias = value; OnPropertyChanged(); OnPropertyChanged(nameof(DisplayName)); } } private string displayName { get; set; } = String.Empty; public string DisplayName { get { if (Plugin != null && Plugin.LANCommanderClient.IsConnected()) return String.IsNullOrWhiteSpace(playerAlias) ? PlayerName : playerAlias; else return ResourceProvider.GetString("LOCLANCommanderDisconnected"); } set { if (PlayerAlias != value) PlayerAlias = value; displayName = value; OnPropertyChanged(); } } private string playerAvatarUrl { get; set; } = String.Empty; public string PlayerAvatarUrl { get => playerAvatarUrl; set { playerAvatarUrl = value; OnPropertyChanged(); OnPropertyChanged(nameof(DisplayName)); } } private bool offlineModeEnabled { get; set; } public bool OfflineModeEnabled { get => offlineModeEnabled; set { offlineModeEnabled = value; OnPropertyChanged(); OnPropertyChanged(nameof(DisplayName)); } } public SettingsViewModel() { } public SettingsViewModel(LANCommanderLibraryPlugin plugin) { Plugin = plugin; Load(); } public void Load() { var settings = Plugin.LoadPluginSettings(); Plugin.PlayniteApi.MainView.UIDispatcher.Invoke(() => { if (settings != null) { ServerAddress = settings.ServerAddress; AccessToken = settings.AccessToken; RefreshToken = settings.RefreshToken; InstallDirectory = settings.InstallDirectory; PlayerName = settings.PlayerName; PlayerAlias = settings.PlayerAlias; DisplayName = settings.PlayerAlias; PlayerAvatarUrl = settings.PlayerAvatarUrl; OfflineModeEnabled = settings.OfflineModeEnabled; } else { InstallDirectory = "C:\\Games"; } }); } public void BeginEdit() { } public void CancelEdit() { } public void EndEdit() { Plugin.SavePluginSettings(this); } public bool VerifySettings(out List errors) { errors = new List(); if (String.IsNullOrWhiteSpace(InstallDirectory)) errors.Add(ResourceProvider.GetString("LOCLANCommanderSettingsBlankInstallDirectoryError")); return errors.Count == 0; } } }