Esempio n. 1
0
        internal static bool RemoveTagFromFM(FanMission fm, string catText, string tagText)
        {
            if (tagText.IsEmpty())
            {
                return(false);
            }

            // Parent node (category)
            if (catText.IsEmpty())
            {
                // TODO: These messageboxes are annoying, but they prevent accidental deletion.
                // Figure out something better.
                bool cont = Core.View.AskToContinue(LText.TagsTab.AskRemoveCategory, LText.TagsTab.TabText, true);
                if (!cont)
                {
                    return(false);
                }

                CatAndTags?cat = fm.Tags.FirstOrDefault(x => x.Category == tagText);
                if (cat != null)
                {
                    fm.Tags.Remove(cat);
                    UpdateFMTagsString(fm);

                    // TODO: Profile the FirstOrDefaults and see if I should make them for loops
                    GlobalCatAndTags?globalCat = GlobalTags.FirstOrDefault(x => x.Category.Name == cat.Category);
                    if (globalCat != null && !globalCat.Category.IsPreset)
                    {
                        if (globalCat.Category.UsedCount > 0)
                        {
                            globalCat.Category.UsedCount--;
                        }
                        if (globalCat.Category.UsedCount == 0)
                        {
                            GlobalTags.Remove(globalCat);
                        }
                    }
                }
            }
            // Child node (tag)
            else
            {
                bool cont = Core.View.AskToContinue(LText.TagsTab.AskRemoveTag, LText.TagsTab.TabText, true);
                if (!cont)
                {
                    return(false);
                }

                CatAndTags?cat = fm.Tags.FirstOrDefault(x => x.Category == catText);
                string?    tag = cat?.Tags.FirstOrDefault(x => x == tagText);
                if (tag != null)
                {
                    cat !.Tags.Remove(tag);
                    if (cat.Tags.Count == 0)
                    {
                        fm.Tags.Remove(cat);
                    }
                    UpdateFMTagsString(fm);

                    GlobalCatAndTags?globalCat = GlobalTags.FirstOrDefault(x => x.Category.Name == cat.Category);
                    GlobalCatOrTag?  globalTag = globalCat?.Tags.FirstOrDefault(x => x.Name == tagText);
                    if (globalTag != null && !globalTag.IsPreset)
                    {
                        if (globalTag.UsedCount > 0)
                        {
                            globalTag.UsedCount--;
                        }
                        if (globalTag.UsedCount == 0)
                        {
                            globalCat !.Tags.Remove(globalTag);
                        }
                        if (globalCat !.Tags.Count == 0)
                        {
                            GlobalTags.Remove(globalCat);
                        }
                    }
                }
            }

            Ini.WriteFullFMDataIni();

            return(true);
        }