61 lines
2.0 KiB
Go
61 lines
2.0 KiB
Go
// Package notification lets sandboxed applications send and withdraw notifications. It is not possible for the application to learn if the notification was actually presented to the user.
|
|
// Upstream API documentation can be found at https://flatpak.github.io/xdg-desktop-portal/docs/doc-org.freedesktop.portal.Notification.html.
|
|
package notification
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"github.com/godbus/dbus/v5"
|
|
"github.com/rymdport/portal/internal/apis"
|
|
"github.com/rymdport/portal/internal/convert"
|
|
)
|
|
|
|
const (
|
|
interfaceName = apis.CallBaseName + ".Notification"
|
|
addNotificationCallName = interfaceName + ".AddNotification"
|
|
removeNotificationCallName = interfaceName + ".RemoveNotification"
|
|
)
|
|
|
|
// Priority is the priroity of a notification.
|
|
type Priority = string
|
|
|
|
const (
|
|
Low Priority = "low"
|
|
Normal Priority = "normal"
|
|
High Priority = "high"
|
|
Urgent Priority = "urgent"
|
|
)
|
|
|
|
// Content holds the content to send with the notification.
|
|
type Content struct {
|
|
Title string // User-visible string to display as the title.
|
|
Body string // User-visible string to display as the body.
|
|
Icon string // Serialized icon or name of application icon.
|
|
Priority Priority // The priority for the notification.
|
|
}
|
|
|
|
// Add sends a notification using org.freedesktop.portal.Notification.Add.
|
|
func Add(id uint, content Content) error {
|
|
data := map[string]dbus.Variant{
|
|
"title": convert.FromString(content.Title),
|
|
"body": convert.FromString(content.Body),
|
|
}
|
|
|
|
// Only add the icon field when it is set
|
|
if content.Icon != "" {
|
|
data["icon"] = convert.FromString(content.Icon)
|
|
}
|
|
|
|
// Only add the priority field when it is set.
|
|
if content.Priority != "" {
|
|
data["priority"] = convert.FromString(content.Priority)
|
|
}
|
|
|
|
return apis.CallWithoutResult(addNotificationCallName, strconv.FormatUint(uint64(id), 10), data)
|
|
}
|
|
|
|
// Remove removes the notification with the corresponding id.
|
|
func Remove(id uint) error {
|
|
return apis.CallWithoutResult(removeNotificationCallName, strconv.FormatUint(uint64(id), 10))
|
|
}
|