5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-19 18:39:30 +08:00

export config from app

This commit is contained in:
Zach Botterman 2025-02-25 15:04:05 -08:00
parent 60c1a866f3
commit 10ae1f6029
2 changed files with 50 additions and 6 deletions

View File

@ -345,6 +345,10 @@ type App struct {
singleInstanceManager *singleInstanceManager singleInstanceManager *singleInstanceManager
} }
func (a *App) Config() Options {
return a.options
}
func (a *App) handleWarning(msg string) { func (a *App) handleWarning(msg string) {
if a.options.WarningHandler != nil { if a.options.WarningHandler != nil {
a.options.WarningHandler(msg) a.options.WarningHandler(msg)

View File

@ -13,6 +13,7 @@ import (
"sync" "sync"
"git.sr.ht/~jackmordaunt/go-toast/v2" "git.sr.ht/~jackmordaunt/go-toast/v2"
"github.com/google/uuid"
"github.com/wailsapp/wails/v3/pkg/application" "github.com/wailsapp/wails/v3/pkg/application"
"golang.org/x/sys/windows/registry" "golang.org/x/sys/windows/registry"
) )
@ -37,13 +38,20 @@ func New() *Service {
// ServiceStartup is called when the service is loaded // ServiceStartup is called when the service is loaded
// Sets an activation callback to emit an event when notifications are interacted with. // Sets an activation callback to emit an event when notifications are interacted with.
func (ns *Service) ServiceStartup(ctx context.Context, options application.ServiceOptions) error { func (ns *Service) ServiceStartup(ctx context.Context, options application.ServiceOptions) error {
// Need to get App Name and generate a UUID on first launch appName := application.Get().Config().Name
// How do we grab the app icon properly? icon := application.Get().Config().Icon
println(icon)
guid, err := getGUID(appName)
if err != nil {
return err
}
toast.SetAppData(toast.AppData{ toast.SetAppData(toast.AppData{
AppID: "Notifications", AppID: appName,
GUID: "{8F2E1A3D-C497-42B6-9E5D-72F8A169B051}", GUID: guid,
IconPath: "C:\\Users\\Zach\\Development\\notifications_demo\\build\\appicon.ico", IconPath: "C:\\Users\\Zach\\Development\\notifications_demo\\build\\appicon.ico",
ActivationExe: "C:\\Users\\Zach\\Development\\notifications_demo\\bin\\Notifications.exe",
}) })
toast.SetActivationCallback(func(args string, data []toast.UserData) { toast.SetActivationCallback(func(args string, data []toast.UserData) {
@ -348,3 +356,35 @@ func getUserText(data []toast.UserData) (string, bool) {
} }
return "", false return "", false
} }
func getGUID(name string) (string, error) {
keyPath := `Software\Classes\AppUserModelId\` + name
k, err := registry.OpenKey(registry.CURRENT_USER, keyPath, registry.QUERY_VALUE)
if err == nil {
guid, _, err := k.GetStringValue("CustomActivator")
k.Close()
if err == nil && guid != "" {
return guid, nil
}
}
guid := generateGUID()
k, _, err = registry.CreateKey(registry.CURRENT_USER, keyPath, registry.WRITE)
if err != nil {
return "", fmt.Errorf("failed to create registry key: %w", err)
}
defer k.Close()
if err := k.SetStringValue("CustomActivator", guid); err != nil {
return "", fmt.Errorf("failed to write GUID to registry: %w", err)
}
return guid, nil
}
func generateGUID() string {
guid := uuid.New()
return fmt.Sprintf("{%s}", guid.String())
}