5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-05 23:12:03 +08:00
wails/v3/pkg/application/plugins.go
2023-08-19 17:09:38 +10:00

51 lines
1.2 KiB
Go

package application
import "github.com/wailsapp/wails/v3/internal/assetserver"
type Plugin interface {
Name() string
Init() error
Shutdown()
CallableByJS() []string
InjectJS() string
}
type PluginManager struct {
plugins map[string]Plugin
assetServer *assetserver.AssetServer
initialisedPlugins []Plugin
}
func NewPluginManager(plugins map[string]Plugin, assetServer *assetserver.AssetServer) *PluginManager {
result := &PluginManager{
plugins: plugins,
assetServer: assetServer,
}
return result
}
func (p *PluginManager) Init() error {
for _, plugin := range p.plugins {
err := plugin.Init()
if err != nil {
globalApplication.error("Plugin failed to initialise:", "plugin", plugin.Name(), "error", err.Error())
p.Shutdown()
return err
}
p.initialisedPlugins = append(p.initialisedPlugins, plugin)
injectJS := plugin.InjectJS()
if injectJS != "" {
p.assetServer.AddPluginScript(plugin.Name(), injectJS)
}
globalApplication.info("Plugin initialised: " + plugin.Name())
}
return nil
}
func (p *PluginManager) Shutdown() {
for _, plugin := range p.initialisedPlugins {
plugin.Shutdown()
globalApplication.info("Plugin shutdown: " + plugin.Name())
}
}