Files
lingma-proxy-compose/vendor/git.sr.ht/~jackmordaunt/go-toast/v2/wintoast/bind.go
GitHub Actions c1a0fe2949 Switch remote deploy to vendored source builds
Move remote deployment to a vendored source bundle built on the target host via Docker so redeploys no longer require local cross-compilation or host Go installation.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-08 12:19:18 +08:00

90 lines
2.6 KiB
Go

// Package wintoast provides a pure-Go implementation of toast notifications on Windows.
package wintoast
import "errors"
// AppData describes the application to the Windows Runtime.
// See toast.Notification for more thorough documentation off these fields.
type AppData struct {
AppID string
GUID string
ActivationExe string // optional
IconPath string // optional
IconBackgroundColor string // optional
}
// UserData contains Key:Value pairs generated within the notification, based
// on the XML content of the notification. Specifically, all inputs within
// the XML will generate a corresponding UserData struct.
type UserData struct {
Key string
Value string
}
// Callback is a function that gets invoked when the notification is activated.
type Callback func(appUserModelId string, invokedArgs string, userData []UserData)
// SetAppData teaches the Windows Runtime about our application and establishes the activation GUID
// so Windows will know how to invoke us back.
func SetAppData(data AppData) (err error) {
return setAppData(data)
}
// SetActivationCallback establishes the callback `cb` to be invoked when
// the toast notification is activated. This callback instance should handle
// being activated from any available toast notification.
func SetActivationCallback(cb Callback) {
callback = cb
}
// Push a notification described by the XML to the Windows Runtime.
//
// App data should be set first via a call to SetAppData before calling
// this function.
//
// If the powershell fallback is engaged, activation callbacks will not
// work as expected and the COM error will still be returned.
func Push(appID, xml string, op ...option) error {
var opts options
for _, opt := range op {
opt(&opts)
}
if opts.PowershellPreferred {
return pushPowershell(xml)
}
if appID == "" {
appID = appData.AppID
}
if err := pushCOM(appID, xml); err != nil {
if opts.PowershellFallback {
return errors.Join(err, pushPowershell(xml))
}
return err
}
return nil
}
type options struct {
PowershellFallback bool
PowershellPreferred bool
}
type option func(*options)
// PreferPowershell indicates to use the powershell method by default.
// COM will not be used.
func PreferPowershell(opt *options) {
opt.PowershellPreferred = true
}
// PowershellFallback specifies to use the powershell method as a fallback
// if the COM api fails.
func PowershellFallback(opt *options) {
opt.PowershellFallback = true
}
// callback is the global callback reference that is invoked by Activate.
//
// NOTE(jfm): synchronize access to this?
var callback Callback = func(model, args string, data []UserData) {}