using System.Collections.Generic; using System.Linq; using MPF.Core.Data; using MPF.Core.UI.ComboBoxItems; using MPF.Core.Utilities; using SabreTools.RedumpLib.Data; namespace MPF.Core.UI.ViewModels { public class DiscInformationViewModel { #region Fields /// /// Application-level Options object /// public Options Options { get; private set; } /// /// SubmissionInfo object to fill and save /// public SubmissionInfo SubmissionInfo { get; private set; } #endregion #region Lists /// /// List of available disc categories /// public List> Categories { get; private set; } = Element.GenerateElements().ToList(); /// /// List of available regions /// public List> Regions { get; private set; } = Element.GenerateElements().ToList(); /// /// List of Redump-supported Regions /// private static readonly List RedumpRegions = new() { Region.Argentina, Region.Asia, Region.AsiaEurope, Region.AsiaUSA, Region.Australia, Region.AustraliaGermany, Region.AustraliaNewZealand, Region.Austria, Region.AustriaSwitzerland, Region.Belarus, Region.Belgium, Region.BelgiumNetherlands, Region.Brazil, Region.Bulgaria, Region.Canada, Region.China, Region.Croatia, Region.Czechia, Region.Denmark, Region.Estonia, Region.Europe, Region.EuropeAsia, Region.EuropeAustralia, Region.EuropeCanada, Region.EuropeGermany, Region.Export, Region.Finland, Region.France, Region.FranceSpain, Region.Germany, Region.GreaterChina, Region.Greece, Region.Hungary, Region.Iceland, Region.India, Region.Ireland, Region.Israel, Region.Italy, Region.Japan, Region.JapanAsia, Region.JapanEurope, Region.JapanKorea, Region.JapanUSA, Region.SouthKorea, Region.LatinAmerica, Region.Lithuania, Region.Netherlands, Region.NewZealand, Region.Norway, Region.Poland, Region.Portugal, Region.Romania, Region.RussianFederation, Region.Scandinavia, Region.Serbia, Region.Singapore, Region.Slovakia, Region.SouthAfrica, Region.Spain, Region.SpainPortugal, Region.Sweden, Region.Switzerland, Region.Taiwan, Region.Thailand, Region.Turkey, Region.UnitedArabEmirates, Region.UnitedKingdom, Region.UKAustralia, Region.Ukraine, Region.UnitedStatesOfAmerica, Region.USAAsia, Region.USAAustralia, Region.USABrazil, Region.USACanada, Region.USAEurope, Region.USAGermany, Region.USAJapan, Region.USAKorea, Region.World, }; /// /// List of available languages /// public List> Languages { get; private set; } = Element.GenerateElements().ToList(); /// /// List of Redump-supported Languages /// private static readonly List RedumpLanguages = new() { Language.Afrikaans, Language.Albanian, Language.Arabic, Language.Armenian, Language.Basque, Language.Belarusian, Language.Bulgarian, Language.Catalan, Language.Chinese, Language.Croatian, Language.Czech, Language.Danish, Language.Dutch, Language.English, Language.Estonian, Language.Finnish, Language.French, Language.Gaelic, Language.German, Language.Greek, Language.Hebrew, Language.Hindi, Language.Hungarian, Language.Icelandic, Language.Indonesian, Language.Italian, Language.Japanese, Language.Korean, Language.Latin, Language.Latvian, Language.Lithuanian, Language.Macedonian, Language.Norwegian, Language.Polish, Language.Portuguese, Language.Panjabi, Language.Romanian, Language.Russian, Language.Serbian, Language.Slovak, Language.Slovenian, Language.Spanish, Language.Swedish, Language.Tamil, Language.Thai, Language.Turkish, Language.Ukrainian, Language.Vietnamese, }; /// /// List of available languages /// public List> LanguageSelections { get; private set; } = Element.GenerateElements().ToList(); #endregion /// /// Constructor /// public DiscInformationViewModel(Options options, SubmissionInfo? submissionInfo) { Options = options; SubmissionInfo = submissionInfo?.Clone() as SubmissionInfo ?? new SubmissionInfo(); } #region Helpers /// /// Load the current contents of the base SubmissionInfo to the UI /// /// TODO: Convert selected list item to binding public void Load() { if (SubmissionInfo.CommonDiscInfo?.Languages != null) Languages.ForEach(l => l.IsChecked = SubmissionInfo.CommonDiscInfo.Languages.Contains(l)); if (SubmissionInfo.CommonDiscInfo?.LanguageSelection != null) LanguageSelections.ForEach(ls => ls.IsChecked = SubmissionInfo.CommonDiscInfo.LanguageSelection.Contains(ls)); } /// /// Save the current contents of the UI to the base SubmissionInfo /// /// TODO: Convert selected list item to binding public void Save() { if (SubmissionInfo.CommonDiscInfo == null) SubmissionInfo.CommonDiscInfo = new CommonDiscInfoSection(); SubmissionInfo.CommonDiscInfo.Languages = Languages.Where(l => l.IsChecked).Select(l => l?.Value).ToArray(); if (!SubmissionInfo.CommonDiscInfo.Languages.Any()) SubmissionInfo.CommonDiscInfo.Languages = [null]; SubmissionInfo.CommonDiscInfo.LanguageSelection = LanguageSelections.Where(ls => ls.IsChecked).Select(ls => ls?.Value).ToArray(); SubmissionInfo.CommonDiscInfo.Title = InfoTool.NormalizeDiscTitle(SubmissionInfo.CommonDiscInfo.Title, SubmissionInfo.CommonDiscInfo.Languages); } /// /// Repopulate the list of Languages based on Redump support /// public void SetRedumpLanguages() { this.Languages = RedumpLanguages.Select(l => new Element(l)).ToList(); } /// /// Repopulate the list of Regions based on Redump support /// public void SetRedumpRegions() { this.Regions = RedumpRegions.Select(r => new Element(r)).ToList(); } #endregion } }