예제 #1
0
#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);
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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();
            }
        }