using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Threading.Tasks; using MPF.Core.Data; using MPF.Core.UI.ComboBoxItems; using SabreTools.RedumpLib.Web; namespace MPF.Core.UI.ViewModels { /// /// Constructor /// public class OptionsViewModel : INotifyPropertyChanged { #region Fields /// /// Title for the window /// public string? Title { get => _title; set { _title = value; TriggerPropertyChanged(nameof(Title)); } } private string? _title; /// /// Current set of options /// public Options Options { get; } /// /// Flag for if settings were saved or not /// public bool SavedSettings { get; set; } /// public event PropertyChangedEventHandler? PropertyChanged; #endregion #region Lists /// /// List of available internal programs /// public static List> InternalPrograms => PopulateInternalPrograms(); /// /// Current list of supported system profiles /// public static List Systems => RedumpSystemComboBoxItem.GenerateElements().ToList(); #endregion /// /// Constructor for pure view model /// public OptionsViewModel() { Options = new Options(); } /// /// Constructor for in-code /// public OptionsViewModel(Options baseOptions) { Options = new Options(baseOptions); } #region Population /// /// Get a complete list of supported internal programs /// private static List> PopulateInternalPrograms() { var internalPrograms = new List { InternalProgram.DiscImageCreator, InternalProgram.Aaru, InternalProgram.Redumper }; return internalPrograms.Select(ip => new Element(ip)).ToList(); } #endregion #region UI Commands /// /// Test Redump login credentials /// #if NET40 public static Task<(bool?, string?)> TestRedumpLogin(string username, string password) #else public static async Task<(bool?, string?)> TestRedumpLogin(string username, string password) #endif { #if NET40 return Task.Factory.StartNew(() => RedumpWebClient.ValidateCredentials(username, password)); #elif NETFRAMEWORK return await Task.Run(() => RedumpWebClient.ValidateCredentials(username, password)); #else return await RedumpHttpClient.ValidateCredentials(username, password); #endif } #endregion #region Property Updates /// /// Trigger a property changed event /// private void TriggerPropertyChanged(string propertyName) { // If the property change event is initialized PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } #endregion } }