github ZL154/AchievementBadges_for_Jellyfin v1.7.2
v1.7.2 - CRITICAL data-loss fix + friends drawer + French merge + settings fix

latest releases: v2.4.0, v2.3.1, v2.3.0...
5 months ago

⚠️ CRITICAL data-loss fix — upgrade strongly recommended if you were on 1.7.0 / 1.7.1

Root cause: Load() in AchievementBadgeService wrapped the entire deserialise + migrate + evaluate loop in a single try/catch. Any exception at any stage (stale profile schema, an unrecognised enum value, a null where something non-null was expected) hit the outer catch, which silently wiped _userProfiles to an empty dict. The next Save() call — triggered moments later by startup re-evaluation, preferences POST, login-ping, quest creation, equip/unequip, basically anything — then stamped {} on badges.json via the atomic write. Every user's badges, counters, prestige, bought, equipped, pinned, compare-history — permanently gone. The atomic-write pattern even cleanly overwrote the last good file on disk.

Fix in v1.7.2:

  • Parse failures now quarantine badges.jsonbadges.json.corrupt-<timestamp> and set a _loadFailed flag. Save() is refused for the rest of the process, so your real file can't be overwritten with an empty one.
  • Per-profile errors during SyncDefinitions/EvaluateBadges are caught individually — one bad profile can't poison every user.
  • Save() now writes badges.json.bak before each atomic rename, giving a one-step revert path for future incidents.

If you were hit: check <JF>/config/plugins/configurations/achievementbadges/ for badges.json.corrupt-* (v1.7.2 would have quarantined if there's still a cause today) or your Jellyfin automatic backups. If none survived — sorry, truly. There's no recovery.


Other fixes

🔧 Settings panel stuck on "Loading settings..."

The language-change handler kicked off multiple async chains and if any threw silently the panel got stuck. Now awaits the preference POST, fetches fresh prefs, and always falls through to re-render with a safety catch.

👥 Friends drawer (rebuilt)

  • Floating people button bottom-right of the achievements page with a red badge for pending requests.
  • Xbox-style right-side drawer with three tabs: Friends / Requests / Find.
  • Bi-directional friendship with a proper request → accept flow (no more silent following):
    • POST /friends/{id} sends a request
    • POST /friends/{id}/accept creates the mutual link
    • DELETE /friends/{id} removes / declines from both sides
  • Type-to-search user picker in the Find tab — no more giant dropdown of every server user.
  • Auto-accept when the target has already requested us.
  • Per-side privacy enforced (equipped preview respects the friend's own privacy toggles).

🇫🇷 French translations from @frenchyx24

All 171 hand-translated French badge titles + descriptions merged from issue #5. Thanks @frenchyx24! Validated on import (id regex, 500-char cap, HTML/CR/LF stripped — standard safety).

🌍 i18n

+17 new friends-drawer keys × 8 languages (676 UI keys per file total).


MD5: 5EE8F99DEAA927EDD81FD0844C9403E5

Don't miss a new AchievementBadges_for_Jellyfin release

NewReleases is sending notifications on new releases.