Namespace Serenity.Localization.Installation.Settings.Editor.Hub.Services
Classes
SerenityHubEditorPrefsStore
ISerenityHubKeyValueStore backed by UnityEditor.EditorPrefs — personal, per-user state that
persists across sessions. Used for recents (ADR-8) and favorites (ADR-8), consistent with the existing
SerenityHubWindow.PREFS_KEY_DONT_AUTO_OPEN mechanism (a plain Serenity.Hub.* key, no
per-project scoping — UnityEditor.EditorPrefs is per-user by design, matching the rest of the Hub).
SerenityHubFavoriteIcons
Resolves the star icon a SerenityHubToolCard's favorite toggle renders, with the same deterministic, never-throwing fallback chain SerenityHubIcons uses for catalog entries (UX feedback batch 9, fix 3): a primary built-in icon key, then an alternate key for skins/versions where the primary is unavailable, then a blank UnityEngine.GUIContent as the last resort so the toggle itself is still functional even if no built-in star icon resolves.
SerenityHubFavorites
User-toggled set of favorite catalog entries, keyed by SerenityHubToolEntry.Id and stored under
SerenityHubEditorPrefsStore (ADR-8). Unbounded — unlike recents, no eviction is applied.
SerenityHubIcons
Resolves a catalog entry's icon with a deterministic, never-throwing fallback chain (spec §10, ADR-8):
the entry's own IconKey → a per-SerenityHubCategory default → a generic fallback icon.
A missing or misspelled icon key never blocks the rest of a card (title, description, launch action).
SerenityHubLauncher
Launches a real Tools/Serenity/... tool exactly the way a direct menu click would
(UnityEditor.EditorApplication.ExecuteMenuItem(System.String)) and records it as a Hub-originated recent. This is the
single choke point every catalog card, search result, and Home recent/favorite click launches through, so
that "recents record only Hub-originated launches" (spec §8) holds without instrumenting individual tools.
SerenityHubRecents
LRU list (max 8) of the most recent tools launched from within the Hub, stored under
SerenityHubEditorPrefsStore (ADR-8). Records the launched tool's MenuPath — the only
handle SerenityHubLauncher has at launch time — most-recent-first, deduping an already-recent
path to the front instead of adding a duplicate. Per spec §8, this MUST only ever be written by
Launch(string), never by instrumenting individual tool windows.
SerenityHubSessionStateStore
ISerenityHubKeyValueStore backed by UnityEditor.SessionState — survives domain reloads within an editor session, resets on editor restart. Used for the validation result cache (ADR-7), where freshness must not persist across restarts.
SerenityHubValidationCache
Per-validator-kind cache of the last Serenity.Global.Infrastructure.Editor.Validation.SerenityValidationReport run from the Hub, backed by SerenityHubSessionStateStore (ADR-7). Never runs a validator itself — Home and the Validate view read whatever is cached and render a "not yet run" state when nothing has been written for that kind this session.
SerenityHubValidationSummary
Immutable snapshot of a cached validator run — result counts, which validators ran, and when — read without triggering a fresh run. Produced by TryReadSummary(string, out SerenityHubValidationSummary).
Interfaces
ISerenityHubKeyValueStore
Minimal string key/value persistence boundary the Hub's session- and preference-backed services depend on. Isolates UnityEditor.SessionState / UnityEditor.EditorPrefs access behind an explicit, constructor-injected dependency so cache freshness, eviction, and serialization logic can be tested against a fake instead of real editor-global state.