What's fixed
🏆 Equipped-showcase pills refused to hide (for real this time)
I thought I fixed this in v1.7.0. I was wrong — missed the actual root cause.
The bug: WebInjectionService patches Jellyfin's index.html on disk so our scripts survive client-side caching. Its idempotency check was looking for <!-- achievementbadges-bootstrap --> and skipping if found. Fine for fresh installs — catastrophic for upgrades. Pre-v1.7.0 installs had a bloated inline script block that unconditionally created the sidebar pills + header dots, ignoring both the user preference AND the admin override. When you upgraded to v1.7.0/1/2, the service saw the old marker and said "already patched" — leaving the buggy old block in place alongside the new gated one.
Fix:
- Markers are now versioned:
<!-- ab-vX.Y.Z -->stamp + start/end markers around the block. - On every upgrade,
StripOldInjections()walks every prior bootstrap block and removes it before re-injecting. Handles three shapes in the wild: current (clean start+end markers), v1.7.0-v1.7.2 (start marker + three script tags), and pre-v1.7.0 (start marker + inline script + script tags, no end marker — scans to the closing</script>afterclient-script/enhance). - Upgrading from any prior version now gets a clean, gated block.
🌍 Language dropdown reverting to "Default (admin)"
Handler was blocking re-render on the save promise. Any server hiccup or rate-limit rolled the <select> value back to default while the user watched.
Fix: re-renders from the locally-chosen value immediately, hard-pins select.value after render as belt-and-braces, and runs save in the background. Also mirrors the pick to localStorage so page reloads pick it up.
👥 Friends drawer redesigned
- Moved to top-left (vertically centered) — was getting in the way at bottom-right. Corners on mobile.
- Full visual overhaul: rounded-rect gradient button, avatar circles with initials + online-dot overlay, proper icon buttons for accept/decline/remove, empty-state illustrations with Material icons, blurred backdrop, left-side slide-in.
- Slides in from the LEFT now to match the button position.
⚙️ Admin page language now follows user's preference
Was pulling from browser navigator.language. Now resolves via (your saved Achievement Badges language → admin server default → localStorage → navigator → English). Writes to localStorage when changed on the standalone page so the next admin load is snappy.
🙏 README credits
@frenchyx24 now credited by name at the top of the credits section with a link to his issue and explicit thanks for the full 171-badge French translation merged in v1.7.2.
MD5: BB321DF533FC75013FA6411B9C89D465