5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-03 01:30:32 +08:00

Initial support for desktop notifications

This commit is contained in:
Lea Anthony 2021-04-07 06:32:21 +10:00
parent c36f9501a9
commit 6fdc87454a
No known key found for this signature in database
GPG Key ID: 33DAF7BB90A58405
3 changed files with 64 additions and 0 deletions

View 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
}

View 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)
}
})
}
}