Plugins are now properly loaded woohoo

This commit is contained in:
Sasha Koshka 2023-04-30 19:00:20 -04:00
parent ca27a810c7
commit de4bce8c46
4 changed files with 31 additions and 16 deletions

21
examples/test/main.go Normal file
View File

@ -0,0 +1,21 @@
package main
import "git.tebibyte.media/sashakoshka/tomo"
import "git.tebibyte.media/sashakoshka/tomo/nasin"
import "git.tebibyte.media/sashakoshka/tomo/elements/testing"
func main () {
nasin.Run(Application { })
}
type Application struct { }
func (Application) Init () error {
window, err := nasin.NewWindow(tomo.Bounds(0, 0, 0, 0))
if err != nil { return err }
window.SetTitle("Mouse Test")
window.Adopt(testing.NewMouse())
window.OnClose(nasin.Stop)
window.Show()
return nil
}

View File

@ -6,7 +6,6 @@ import "git.tebibyte.media/sashakoshka/tomo"
// Application represents a Tomo/Nasin application. // Application represents a Tomo/Nasin application.
type Application interface { type Application interface {
Name () string
Init () error Init () error
} }

View File

@ -8,12 +8,7 @@ import "plugin"
import "path/filepath" import "path/filepath"
import "git.tebibyte.media/sashakoshka/tomo" import "git.tebibyte.media/sashakoshka/tomo"
type expectsFunc func () tomo.Version
type nameFunc func () string
type descriptionFunc func () string
type backendFactory func () (tomo.Backend, error) type backendFactory func () (tomo.Backend, error)
type themeFactory func () tomo.Theme
var factories []backendFactory var factories []backendFactory
var theme tomo.Theme var theme tomo.Theme
@ -21,7 +16,9 @@ var pluginPaths []string
func loadPlugins () { func loadPlugins () {
for _, dir := range pluginPaths { for _, dir := range pluginPaths {
loadPluginsFrom(dir) if dir != "" {
loadPluginsFrom(dir)
}
} }
} }
@ -40,9 +37,7 @@ func loadPluginsFrom (dir string) {
func loadPlugin (path string) { func loadPlugin (path string) {
die := func (reason string) { die := func (reason string) {
println ( println("nasin: could not load plugin at", path + ":", reason)
"nasin: could not load plugin at ",
path + ":", reason)
} }
plugin, err := plugin.Open(path) plugin, err := plugin.Open(path)
@ -52,11 +47,11 @@ func loadPlugin (path string) {
} }
// check for and obtain basic plugin functions // check for and obtain basic plugin functions
expects, ok := extract[expectsFunc](plugin, "Expects") expects, ok := extract[func () tomo.Version](plugin, "Expects")
if !ok { die("does not implement Expects() tomo.Version"); return } if !ok { die("does not implement Expects() tomo.Version"); return }
name, ok := extract[nameFunc](plugin, "Name") name, ok := extract[func () string](plugin, "Name")
if !ok { die("does not implement Name() string"); return } if !ok { die("does not implement Name() string"); return }
_, ok = extract[descriptionFunc](plugin, "Description") _, ok = extract[func () string](plugin, "Description")
if !ok { die("does not implement Description() string"); return } if !ok { die("does not implement Description() string"); return }
// check for version compatibility // check for version compatibility
@ -71,11 +66,11 @@ func loadPlugin (path string) {
} }
// if it's a backend plugin... // if it's a backend plugin...
newBackend, ok := extract[backendFactory](plugin, "NewBackend") newBackend, ok := extract[func () (tomo.Backend, error)](plugin, "NewBackend")
if ok { factories = append(factories, newBackend) } if ok { factories = append(factories, newBackend) }
// if it's a theme plugin... // if it's a theme plugin...
newTheme, ok := extract[themeFactory](plugin, "NewTheme") newTheme, ok := extract[func () tomo.Theme](plugin, "NewTheme")
if ok { theme = newTheme() } if ok { theme = newTheme() }
println("nasin: loaded plugin", name()) println("nasin: loaded plugin", name())

View File

@ -14,7 +14,7 @@ func init () {
"/usr/lib/nasin/plugins", "/usr/lib/nasin/plugins",
"/usr/local/lib/nasin/plugins") "/usr/local/lib/nasin/plugins")
homeDir, err := os.UserHomeDir() homeDir, err := os.UserHomeDir()
if err != nil { if err == nil {
pluginPaths = append ( pluginPaths = append (
pluginPaths, pluginPaths,
filepath.Join(homeDir, ".local/lib/nasin/plugins")) filepath.Join(homeDir, ".local/lib/nasin/plugins"))