Fixed + polished
🌍 Admin page translations — definitive fix
Stopped relying on ApiClient for URL resolution. The translator now:
- Parses
window.location.pathnameto find the/web/segment → server root. Works on vanilla installs AND reverse-proxy subpaths (/jellyfin/...) without needing ApiClient at all. - Fires an unconditional first-paint load from
localStorage/navigator.languageimmediately. Then progressively upgrades via ApiClient + user prefs. Page is never stuck waiting for ApiClient. - After translations land, re-invokes
loadCatalogso the badge grid re-fetches with?lang=and shows localised titles without a manual reload.
👤 Friend avatars
Each friend / request / search row now shows the user's Jellyfin profile image as a background-image. Initials fall back when no image is set.
🟢 Relaxed online check
Previously only SessionInfo.IsActive=true counted as online — so casual browsing didn't show up. Now also counts sessions whose LastActivityDate is within 15 minutes, so a friend browsing Jellyfin without actively playing still shows as "Online".
🔒 New privacy toggles
- Appear offline to friends — you show as offline even while browsing.
- Hide what I'm watching — still show as online, but friends can't see the series/episode.
Both in the Privacy section of the user preferences panel. Enforced server-side in FriendsService.BuildFriendRow so they can't be bypassed by client tampering.
📱 Request rows compact
Accept + Decline buttons collapsed to icon-only with tooltips. Friend-add button in search results too. No more visually-bloated rows.
🗣️ Locale parity
+4 new settings keys (appear_offline, appear_offline_desc, hide_now_playing, hide_now_playing_desc) × 8 languages — 680 total keys per translation file.
MD5: 9F6C29CA2F91B67203244A933357CFB2