private IEnumerator StudioDump <T>(string currentRoot, string topLevelFileName, Dictionary <int, T> infoList) where T : LoadCommonInfo { yield return(new WaitUntilStable(infoList, infoList.Count > 0 ? 1 : 3)); var groupResults = GetTranslationsForPath(CombinePaths(currentRoot, topLevelFileName)); foreach (var grouping in infoList.Where(e => IsMod(e.Key)).Select(e => e.Value) .GroupBy(GetStudioGrouping).OrderBy(g => g.Key, StringComparer.OrdinalIgnoreCase)) { var names = grouping.Select(i => i.name).Where(n => !groupResults.ContainsKey(n)).Select( origName => { var shouldInclude = ShouldIncludeEntry(origName, out var translatedName); var result = new { origName, translatedName }; return(new { shouldInclude, result }); }).Where(r => r.shouldInclude && r.result.origName != r.result.translatedName) .Select(r => r.result) .OrderBy(n => n.origName, StringComparer.OrdinalIgnoreCase) .ToList(); if (names.Count < 1) { continue; } TextResourceHelper.AddLocalizationToResults(groupResults, $"{FilePattern}{grouping.Key}", FilePattern); foreach (var entry in names) { TextResourceHelper.AddLocalizationToResults(groupResults, entry.origName, entry.translatedName); } } }
private IEnumerator StudioDump <T>(string currentRoot, string topLevelFileName, Dictionary <int, Dictionary <int, Dictionary <int, T> > > nestedInfoList, Dictionary <int, GroupInfo> groupInfoList) where T : LoadCommonInfo { var jobs = new List <Coroutine> { StartCoroutine(WaitForStableDictionary(nestedInfoList)), StartCoroutine(WaitForStableDictionary(groupInfoList)) }; foreach (var job in jobs) { yield return(job); } jobs.Clear(); var groupResults = GetTranslationsForPath(CombinePaths(currentRoot, topLevelFileName)); foreach (var group in nestedInfoList.Select(group => { var groupRoot = CombinePaths(currentRoot, $"group_{group.Key:D10}"); var groupInfo = GetStudioGroupInfo(groupInfoList, group.Key); var groupName = groupInfo?.name ?? string.Empty; return(new { group, groupRoot, groupInfo, groupName }); }).OrderBy(g => g.groupRoot, StringComparer.OrdinalIgnoreCase)) { var categoryResults = GetTranslationsForPath(CombinePaths(group.groupRoot, "category_names.txt")); if (ShouldIncludeEntry(group.groupName, out var groupNameTrans)) { TextResourceHelper.AddLocalizationToResults(groupResults, group.groupName, groupNameTrans); } foreach (var category in group.group.Value.Select(category => { var categoryName = GetStudioGroupCategoryName(group.groupInfo, category.Key); var categoryFileName = $"category_{category.Key:D10}.txt"; return(new { category, categoryName, categoryFileName }); }).OrderBy(c => c.categoryFileName, StringComparer.OrdinalIgnoreCase)) { if (ShouldIncludeEntry(category.categoryName, out var categoryNameTrans)) { TextResourceHelper.AddLocalizationToResults(categoryResults, category.categoryName, categoryNameTrans); } jobs.Add(StartCoroutine(StudioDump(group.groupRoot, category.categoryFileName, category.category.Value))); } } foreach (var job in jobs) { yield return(job); } }
private IEnumerator MakerDump() { NotificationMessage = "Collecting Maker Mod Strings, please wait..."; ChaListControl chaListCtrl = null; while (chaListCtrl == null) { yield return(null); #if !KKS Character.Instance.SafeProc(i => chaListCtrl = i.chaListCtrl); #else if (Character.Instance == null || !Character.Instance.isActiveAndEnabled) { continue; } chaListCtrl = Character.chaListCtrl; #endif } var categories = Enum.GetValues(typeof(ChaListDefine.CategoryNo)).Cast <ChaListDefine.CategoryNo>(); foreach (var category in categories) { try { var results = GetTranslationsForPath(CombinePaths(MakerRoot, $"{category}.txt")); var categoryInfo = chaListCtrl.GetCategoryInfo(category); foreach (var grouping in categoryInfo.Values.Where(IsMod).GroupBy(GetMakerGrouping) .OrderBy(g => g.Key, StringComparer.OrdinalIgnoreCase)) { try { var names = grouping.Select(i => i.Name).Where(n => !results.ContainsKey(n)).Select( origName => { var shouldInclude = ShouldIncludeEntry(origName, out var translatedName); var result = new { origName, translatedName }; return(new { shouldInclude, result }); }).Where(r => r.shouldInclude && r.result.origName != r.result.translatedName) .Select(r => r.result) .OrderBy(n => n.origName, StringComparer.OrdinalIgnoreCase) .ToList(); if (names.Count < 1) { continue; } TextResourceHelper.AddLocalizationToResults(results, $"{FilePattern}{grouping.Key}", FilePattern); foreach (var entry in names) { TextResourceHelper.AddLocalizationToResults(results, entry.origName, entry.translatedName); } } catch (Exception err) { Logger.LogError($"Looping {grouping}: {err.Message}"); UnityDebug.LogException(err); } } } catch (Exception err) { Logger.LogError($"Looping {category}: {err.Message}"); UnityDebug.LogException(err); } } DumpCompleted = true; }