Notifications cross-plateforme
Envoie une notification sur macOS, Windows et Linux depuis un seul DSL Kotlin — titre, message, image, boutons d'action, callbacks de cycle de vie.
Chaque OS desktop expose sa propre pile de notifications — UserNotifications sur macOS, toasts WinRT sur Windows, FreeDesktop D-Bus sous Linux. notification-common rassemble l'intersection dans un seul DSL Kotlin : le cas 80 % tient en une dépendance.
En bref
- Un DSL :
notification { … }.send(). - Titre, corps, grande image, petite icône, jusqu'à cinq boutons d'action, callbacks de cycle de vie.
- Route vers
notification-macos,notification-windowsounotification-linuxà l'exécution. - Descends au module par OS pour les barres de progression, la planification, les catégories.
Installation
dependencies {
implementation("dev.nucleusframework:nucleus.notification-common:<version>")
}Cette unique dépendance tire les trois modules par plateforme ; seul celui qui correspond est chargé à l'exécution.
Démarrage rapide
import dev.nucleusframework.notification.common.*
NotificationManager.initialize()
val n = notification {
title = "Téléchargement terminé"
message = "report.pdf a été enregistré"
button("Ouvrir") { openFile() }
button("Afficher dans le dossier") { showInFolder() }
}
n.send()Fonctionnement
NotificationManager détecte la plateforme active au démarrage et délègue au pont natif adéquat. Le DSL ne capture que le plus petit dénominateur commun : texte, image, jusqu'à cinq boutons et événements de cycle de vie (onShown, onDismissed, onAction). Tout ce qui dépasse — planifications, catégories, images héros, barres de progression — reste dans le module par OS.
Il est possible de mixer : passer par l'API commune pour la plupart des notifications, puis basculer sur WindowsNotificationCenter ou NotificationCenter (macOS) quand une notification précise a besoin du reste.
Route vers notification-macos. Requiert l'autorisation utilisateur et une app signée bundlée (./gradlew runDistributable).
Route vers notification-windows. L'AUMID est dérivé de NucleusApp.appId pour les apps non packagées ; les apps MSIX utilisent leur identité de package.
Route vers notification-linux via org.freedesktop.Notifications sur D-Bus. Fonctionne sous GNOME, KDE, Cinnamon, tout ce qui expose un daemon de notifications.
Référence
Construire une notification
val n = notification {
title = "Nouveau message d'Alice"
message = "Tu as vu le dernier build ?"
button("Répondre") { /* … */ }
button("Muet") { /* … */ }
onShown { id -> log.info("affichée: $id") }
onDismissed { reason -> log.info("rejetée: $reason") }
}Envoyer
when (val result = n.send()) {
is NotificationResult.Shown -> /* livrée */
is NotificationResult.Failed -> log.warn(result.toString())
}Disponibilité
if (!NotificationManager.isAvailable()) {
// L'OS courant ou la sandbox interdit les notifications.
}Notes
Intégration OS
Atteins chaque API d'OS dont un dev desktop a besoin — notifications, tray, dock, mode sombre, raccourcis globaux, contrôles média, couleur d'accent — depuis du Kotlin idiomatique.
Notifications sur macOS
Mapping complet en Kotlin du framework UserNotifications d'Apple — catégories, pièces jointes, saisie texte, planifications, niveaux d'interruption.