mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-02 06:01:48 +08:00

* Add support to output ts models as interfaces * Add support to generate enums from golang * cleanup logs * add missing documentation * fix package names for enum. Fix processing enums that are in separate packages * revert golang 1.21 * Fix spelling * Add support for simplified version of Enum for typescriptify * update docs * removed unused logs * Add tests. Fix imported enums types in models --------- Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
105 lines
2.8 KiB
Go
105 lines
2.8 KiB
Go
//go:build production
|
|
|
|
package app
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/wailsapp/wails/v2/internal/binding"
|
|
"github.com/wailsapp/wails/v2/internal/frontend/desktop"
|
|
"github.com/wailsapp/wails/v2/internal/frontend/dispatcher"
|
|
"github.com/wailsapp/wails/v2/internal/frontend/runtime"
|
|
"github.com/wailsapp/wails/v2/internal/logger"
|
|
"github.com/wailsapp/wails/v2/internal/menumanager"
|
|
"github.com/wailsapp/wails/v2/pkg/options"
|
|
)
|
|
|
|
func (a *App) Run() error {
|
|
err := a.frontend.Run(a.ctx)
|
|
a.frontend.RunMainLoop()
|
|
a.frontend.WindowClose()
|
|
if a.shutdownCallback != nil {
|
|
a.shutdownCallback(a.ctx)
|
|
}
|
|
return err
|
|
}
|
|
|
|
// CreateApp creates the app!
|
|
func CreateApp(appoptions *options.App) (*App, error) {
|
|
var err error
|
|
|
|
ctx := context.Background()
|
|
|
|
// Merge default options
|
|
options.MergeDefaults(appoptions)
|
|
|
|
debug := IsDebug()
|
|
devtoolsEnabled := IsDevtoolsEnabled()
|
|
ctx = context.WithValue(ctx, "debug", debug)
|
|
ctx = context.WithValue(ctx, "devtoolsEnabled", devtoolsEnabled)
|
|
|
|
// Set up logger
|
|
myLogger := logger.New(appoptions.Logger)
|
|
if IsDebug() {
|
|
myLogger.SetLogLevel(appoptions.LogLevel)
|
|
} else {
|
|
myLogger.SetLogLevel(appoptions.LogLevelProduction)
|
|
}
|
|
ctx = context.WithValue(ctx, "logger", myLogger)
|
|
ctx = context.WithValue(ctx, "obfuscated", IsObfuscated())
|
|
|
|
// Preflight Checks
|
|
err = PreflightChecks(appoptions, myLogger)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Create the menu manager
|
|
menuManager := menumanager.NewManager()
|
|
|
|
// Process the application menu
|
|
if appoptions.Menu != nil {
|
|
err = menuManager.SetApplicationMenu(appoptions.Menu)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
// Create binding exemptions - Ugly hack. There must be a better way
|
|
bindingExemptions := []interface{}{
|
|
appoptions.OnStartup,
|
|
appoptions.OnShutdown,
|
|
appoptions.OnDomReady,
|
|
appoptions.OnBeforeClose,
|
|
}
|
|
appBindings := binding.NewBindings(myLogger, appoptions.Bind, bindingExemptions, IsObfuscated(), appoptions.EnumBind)
|
|
eventHandler := runtime.NewEvents(myLogger)
|
|
ctx = context.WithValue(ctx, "events", eventHandler)
|
|
// Attach logger to context
|
|
if debug {
|
|
ctx = context.WithValue(ctx, "buildtype", "debug")
|
|
} else {
|
|
ctx = context.WithValue(ctx, "buildtype", "production")
|
|
}
|
|
|
|
messageDispatcher := dispatcher.NewDispatcher(ctx, myLogger, appBindings, eventHandler, appoptions.ErrorFormatter)
|
|
appFrontend := desktop.NewFrontend(ctx, appoptions, myLogger, appBindings, messageDispatcher)
|
|
eventHandler.AddFrontend(appFrontend)
|
|
|
|
ctx = context.WithValue(ctx, "frontend", appFrontend)
|
|
result := &App{
|
|
ctx: ctx,
|
|
frontend: appFrontend,
|
|
logger: myLogger,
|
|
menuManager: menuManager,
|
|
startupCallback: appoptions.OnStartup,
|
|
shutdownCallback: appoptions.OnShutdown,
|
|
debug: debug,
|
|
devtoolsEnabled: devtoolsEnabled,
|
|
options: appoptions,
|
|
}
|
|
|
|
return result, nil
|
|
|
|
}
|