A reliability patch from a full code audit — five targeted fixes, no new features, no configuration changes.
Un patch de fiabilité issu d'un audit complet du code — cinq correctifs ciblés, aucune nouvelle fonctionnalité, aucun changement de configuration.
🇬🇧 English
🐛 Bug fixes
-
"Clear list" now syncs to all your devices
Clearing the bell on one device used to leave the cleared notifications visible on your other devices (phone, TV browser, second PC) until some unrelated change refreshed them. The cleared state now propagates immediately everywhere. -
"Regenerate history" no longer wipes UPD badges
Running the admin "Regenerate history" button used to silently erase every UPD/MAJ badge, because the rebuilt list knew nothing about past upgrade detections. Badges (and their position in the list) are now carried over across rebuilds. -
Deleted collection items no longer waste quota slots
When a media tracked through a monitored Collection was deleted from Jellyfin, its notification stayed behind as an invisible "zombie" — never shown, but still counting against your per-category quota. These entries are now cleaned up at deletion time.
🛡️ Hardening
- Cleaner shutdowns — library events arriving while Jellyfin stops (or while the plugin updates) could hit already-disposed resources and log exceptions. Event handlers are now detached first.
- "Clear" date guard — the clear-notifications endpoint no longer accepts a future date, which could permanently suppress a user's own notifications.
🛠️ Under the hood
- No DB schema changes, no migration, no API contract changes
- Verified during the audit, no action needed: SQL injection safety, XSS escaping, per-user isolation, admin checks on sensitive endpoints
🇫🇷 Français
🐛 Corrections
-
« Vider la liste » se synchronise maintenant sur tous vos appareils
Vider la cloche sur un appareil laissait les notifications "vidées" visibles sur vos autres appareils (téléphone, navigateur TV, second PC) jusqu'à ce qu'un changement sans rapport les rafraîchisse. L'état vidé se propage maintenant immédiatement partout. -
« Régénérer l'historique » n'efface plus les badges MAJ
Le bouton admin « Régénérer l'historique » effaçait silencieusement tous les badges MAJ/UPD, car la liste reconstruite ignorait les détections d'upgrade passées. Les badges (et leur position dans la liste) sont maintenant conservés à travers les reconstructions. -
Les éléments de collection supprimés ne gaspillent plus de slots de quota
Quand un média suivi via une Collection surveillée était supprimé de Jellyfin, sa notification restait en "zombie" invisible — jamais affichée, mais comptant toujours dans votre quota par catégorie. Ces entrées sont maintenant nettoyées au moment de la suppression.
🛡️ Renforcement
- Arrêts plus propres — des événements bibliothèque arrivant pendant l'arrêt de Jellyfin (ou pendant une mise à jour du plugin) pouvaient toucher des ressources déjà libérées et logger des exceptions. Les handlers d'événements sont maintenant détachés en premier.
- Garde-fou sur la date de « Vider » — l'endpoint de vidage n'accepte plus de date future, qui pouvait supprimer définitivement les notifications de l'utilisateur lui-même.
🛠️ Sous le capot
- Aucun changement de schéma DB, pas de migration, aucun changement de contrat API
- Vérifié pendant l'audit, rien à faire : protection injection SQL, échappement XSS, isolation par utilisateur, contrôles admin sur les endpoints sensibles