Fixes a rare case where saving the settings could silently un-monitor all your libraries, plus small polish from a full code audit.
Corrige un cas rare où sauvegarder les paramètres pouvait désélectionner silencieusement toutes vos bibliothèques, plus quelques finitions issues d'un audit complet.
🇬🇧 English
🛡️ Fixes
- Saving settings can no longer wipe your monitored libraries. If the library list had failed to load (brief network/API hiccup) and you clicked Save — even just to change another setting — your library and collection selections could be silently erased. They are now kept safe whenever their list didn't load.
- Deletion history shows more entries — the admin log was silently capped at the 200 most recent deletions; it now goes up to 500.
- Read state stays in sync — in a rare timing case, items could briefly reappear as unread after opening the bell; the client now reconciles with the server automatically.
🇫🇷 Français
🛡️ Corrections
- Sauvegarder les paramètres ne peut plus effacer vos bibliothèques surveillées. Si la liste des bibliothèques n'avait pas réussi à se charger (bref pépin réseau/API) et que vous cliquiez Sauvegarder — même pour changer un autre réglage — vos sélections de bibliothèques et de collections pouvaient être effacées silencieusement. Elles sont désormais préservées quand leur liste n'a pas chargé.
- L'historique des suppressions affiche plus d'entrées — le journal admin était plafonné silencieusement aux 200 suppressions les plus récentes ; il monte maintenant à 500.
- État « lu » toujours synchronisé — dans un cas de timing rare, des éléments pouvaient brièvement réapparaître comme non lus après ouverture de la cloche ; le client se resynchronise maintenant automatiquement avec le serveur.
🔧 Technical details
- Config-save guard:
save()harvested checkbox lists straight from the DOM; ifrenderLibs/renderCollectionshad failed (the per-sectionsafe()wrapper swallows errors), zero checkboxes existed andEnabledLibraries/EnabledCollectionswere overwritten with[]. Render-success flags (libsRendered/colsRendered) now gate the harvest — on failure the previously saved values are kept. - Deletions tab: the client called
/NotifySync/DeletedItemswithoutlimit, hitting the 200 default; it now passeslimit=500(the server-side clamp maximum). - Mark-read reconciliation:
markReadOnServerignored the HTTP status; a 429 (500 ms per-user throttle, possible when a late fetch re-marks right after opening) silently lost the mark-read while local state said read. On any failure the client now drops its ETag so the next poll refetches and reconciles. - Cleanup: removed two dead locals in
PopulateInitialHistory(categoryCounts/categorySeriesIds, superseded byCategoryQuotaService).
No database migration — self-contained update.
📦 Upgrading / Mise à jour
Auto-updates from the stable channel on your next Jellyfin restart. Hard-refresh your browser (Ctrl+Shift+R) to pick up the new client script.
Mise à jour auto depuis le canal stable au prochain redémarrage Jellyfin. Rafraîchissez votre navigateur (Ctrl+Shift+R) pour charger le nouveau script client.