mirror of
https://github.com/make-42/hayai.git
synced 2025-01-18 18:47:10 +01:00
52 lines
967 B
Go
52 lines
967 B
Go
//go:build js
|
|
// +build js
|
|
|
|
package beeep
|
|
|
|
import (
|
|
"syscall/js"
|
|
)
|
|
|
|
// Notify sends desktop notification.
|
|
//
|
|
// On Web, in Firefox it just works, in Chrome you must call it from some "user gesture" like `onclick`,
|
|
// and you must use TLS certificate, it doesn't work with plain http.
|
|
func Notify(title, message, appIcon string) (err error) {
|
|
defer func() {
|
|
e := recover()
|
|
|
|
if e == nil {
|
|
return
|
|
}
|
|
|
|
if e, ok := e.(*js.Error); ok {
|
|
err = e
|
|
} else {
|
|
panic(e)
|
|
}
|
|
}()
|
|
|
|
n := js.Global().Get("Notification")
|
|
|
|
opts := js.Global().Get("Object").Invoke()
|
|
opts.Set("body", message)
|
|
opts.Set("icon", pathAbs(appIcon))
|
|
|
|
if n.Get("permission").String() == "granted" {
|
|
n.New(js.ValueOf(title), opts)
|
|
} else {
|
|
var f js.Func
|
|
f = js.FuncOf(func(this js.Value, args []js.Value) interface{} {
|
|
if args[0].String() == "granted" {
|
|
n.New(js.ValueOf(title), opts)
|
|
}
|
|
f.Release()
|
|
return nil
|
|
})
|
|
|
|
n.Call("requestPermission", f)
|
|
}
|
|
|
|
return
|
|
}
|