🇬🇧 English
📝 In Short
The icon next to NotifySync in the admin sidebar is now actually a bell. The previous attempt didn't match the modern Jellyfin sidebar layout — now it does.
🐛 What's Fixed
- Folder icon stayed put despite the previous fix — Modern Jellyfin renders sidebar icons differently than the older themes. The fix now targets the right element and the bell shows up correctly.
🔧 Technical details for the curious
Jellyfin 10.11+ renders the admin sidebar with Material-UI React components. Plugin links look like:
<a href="#/configurationpage?name=NotifySync" class="MuiListItemButton-root ...">
<div class="MuiListItemIcon-root">
<svg class="MuiSvgIcon-root" viewBox="0 0 24 24">
<path d="..." /> <!-- folder glyph -->
</svg>
</div>
...
</a>There is no <span class="material-icons"> — the previous 5.5.11.7 fallback selector matched nothing. The new approach finds the inline <svg> <path> child and rewrites its d attribute to the Material "notifications" path data. Single-node mutation, no extra elements, no duplicates.
Idempotency: the rewrite only fires when the path actually differs, so MutationObserver ticks on subsequent renders are cheap no-ops. This also makes the fix survive React re-renders without needing a marker attribute on the parent.
A .material-icons fallback stays in place for older themes / custom skins.
🇫🇷 Français
📝 En bref
L'icône à côté de NotifySync dans la sidebar admin est maintenant vraiment une cloche. La tentative précédente ne ciblait pas la bonne structure de sidebar Jellyfin — maintenant si.
🐛 Corrections
- Le dossier restait en place malgré la correction précédente — Jellyfin moderne rend les icônes sidebar différemment des thèmes plus anciens. La correction cible maintenant le bon élément et la cloche s'affiche correctement.
🔧 Détails techniques pour les curieux
Jellyfin 10.11+ rend la sidebar admin avec des composants Material-UI React. Les liens de plugin ressemblent à :
<a href="#/configurationpage?name=NotifySync" class="MuiListItemButton-root ...">
<div class="MuiListItemIcon-root">
<svg class="MuiSvgIcon-root" viewBox="0 0 24 24">
<path d="..." /> <!-- glyph dossier -->
</svg>
</div>
...
</a>Il n'y a pas de <span class="material-icons"> — le fallback de 5.5.11.7 ne matchait rien. La nouvelle approche trouve le <path> inline du <svg> et réécrit son attribut d avec les données du chemin Material "notifications". Une seule mutation de nœud, pas d'éléments en plus, pas de doublons.
Idempotence : la réécriture ne se déclenche que quand le chemin diffère réellement, donc les ticks du MutationObserver sur les rendus suivants sont des no-ops bon marché. Ça fait aussi survivre la correction aux re-renders React sans avoir besoin de marker sur le parent.
Un fallback .material-icons reste en place pour les thèmes plus anciens / skins custom.