Load and intialize skinstore plugins
This commit is contained in:
parent
ce34d4f5f2
commit
99594330b6
16
.gitignore
vendored
Normal file
16
.gitignore
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
# Binaries for programs and plugins
|
||||
*.exe
|
||||
*.exe~
|
||||
*.dll
|
||||
*.so
|
||||
*.dylib
|
||||
|
||||
# Test binary, built with `go test -c`
|
||||
*.test
|
||||
|
||||
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||
*.out
|
||||
|
||||
# Dependency directories (remove the comment below to include it)
|
||||
# vendor/
|
||||
plugins/
|
8
go.mod
Normal file
8
go.mod
Normal file
@ -0,0 +1,8 @@
|
||||
module github.com/josephbmanley/OpenSkins
|
||||
|
||||
go 1.13
|
||||
|
||||
require (
|
||||
github.com/josephbmanley/OpenSkins-Common v0.0.0-20201226022245-12099a28475a
|
||||
github.com/sirupsen/logrus v1.7.0
|
||||
)
|
9
go.sum
Normal file
9
go.sum
Normal file
@ -0,0 +1,9 @@
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/josephbmanley/OpenSkins-Common v0.0.0-20201226022245-12099a28475a h1:bW/ahOovqRP2r1Ynp4WXxrOCiHq1vqye8RFyYLIZ6hg=
|
||||
github.com/josephbmanley/OpenSkins-Common v0.0.0-20201226022245-12099a28475a/go.mod h1:xmRLNQLOMLqiQ2hzP81mdsNbu6ZxyLozoVWaR2A0BMY=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
|
||||
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
50
main.go
Normal file
50
main.go
Normal file
@ -0,0 +1,50 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/josephbmanley/OpenSkins-Common/datastore"
|
||||
"github.com/josephbmanley/OpenSkins/pluginmanager"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"os"
|
||||
pas "plugin"
|
||||
)
|
||||
|
||||
const plugindirectory = "./plugins"
|
||||
|
||||
func main() {
|
||||
|
||||
pluginFiles, err := pluginmanager.GetPlugins(plugindirectory)
|
||||
if err != nil {
|
||||
log.Warningln(fmt.Sprintf("Failed to read plugins directory: %v", err.Error()))
|
||||
}
|
||||
|
||||
for _, file := range pluginFiles {
|
||||
log.Infoln(fmt.Sprintf("Loading plugin: %v", file))
|
||||
plugin, err := pas.Open(file)
|
||||
if err != nil {
|
||||
log.Fatalln(fmt.Sprintf("Failed to load plugin '%v': %v", file, err.Error()))
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
symSkinstore, err := plugin.Lookup("SkinstoreModule")
|
||||
if err != nil {
|
||||
log.Fatalln(fmt.Sprintf("Failed to load plugin '%v': %v", file, err.Error()))
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
var skinstore datastore.Skinstore
|
||||
skinstore, ok := symSkinstore.(datastore.Skinstore)
|
||||
if !ok {
|
||||
log.Fatalln(fmt.Sprintf("Invalid type for Skinstore in plugin '%v'", file))
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
err = skinstore.Initialize()
|
||||
if err != nil {
|
||||
log.Fatalln(fmt.Sprintf("Failed to intialize Skinstore in plugin '%v'", file))
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
30
pluginmanager/helpers.go
Normal file
30
pluginmanager/helpers.go
Normal file
@ -0,0 +1,30 @@
|
||||
package pluginmanager
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
// GetPlugins gets plugin files in directory
|
||||
func GetPlugins(pluginDir string) ([]string, error) {
|
||||
pattern := "*.so"
|
||||
var matches []string
|
||||
err := filepath.Walk(pluginDir, func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if info.IsDir() {
|
||||
return nil
|
||||
}
|
||||
if matched, err := filepath.Match(pattern, filepath.Base(path)); err != nil {
|
||||
return err
|
||||
} else if matched {
|
||||
matches = append(matches, path)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return matches, nil
|
||||
}
|
Reference in New Issue
Block a user