In Nicegui existiert ein Benachrichtigungs-Konzept, mit dem ich Benachrichtigungen direkt in die Applikation bringen kann. Das ist cool und hilfreich, aber für meinen Anwendungsfall nicht gut genug: Ich möchte einen Pomodoro-Timer starten und dann nicht in der Applikation sein. Daher benötige ich Notifications, die außerhalb der Applikation auch sichtbar sind; bestenfalls im ganzen Betriebssystem.

Zusätzlich finde ich die eingebauten Notifications nicht sehr gut sichtbar; wenn ich nicht gerade direkt darauf achte, können die leicht übersehen werden. Auch daher benötigte ich eine andere Lösung.

Freundlicherweise bieten die auf Firefox oder Chromium basierten Browser (also die meisten wesentlichen Browser) eine Möglichkeit an, Desktop-Notifications zu schicken. Davon wusste ich bereits, und jetzt kann ich dieses Konzept auch nutzen.

Setup: Berechtigung zum Senden von Benachrichtigungen erbitten

Vor dem Senden von Benachrichtigungen müssen wir den Browser darum bitten dass wir das dürfen. In Javascript ist das nicht schwer:

if (Notification.permission !== "granted") {
    Notification.requestPermission();
}

Bestenfalls wird dieses Snippet ausgeführt, wenn die Website geladen wird. In Nicegui habe ich das daher folgendermaßen implementiert:

ui.add_body_html("""
    <script>
        window.onload = function() {
            if (Notification.permission !== "granted")
                Notification.requestPermission();
        }
    </script>
""")

Abhängig von den Browser-Einstellungen muss das nur einmal gemacht werden, oder nach jedem Neustart… Ich habe es einfach auf meiner Seite implementiert - wenn es öfters läuft, ist auch nichts verloren.

Benachrichtigungen schicken

Die Basis zum Notifications schicken ist dann denkbar einfach:

ui.run_javascript('new Notification("Ein Titel", "Hallo Welt")')

Das wars!