🇬🇧 English
📝 In Short
When a file is replaced, the bell now tells you why (Quality / Codec / Audio / Minor) instead of just "UPD". No more wondering whether the notification means "go re-watch in 4K" or "someone just added a subtitle".
✨ What's New
The UPD badge now comes with a label so you can tell at a glance what changed:
| Label | What it means | Real example |
|---|---|---|
| UPD • Quality | Real upgrade — better resolution, better source | Movie WEB-DL 1080p → BluRay 4K |
| UPD • Codec | Same quality, more efficient codec | x264 → HEVC (smaller file) |
| UPD • Audio | Dubbing was added | VOSTFR → MULTI / VFF |
| UPD • Minor | Small change, probably not worth re-watching | Subtitle file added, metadata refresh |
Why this matters: if you see UPD • Minor, you can skip it. If you see UPD • Quality, that's your signal to re-watch in better quality.
🔧 Technical details for the curious
Classification logic (heuristic, path-based, no extra API calls):
quality— file size grew ≥ 1.5×, OR filename picks up2160p/4k/uhd(no→yes), OR1080p(no→yes, not already 4K), ORbluray/remux(no→yes)codec— filename picks uphevc/x265/h265/av1(no→yes) AND size is not biggeraudio— filename picks upvf/vff/vfq/vfi/multi/truefrench/dubbed(no→yes)minor— same path, ΔSize < 50 MB (typically: external.srt, metadata refresh, light audio re-mux)null(no sub-label) — pattern not recognized; client falls back to plainUPD
Priority order is Quality > Codec > Audio > Minor. Word-boundary regex prevents false matches (vf inside vfx won't trigger Audio).
Schema migration: new nullable column Notifications.UpgradeKind (TEXT). Added via ALTER TABLE ADD COLUMN. Existing rows keep NULL until re-detected as upgrades.
Delete + re-import scenario (Sonarr/Radarr): UpgradeKind remains null because there's no "before" record to compare against. The client renders plain UPD.
Phase B (not in this release) would use item.GetMediaStreams() for precise messages like "UPD • Video (1080p H.264 → 4K HEVC HDR)" or "UPD • Audio (+FR Atmos)". Held until we see if the heuristic above covers enough cases.
🇫🇷 Français
📝 En bref
Quand un fichier est remplacé, la cloche te dit maintenant pourquoi (Qualité / Codec / Audio / Mineur) au lieu de juste "MAJ". Plus besoin de deviner si la notif veut dire "va re-regarder en 4K" ou "quelqu'un a juste ajouté un sous-titre".
✨ Quoi de Neuf
Le badge MAJ a maintenant un sous-label pour savoir d'un coup d'œil ce qui a changé :
| Label | Ce que ça veut dire | Exemple concret |
|---|---|---|
| MAJ • Qualité | Vraie amélioration — meilleure résolution, meilleure source | Film WEB-DL 1080p → BluRay 4K |
| MAJ • Codec | Même qualité, codec plus efficace | x264 → HEVC (fichier plus petit) |
| MAJ • Audio | Doublage ajouté | VOSTFR → MULTI / VFF |
| MAJ • Mineur | Petit changement, probablement pas la peine de re-regarder | Sous-titre ajouté, refresh metadata |
Pourquoi c'est utile : si tu vois MAJ • Mineur, tu passes. Si tu vois MAJ • Qualité, c'est ton signal pour re-regarder en meilleure qualité.
🔧 Détails techniques pour les curieux
Logique de classification (heuristique, basée sur le path, sans appel API supplémentaire) :
quality— taille a augmenté de ≥ 1.5×, OU le filename passe à2160p/4k/uhd(non→oui), OU1080p(non→oui, pas déjà 4K), OUbluray/remux(non→oui)codec— filename passe àhevc/x265/h265/av1(non→oui) ET taille pas plus grandeaudio— filename passe àvf/vff/vfq/vfi/multi/truefrench/dubbed(non→oui)minor— path identique, ΔSize < 50 MB (typiquement :.srtexterne, refresh metadata, re-mux audio léger)null(pas de sous-label) — pattern non reconnu ; le client afficheMAJtout court
Ordre de priorité : Qualité > Codec > Audio > Mineur. Une regex avec word-boundaries évite les faux matchs (vf dans vfx ne déclenche pas Audio).
Migration schéma : nouvelle colonne nullable Notifications.UpgradeKind (TEXT). Ajoutée via ALTER TABLE ADD COLUMN. Les lignes existantes restent NULL jusqu'à être re-détectées comme upgrades.
Scénario delete + ré-import (Sonarr/Radarr) : UpgradeKind reste null parce qu'il n'y a pas de version "avant" à comparer. Le client affiche MAJ tout court.
Phase B (pas dans cette release) utiliserait item.GetMediaStreams() pour des messages précis comme "MAJ • Vidéo (1080p H.264 → 4K HEVC HDR)" ou "MAJ • Audio (+FR Atmos)". Reportée tant qu'on ne sait pas si l'heuristique ci-dessus suffit.