#pragma warning disable CS0618 // Type or member is obsolete /// <summary> /// Adds tooltips for one archived mod version, bolding it if it is active. /// </summary> /// <param name="tooltip">The location where the tooltip will be stored.</param> /// <param name="modInfo">The mod to query.</param> /// <param name="relPath">The relative path of this candidate version.</param> /// <param name="info">The version information about that version.</param> private static void AppendArchivedVersion(StringBuilder tooltip, Mod modInfo, string relPath, Mod.PackagedModInfo info) { var message = (relPath == modInfo.relative_root && modInfo. IsEnabledForActiveDlc()) ? UI.MODSSCREEN.LABEL_ARCHIVED_VERSION_ACTIVE : UI.MODSSCREEN.LABEL_ARCHIVED_VERSION_INACTIVE; string[] supported = (info.supportedContent ?? "").Split(','); int n = supported.Length, version = info.minimumSupportedBuild; for (int i = 0; i < n; i++) { supported[i] = UI.MODSSCREEN.GetLocalizedName(supported[i].Trim()); } if (version <= 0) { version = info.lastWorkingBuild; } tooltip.AppendFormat(message, string.IsNullOrEmpty(relPath) ? UI.MODSSCREEN. LABEL_ARCHIVED_VERSION_DEFAULT.ToString() : relPath, supported.Join(", "), version, info.APIVersion); }
/// <summary> /// A slimmed down and public version of Mod.GetModInfoForFolder to read /// archived version information. /// </summary> /// <param name="modInfo">The mod to query.</param> /// <param name="archivedPath">The relative path to the mod base folder.</param> /// <returns>The version information for that particular archived version.</returns> internal static Mod.PackagedModInfo GetModInfoForFolder(Mod modInfo, string archivedPath) { var items = new List <FileSystemItem>(32); modInfo.file_source.GetTopLevelItems(items, archivedPath); Mod.PackagedModInfo result = null; foreach (var item in items) { if (item.type == FileSystemItem.ItemType.File && item.name == MOD_INFO_FILENAME) { // No option but to read into memory, Klei API has no stream version string contents = modInfo.file_source.Read(Path.Combine(archivedPath, MOD_INFO_FILENAME)); if (!string.IsNullOrEmpty(contents)) { result = Klei.YamlIO.Parse <Mod.PackagedModInfo>(contents, default); } break; } } return(result); }
/// <summary> /// Adds tooltips listing the mod's archived versions. /// </summary> /// <param name="tooltip">The location where the tooltip will be stored.</param> /// <param name="modInfo">The mod to query.</param> private static void AppendArchivedVersions(StringBuilder tooltip, Mod modInfo) { var info = DebugUtils.GetModInfoForFolder(modInfo, ""); var fs = modInfo.file_source; tooltip.Append(UI.MODSSCREEN.LABEL_ARCHIVED_VERSIONS); if (info == null) { // No mod info? Give it vanilla since forever info = new Mod.PackagedModInfo { lastWorkingBuild = 0, minimumSupportedBuild = 0, supportedContent = "VANILLA_ID" } } ; AppendArchivedVersion(tooltip, modInfo, "", info); if (fs.Exists(DebugUtils.ARCHIVED_VERSIONS_FOLDER)) { var archivedItems = ListPool <FileSystemItem, ModActionDelegates> . Allocate(); fs.GetTopLevelItems(archivedItems, DebugUtils. ARCHIVED_VERSIONS_FOLDER); foreach (var oldVersion in archivedItems) { string path = System.IO.Path.Combine(DebugUtils. ARCHIVED_VERSIONS_FOLDER, oldVersion.name); info = DebugUtils.GetModInfoForFolder(modInfo, path); if (info != null) { AppendArchivedVersion(tooltip, modInfo, path, info); } } archivedItems.Recycle(); } }