v2.1.3 — Open Library (patch)
A bug-fix patch resolving the outstanding issues from #24 and #36, plus a full UI-localization pass.
Fixed
- Genre-filtered music badges now actually filter by genre (#24). A custom badge like "play 50 disco tracks" was counting all music plays once any single disco track had played — so listening to metal could unlock a disco badge. Music plays and listening time are now tracked per genre, and genre matching is case-insensitive ("disco" matches "Disco"). The visual badge builder gains three genre-filtered metrics — Music plays of a genre, Music hours of a genre, and Items watched of a genre — with a genre field that appears when you pick one.
- Custom badges now fully delete (#24). Deleting a custom badge removed it from the admin screen but left earned copies in users' profiles — and badges made with the visual builder were saved to a different store than the list/delete UI read, so they could never be removed at all. The builder, list, and delete now share one store, and deleting a badge purges its earned + equipped copies from every user profile. A one-time, ID-preserving migration moves any badges created by the old builder into the unified store on first startup, so already-earned copies stay intact.
- Header UI no longer disappears when another header plugin is involved (#36). When a second header-injecting plugin (e.g. the Ratings plugin) stripped Achievement Badges' scripts from
index.htmlbut left a version stamp behind, the plugin assumed it was already patched and never re-injected — so the achievements header vanished and reinstalling didn't fix it. The startup guard now keys on the actual script tag, so a stripped page is always repaired. - Badge categories no longer show raw keys (#24). Categories such as "Studio Specialist" and "Books" displayed as
category.Studio Specialiston the admin page. Fixed, and every built-in category is now translated.
Added
- Full UI localization. The custom-badge builder's metric list (previously raw names like
MoviesWatched), the quest builder, the power-up and cosmetic pickers, and assorted status messages are now translated across all 8 languages (English, French, Spanish, German, Italian, Portuguese, Chinese, Japanese).
Notes
- Ebook reading progress still isn't tracked (#24). Jellyfin exposes no page count or reading time for ebooks, so Book badges credit on mark-as-played completion, not reading progress. (Plugins that place non-book items in a Book library — e.g. emulator/game plugins — will have those items counted as "books" whenever Jellyfin marks them played.)
Upgrade
Drop-in from v2.1.x / v2.0.x — no schema breakage. The one-time custom-badge migration is automatic and idempotent. 52/52 tests pass on .NET 9 / Jellyfin 10.11.x. Sigstore-signed + SLSA build-provenance attested.