internal void RemoveSelectedMod()
        {
            if (SelectedMod == null)
            {
                return;
            }

            int listIndex = CatalogModList.IndexOf(SelectedMod);

            _modToEdit = null;
            CatalogModList.Remove(SelectedMod);
            SelectedMod = null;

            // ensure selection in list does not change after removing
            if (listIndex < CatalogModList.Count)
            {
                SelectedMod = CatalogModList[listIndex];
            }
        }
 internal void LoadCatalogXml(string pathToFile)
 {
     try
     {
         Catalog catalog = Util.Deserialize <Catalog>(pathToFile);
         CatalogNameInput = catalog.Name;
         CatalogModList   = new ObservableCollection <CatalogModItemViewModel>(catalog.Mods.Select(m => new CatalogModItemViewModel(m)));
         SelectedMod      = null;
         ClearInputFields();
         CatalogOutput = "";
     }
     catch (Exception e)
     {
         Sys.Message(new WMessage($"{ResourceHelper.Get(StringKey.CouldNotLoadCatalogXml)}: {e.Message}", true)
         {
             LoggedException = e
         });
     }
 }
        internal void AddModToList()
        {
            if (string.IsNullOrWhiteSpace(IDInput))
            {
                IDInput = Guid.NewGuid().ToString();
            }

            if (!Guid.TryParse(IDInput, out Guid parsedID))
            {
                return;
            }

            if (CatalogModList.Any(c => c.Mod.ID == parsedID))
            {
                return;
            }

            if (string.IsNullOrEmpty(VersionInput))
            {
                VersionInput = "1.00";
            }

            if (string.IsNullOrEmpty(MetaVersionInput))
            {
                MetaVersionInput = "1.00";
            }

            DateTime.TryParse(ReleaseDateInput, out DateTime parsedDate);
            decimal.TryParse(VersionInput, System.Globalization.NumberStyles.AllowDecimalPoint, new System.Globalization.CultureInfo(""), out decimal parsedVersion);
            decimal.TryParse(MetaVersionInput, System.Globalization.NumberStyles.AllowDecimalPoint, new System.Globalization.CultureInfo(""), out decimal parsedMetaVersion);

            if (string.IsNullOrEmpty(ReleaseDateInput) || parsedDate == DateTime.MinValue)
            {
                parsedDate = DateTime.Now;
            }

            if (parsedVersion <= 0)
            {
                parsedVersion = 1.0m;
            }

            if (parsedMetaVersion <= 0)
            {
                parsedMetaVersion = 1.0m;
            }

            Mod newMod = new Mod()
            {
                ID            = parsedID,
                Name          = NameInput,
                Author        = AuthorInput,
                Category      = ResourceHelper.ModCategoryTranslations[CategoryInput],
                Tags          = TagsInput.Split(new string[] { "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries).ToList(),
                Description   = DescriptionInput,
                Link          = InfoLinkInput,
                MetaVersion   = parsedMetaVersion,
                LatestVersion = new ModVersion()
                {
                    Links                  = DownloadLinkList.Where(d => !string.IsNullOrEmpty(d.SourceLinkInput)).Select(d => d.GetFormattedLink()).ToList(),
                    ReleaseDate            = parsedDate,
                    Version                = parsedVersion,
                    CompatibleGameVersions = GameVersions.All,
                    PreviewImage           = PreviewImageInput
                }
            };

            CatalogModList.Add(new CatalogModItemViewModel(newMod));

            _modToEdit  = null;
            SelectedMod = CatalogModList.LastOrDefault();
        }