77 lines
1.8 KiB
Go
77 lines
1.8 KiB
Go
|
package bus
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
|
||
|
"github.com/godbus/dbus/v5"
|
||
|
)
|
||
|
|
||
|
type NotifyBus struct {
|
||
|
conn *dbus.Conn
|
||
|
}
|
||
|
|
||
|
type BusNotification struct {
|
||
|
ID uint32
|
||
|
Summary string
|
||
|
Body string
|
||
|
Timeout time.Duration
|
||
|
}
|
||
|
|
||
|
type NotifyServerInfo struct {
|
||
|
Name string
|
||
|
Vendor string
|
||
|
Version string
|
||
|
SpecVersion string
|
||
|
}
|
||
|
|
||
|
func NewNotifyBus() (*NotifyBus, error) {
|
||
|
conn, err := dbus.ConnectSessionBus()
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return &NotifyBus{conn: conn}, nil
|
||
|
}
|
||
|
|
||
|
func (n *NotifyBus) Close() {
|
||
|
n.conn.Close()
|
||
|
}
|
||
|
|
||
|
func (n *NotifyBus) ServerInfo() (*NotifyServerInfo, error) {
|
||
|
obj := n.conn.Object("org.freedesktop.Notifications", "/org/freedesktop/Notifications")
|
||
|
call := obj.Call(
|
||
|
"org.freedesktop.Notifications.GetServerInformation", // Method
|
||
|
0, // Flags
|
||
|
)
|
||
|
if call.Err != nil {
|
||
|
return nil, call.Err
|
||
|
}
|
||
|
|
||
|
srvInfo := &NotifyServerInfo{}
|
||
|
call.Store(&srvInfo.Name, &srvInfo.Vendor, &srvInfo.Version, &srvInfo.SpecVersion)
|
||
|
return srvInfo, nil
|
||
|
}
|
||
|
|
||
|
func (n *NotifyBus) Notify(notification BusNotification) (uint32, error) {
|
||
|
obj := n.conn.Object("org.freedesktop.Notifications", "/org/freedesktop/Notifications")
|
||
|
var ret uint32
|
||
|
call := obj.Call(
|
||
|
"org.freedesktop.Notifications.Notify", // Method
|
||
|
0, // Flags
|
||
|
"alerttonotify", // App name
|
||
|
notification.ID, // Notification ID
|
||
|
"", // Icon
|
||
|
notification.Summary, // Summary
|
||
|
notification.Body, // Body
|
||
|
[]string{}, // Actions
|
||
|
map[string]dbus.Variant{}, // Hints
|
||
|
int32(notification.Timeout.Milliseconds()), // Timeout
|
||
|
)
|
||
|
if call.Err != nil {
|
||
|
return ret, call.Err
|
||
|
}
|
||
|
|
||
|
call.Store(&ret)
|
||
|
|
||
|
return ret, nil
|
||
|
}
|