mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-02 15:11:53 +08:00
Initial support for desktop notifications
This commit is contained in:
parent
c36f9501a9
commit
6fdc87454a
30
v2/pkg/mac/notification_darwin.go
Normal file
30
v2/pkg/mac/notification_darwin.go
Normal file
@ -0,0 +1,30 @@
|
||||
// Package mac provides MacOS related utility functions for Wails applications
|
||||
package mac
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/wailsapp/wails/v2/internal/shell"
|
||||
)
|
||||
|
||||
// StartAtLogin will either add or remove this application to/from the login
|
||||
// items, depending on the given boolean flag. The limitation is that the
|
||||
// currently running app must be in an app bundle.
|
||||
func ShowNotification(title string, subtitle string, message string, sound string) error {
|
||||
command := fmt.Sprintf("display notification \"%s\"", message)
|
||||
if len(title) > 0 {
|
||||
command += fmt.Sprintf(" with title \"%s\"", title)
|
||||
}
|
||||
if len(subtitle) > 0 {
|
||||
command += fmt.Sprintf(" subtitle \"%s\"", subtitle)
|
||||
}
|
||||
if len(sound) > 0 {
|
||||
command += fmt.Sprintf(" sound name \"%s\"", sound)
|
||||
}
|
||||
_, stde, err := shell.RunCommand("/tmp", "osascript", "-e", command)
|
||||
if err != nil {
|
||||
errors.Wrap(err, stde)
|
||||
}
|
||||
return nil
|
||||
}
|
34
v2/pkg/mac/notification_darwin_test.go
Normal file
34
v2/pkg/mac/notification_darwin_test.go
Normal file
@ -0,0 +1,34 @@
|
||||
package mac
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestShowNotification(t *testing.T) {
|
||||
type args struct {
|
||||
title string
|
||||
subtitle string
|
||||
message string
|
||||
sound string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
title string
|
||||
subtitle string
|
||||
message string
|
||||
sound string
|
||||
wantErr bool
|
||||
}{
|
||||
{"No message", "", "", "", "", false},
|
||||
{"Title only", "I am a Title", "", "", "", false},
|
||||
{"SubTitle only", "", "I am a subtitle", "", "", false},
|
||||
{"Message only", "", "", "I am a message!", "", false},
|
||||
{"Sound only", "", "", "", "submarine.aiff", false},
|
||||
{"Full", "Title", "Subtitle", "This is a long message to show that text gets wrapped in a notification", "submarine.aiff", false},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if err := ShowNotification(tt.title, tt.subtitle, tt.message, tt.sound); (err != nil) != tt.wantErr {
|
||||
t.Errorf("ShowNotification() error = %v, wantErr %v", err, tt.wantErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user