Initial version
This commit is contained in:
		
							
								
								
									
										76
									
								
								bus/bus.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								bus/bus.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | ||||
| 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 | ||||
| } | ||||
		Reference in New Issue
	
	Block a user