5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-03 06:51:26 +08:00

[v3] Improved plugin shutdown

This commit is contained in:
Lea Anthony 2023-04-04 18:01:49 +10:00
parent 767b7d6026
commit 7ecbc846b4
3 changed files with 10 additions and 5 deletions

View File

@ -76,7 +76,7 @@ func New(appOptions Options) *App {
result.plugins = NewPluginManager(appOptions.Plugins, srv) result.plugins = NewPluginManager(appOptions.Plugins, srv)
err = result.plugins.Init() err = result.plugins.Init()
if err != nil { if err != nil {
println("Fatal error in application initialisation: ", err.Error()) result.Quit()
os.Exit(1) os.Exit(1)
} }

View File

@ -11,8 +11,9 @@ type Plugin interface {
} }
type PluginManager struct { type PluginManager struct {
plugins map[string]Plugin plugins map[string]Plugin
assetServer *assetserver.AssetServer assetServer *assetserver.AssetServer
initialisedPlugins []Plugin
} }
func NewPluginManager(plugins map[string]Plugin, assetServer *assetserver.AssetServer) *PluginManager { func NewPluginManager(plugins map[string]Plugin, assetServer *assetserver.AssetServer) *PluginManager {
@ -27,8 +28,11 @@ func (p *PluginManager) Init() error {
for _, plugin := range p.plugins { for _, plugin := range p.plugins {
err := plugin.Init(globalApplication) err := plugin.Init(globalApplication)
if err != nil { if err != nil {
globalApplication.error("Plugin '%s' failed to initialise: %s", plugin.Name(), err.Error())
p.Shutdown()
return err return err
} }
p.initialisedPlugins = append(p.initialisedPlugins, plugin)
injectJS := plugin.InjectJS() injectJS := plugin.InjectJS()
if injectJS != "" { if injectJS != "" {
p.assetServer.AddPluginScript(plugin.Name(), injectJS) p.assetServer.AddPluginScript(plugin.Name(), injectJS)
@ -39,7 +43,7 @@ func (p *PluginManager) Init() error {
} }
func (p *PluginManager) Shutdown() { func (p *PluginManager) Shutdown() {
for _, plugin := range p.plugins { for _, plugin := range p.initialisedPlugins {
plugin.Shutdown() plugin.Shutdown()
globalApplication.info("Plugin '%s' shutdown", plugin.Name()) globalApplication.info("Plugin '%s' shutdown", plugin.Name())
} }

View File

@ -1,6 +1,7 @@
package single_instance package single_instance
import ( import (
"fmt"
"github.com/wailsapp/wails/v3/pkg/application" "github.com/wailsapp/wails/v3/pkg/application"
"os" "os"
"path/filepath" "path/filepath"
@ -71,7 +72,7 @@ func (p *Plugin) Init(app *application.App) error {
return err return err
} }
} }
os.Exit(0) return fmt.Errorf("another instance of this application is already running")
} }
return nil return nil
} }