🧪 Beta channel — Pre-release. Add the beta repo URL to install:
https://raw.githubusercontent.com/peterdu1109/NotifySync/main/repository-beta.json. If you're on 5.5.12.3-beta4, Jellyfin offers this as a regular update.
🇬🇧 English
📝 In Short
Multi-kind upgrade badges read naturally now (UPD Codec & Audio instead of cryptic UPD C+A), and the admin Deletions tab no longer fills up with Live TV recording cycles.
✨ What's New
- Readable multi-kind badges — When a file replacement triggers multiple signals at once, the badge now uses full words joined by &:
- 1 kind → UPD Quality / UPD Codec / UPD Audio (unchanged)
- 2 kinds → UPD Codec & Audio, UPD Quality & Codec, UPD Quality & Audio
- 3 kinds → UPD All (rare in practice — keeps the badge compact when everything changes at once)
- Live TV recordings no longer pollute the Deletions tab — Recording cycles, expired programs, and auto-deletes don't represent meaningful media changes for upgrade detection. They're now filtered out at the source. A one-shot cleanup at startup also purges any LiveTvProgram rows that accumulated in your history from earlier builds.
🧪 What to test
- A multi-kind upgrade (e.g.
[VOSTFR][x264]→[FRENCH][HEVC]) should now read UPD Codec & Audio rather than the previous UPD C+A. - Open the admin Deletions tab and confirm no rows with type LiveTvProgram remain. If you had any, the startup log should show "NotifySync: N legacy LiveTvProgram deletions purged from history."
🔧 Technical details for the curious
Hybrid upgradeKindLabel in client.js:
if (kinds.length === 1) return fullMap[kinds[0]]; // "Quality"
if (kinds.length === 2) return `${a} & ${b}`; // "Codec & Audio"
return T.kindAll; // "All" / "Tout"The badge prefix (T.badgeUpgrade = UPD in English / MAJ in French) is concatenated with the kind label, so the full badge reads e.g. UPD Codec & Audio in English and MAJ Codec & Audio in French. The longest 2-kind label ("Quality & Codec" = 15 chars) still fits in the badge slot. The all-three case is rare enough that a summary keyword is the cleanest UX. New translation key kindAll (EN: "All", FR: "Tout") added to both dictionaries. No server-side change — UpgradeKind storage stays as a comma-separated string.
LiveTvProgram filter in OnItemRemoved:
if (e.Item.GetType().Name == "LiveTvProgram") {
return; // recordings cycle naturally — not relevant for NotifySync
}Mirror of the existing filter pattern for folders and Extras in CreateNotificationFromItem.
Cleanup migration at startup: DELETE FROM DeletedItems WHERE Type = 'LiveTvProgram'. One-shot, no schema change, logged when rows are purged. Idempotent on subsequent restarts (becomes a no-op once cleaned).
Internal plugin version is 5.5.12.4 (System.Version-parsable). User-facing strings (tag, release title, README badge, admin badge, client.js banner) read 5.5.12.4-beta5.
🇫🇷 Français
📝 En bref
Les badges multi-kinds se lisent enfin naturellement (MAJ Codec & Audio au lieu du cryptique MAJ C+A), et l'onglet admin Suppressions ne se remplit plus de cycles d'enregistrements TV.
✨ Quoi de Neuf
- Badges multi-kinds lisibles — Quand un remplacement de fichier déclenche plusieurs signaux à la fois, le badge utilise maintenant les mots complets joints par & :
- 1 kind → MAJ Qualité / MAJ Codec / MAJ Audio (inchangé)
- 2 kinds → MAJ Codec & Audio, MAJ Qualité & Codec, MAJ Qualité & Audio
- 3 kinds → MAJ Tout (rare en pratique — garde le badge compact quand tout change en même temps)
- Les enregistrements Live TV ne polluent plus l'onglet Suppressions — Cycles d'enregistrement, expirations, auto-suppressions ne représentent pas de vrais changements média pour la détection d'upgrade. Ils sont filtrés à la source maintenant. Un nettoyage one-shot au démarrage purge également les lignes LiveTvProgram accumulées par les builds précédents.
🧪 À tester
- Une upgrade multi-kinds (par ex.
[VOSTFR][x264]→[FRENCH][HEVC]) doit maintenant lire MAJ Codec & Audio au lieu de l'ancien MAJ C+A. - Ouvre l'onglet admin Suppressions et confirme qu'aucune ligne de type LiveTvProgram ne reste. Si tu en avais, le log de démarrage doit montrer "NotifySync: N legacy LiveTvProgram deletions purged from history."
🔧 Détails techniques pour les curieux
Hybrid upgradeKindLabel dans client.js :
if (kinds.length === 1) return fullMap[kinds[0]]; // "Qualité"
if (kinds.length === 2) return `${a} & ${b}`; // "Codec & Audio"
return T.kindAll; // "Tout" / "All"Le préfixe du badge (T.badgeUpgrade = MAJ en français / UPD en anglais) est concaténé avec le label du kind, donc le badge complet affiche par exemple MAJ Codec & Audio en français et UPD Codec & Audio en anglais. Le label 2-kind le plus long ("Qualité & Codec" = 15 chars) tient toujours dans le slot. Le cas all-three est suffisamment rare qu'un mot-clé synthétique reste l'UX la plus propre. Nouvelle clé de traduction kindAll (FR : "Tout", EN : "All") ajoutée aux deux dictionnaires. Aucun changement serveur — UpgradeKind reste stocké comme une string séparée par virgules.
Filtre LiveTvProgram dans OnItemRemoved :
if (e.Item.GetType().Name == "LiveTvProgram") {
return; // recordings cycle naturally — not relevant for NotifySync
}Miroir du filtre existant pour les folders et Extras dans CreateNotificationFromItem.
Migration de nettoyage au démarrage : DELETE FROM DeletedItems WHERE Type = 'LiveTvProgram'. One-shot, pas de changement de schéma, logguée quand des lignes sont purgées. Idempotente sur les redémarrages suivants (devient no-op une fois nettoyée).
La version interne du plugin est 5.5.12.4 (parseable par System.Version). Les strings user-facing (tag, titre release, badge README, badge admin, bannière client.js) affichent 5.5.12.4-beta5.