Files

68 lines
1.6 KiB
Go
Raw Permalink Normal View History

2023-03-18 08:11:36 +11:00
package application
2024-01-19 21:34:49 +11:00
import (
2024-03-26 20:56:58 +11:00
"github.com/pkg/errors"
2024-01-19 21:34:49 +11:00
"github.com/wailsapp/wails/v3/internal/assetserver"
2024-04-11 20:43:13 +10:00
"io/fs"
2024-01-19 21:34:49 +11:00
)
2023-03-24 08:43:00 +11:00
2024-03-26 20:56:58 +11:00
type PluginAPI interface {
}
2023-03-18 08:11:36 +11:00
type Plugin interface {
Name() string
2024-03-26 20:56:58 +11:00
Init(api PluginAPI) error
Shutdown() error
2023-03-22 20:42:20 +11:00
CallableByJS() []string
2024-04-11 20:43:13 +10:00
Assets() fs.FS
2023-03-18 08:11:36 +11:00
}
type PluginManager struct {
2023-04-04 18:01:49 +10:00
plugins map[string]Plugin
assetServer *assetserver.AssetServer
initialisedPlugins []Plugin
2023-03-18 08:11:36 +11:00
}
2023-03-24 08:43:00 +11:00
func NewPluginManager(plugins map[string]Plugin, assetServer *assetserver.AssetServer) *PluginManager {
2023-03-23 06:51:24 +11:00
result := &PluginManager{
2023-03-24 08:43:00 +11:00
plugins: plugins,
assetServer: assetServer,
2023-03-18 08:11:36 +11:00
}
2023-03-23 06:51:24 +11:00
return result
2023-03-18 08:11:36 +11:00
}
2024-03-26 20:56:58 +11:00
func (p *PluginManager) Init() []error {
api := newPluginAPI()
2024-04-11 20:43:13 +10:00
for id, plugin := range p.plugins {
2024-03-26 20:56:58 +11:00
err := plugin.Init(api)
2023-03-18 08:11:36 +11:00
if err != nil {
2023-08-19 16:56:41 +10:00
globalApplication.error("Plugin failed to initialise:", "plugin", plugin.Name(), "error", err.Error())
2024-03-26 20:56:58 +11:00
return p.Shutdown()
2023-03-23 06:51:24 +11:00
}
2023-04-04 18:01:49 +10:00
p.initialisedPlugins = append(p.initialisedPlugins, plugin)
2024-04-11 20:43:13 +10:00
assets := plugin.Assets()
if assets != nil {
err = p.assetServer.AddPluginAssets(id, assets)
if err != nil {
return []error{errors.Wrap(err, "Failed to add plugin assets: "+plugin.Name())}
}
2023-03-18 08:11:36 +11:00
}
2023-10-15 13:53:31 +11:00
globalApplication.debug("Plugin initialised: " + plugin.Name())
2023-03-18 08:11:36 +11:00
}
return nil
}
2024-03-26 20:56:58 +11:00
func (p *PluginManager) Shutdown() []error {
var errs []error
2023-04-04 18:01:49 +10:00
for _, plugin := range p.initialisedPlugins {
2024-03-26 20:56:58 +11:00
err := plugin.Shutdown()
2023-10-15 13:53:31 +11:00
globalApplication.debug("Plugin shutdown: " + plugin.Name())
2024-03-26 20:56:58 +11:00
if err != nil {
err = errors.Wrap(err, "Plugin failed to shutdown: "+plugin.Name())
errs = append(errs, err)
}
2023-03-18 08:11:36 +11:00
}
2024-03-26 20:56:58 +11:00
return errs
2023-03-18 08:11:36 +11:00
}