internal void AddEmptyDownloadLink()
        {
            if (DownloadLinkList.Any(d => string.IsNullOrEmpty(d.SourceLinkInput)))
            {
                return; // don't add a new link since there is an empty one in the list that can be filled out
            }

            DownloadLinkList.Add(new DownloadLinkViewModel(LocationType.GDrive.ToString(), ""));
        }
 private void ClearInputFields()
 {
     IDInput           = Guid.NewGuid().ToString();
     NameInput         = "";
     AuthorInput       = "";
     DescriptionInput  = "";
     CategoryInput     = ResourceHelper.Get(StringKey.Unknown);
     TagsInput         = "";
     VersionInput      = "1.00";
     MetaVersionInput  = "1.00";
     PreviewImageInput = "";
     InfoLinkInput     = "";
     ReleaseNotesInput = "";
     ReleaseDateInput  = DateTime.Now.ToString("MM/dd/yyyy");
     DownloadLinkList.Clear();
     AddEmptyDownloadLink();
 }
        internal void LoadModXmlFromIro(string pathToIroFile)
        {
            try
            {
                Mod parsedMod = new ModImporter().ParseModXmlFromSource(pathToIroFile);

                if (parsedMod == null)
                {
                    Sys.Message(new WMessage(ResourceHelper.Get(StringKey.CouldNotLoadModXmlFromIroFile), true));
                    return;
                }

                IDInput           = parsedMod.ID.ToString();
                NameInput         = parsedMod.Name;
                CategoryInput     = ResourceHelper.Get(ModLoadOrder.GetCategoryKey(parsedMod.Category));
                AuthorInput       = parsedMod.Author;
                DescriptionInput  = parsedMod.Description;
                VersionInput      = parsedMod.LatestVersion.Version.ToString();
                MetaVersionInput  = "1.00";
                PreviewImageInput = "";
                TagsInput         = "";
                InfoLinkInput     = parsedMod.Link;
                ReleaseNotesInput = parsedMod.LatestVersion.ReleaseNotes;
                ReleaseDateInput  = parsedMod.LatestVersion.ReleaseDate.ToString("MM/dd/yyyy");

                if (string.IsNullOrWhiteSpace(CategoryInput))
                {
                    CategoryInput = ResourceHelper.Get(StringKey.Unknown);
                }

                DownloadLinkList.Clear();
                AddEmptyDownloadLink();
                _modToEdit = null;
            }
            catch (Exception e)
            {
                Sys.Message(new WMessage($"{ResourceHelper.Get(StringKey.CouldNotLoadModXmlFromIroFile)}: {e.Message}", true)
                {
                    LoggedException = e
                });
            }
        }
        internal void LoadModXml(string pathToModXml)
        {
            try
            {
                ModInfo mod = new ModInfo(pathToModXml, Sys._context);

                IDInput           = mod.ID.ToString();
                NameInput         = mod.Name;
                CategoryInput     = ResourceHelper.Get(ModLoadOrder.GetCategoryKey(mod.Category));
                AuthorInput       = mod.Author;
                DescriptionInput  = mod.Description;
                VersionInput      = mod.Version.ToString();
                PreviewImageInput = "";
                TagsInput         = "";
                InfoLinkInput     = mod.Link;
                ReleaseNotesInput = mod.ReleaseNotes;
                ReleaseDateInput  = mod.ReleaseDate.ToString("MM/dd/yyyy");

                if (string.IsNullOrWhiteSpace(CategoryInput))
                {
                    CategoryInput = ResourceHelper.Get(StringKey.Unknown);
                }
                MetaVersionInput = "1.00";

                DownloadLinkList.Clear();
                AddEmptyDownloadLink();

                _modToEdit = null;
            }
            catch (Exception e)
            {
                Sys.Message(new WMessage($"{ResourceHelper.Get(StringKey.CouldNotLoadModXml)}: {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();
        }