using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; using StardewModdingAPI.Toolkit.Framework.Clients.Wiki; namespace StardewModdingAPI.Web.Framework.Caching.Wiki { /// Manages cached wiki data in-memory. internal class WikiCacheMemoryRepository : BaseCacheRepository, IWikiCacheRepository { /********* ** Fields *********/ /// The saved wiki metadata. private Cached? Metadata; /// The cached wiki data. private Cached[] Mods = Array.Empty>(); /********* ** Public methods *********/ /// Get the cached wiki metadata. /// The fetched metadata. public bool TryGetWikiMetadata([NotNullWhen(true)] out Cached? metadata) { metadata = this.Metadata; return metadata != null; } /// Get the cached wiki mods. /// A filter to apply, if any. public IEnumerable> GetWikiMods(Func? filter = null) { foreach (var mod in this.Mods) { if (filter == null || filter(mod.Data)) yield return mod; } } /// Save data fetched from the wiki compatibility list. /// The current stable Stardew Valley version. /// The current beta Stardew Valley version. /// The mod data. public void SaveWikiData(string? stableVersion, string? betaVersion, IEnumerable mods) { this.Metadata = new Cached(new WikiMetadata(stableVersion, betaVersion)); this.Mods = mods.Select(mod => new Cached(mod)).ToArray(); } } }