| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package main
- import (
- "log"
- "os"
- "path/filepath"
- "plugin"
- )
- type Plugin struct {
- *plugin.Plugin
- }
- func newPlugin(path string) (*Plugin, error) {
- p, err := plugin.Open(path)
- if err != nil {
- return nil, err
- }
- return &Plugin{Plugin: p}, nil
- }
- func (p *Plugin) Name() string {
- s, _ := p.Lookup("Name")
- return *(s).(*string)
- }
- func loadPlugins() error {
- path, err := os.UserConfigDir()
- if err != nil {
- log.Fatal(err)
- }
- path = filepath.Join(path, name, "plugins")
- err = os.MkdirAll(path, os.ModePerm)
- if err != nil {
- return err
- }
- entries, err := os.ReadDir(path)
- if err != nil {
- return err
- }
- for _, entry := range entries {
- if entry.IsDir() {
- continue
- }
- if filepath.Ext(entry.Name()) == ".so" {
- p, err := newPlugin(filepath.Join(path, entry.Name()))
- if err != nil {
- return err
- }
- plugins[p.Name()] = p
- }
- }
- return nil
- }
|