107 lines
2.4 KiB
Go
107 lines
2.4 KiB
Go
package widget
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/yaoapp/gou"
|
|
"github.com/yaoapp/gou/widget"
|
|
"github.com/yaoapp/kun/log"
|
|
"github.com/yaoapp/yao/config"
|
|
"github.com/yaoapp/yao/share"
|
|
"github.com/yaoapp/yao/table"
|
|
)
|
|
|
|
// Load Widgets
|
|
func Load(cfg config.Config) error {
|
|
var root = filepath.Join(cfg.Root, "widgets")
|
|
return LoadFrom(root)
|
|
}
|
|
|
|
// LoadFrom widget
|
|
func LoadFrom(dir string) error {
|
|
|
|
register := moduleRegister()
|
|
|
|
if share.DirNotExists(dir) {
|
|
return fmt.Errorf("%s does not exists", dir)
|
|
}
|
|
|
|
paths, err := ioutil.ReadDir(dir)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, path := range paths {
|
|
|
|
if !path.IsDir() {
|
|
continue
|
|
}
|
|
|
|
name := path.Name()
|
|
if _, err := os.Stat(filepath.Join(dir, name, "widget.json")); errors.Is(err, os.ErrNotExist) {
|
|
// path/to/whatever does not exist
|
|
continue
|
|
}
|
|
w, err := gou.LoadWidget(filepath.Join(dir, name), name, register)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Load instances
|
|
err = w.Load()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
func moduleRegister() widget.ModuleRegister {
|
|
return widget.ModuleRegister{
|
|
"Apis": func(name string, source []byte) error {
|
|
_, err := gou.LoadAPIReturn(string(source), name)
|
|
log.Trace("[Widget] Register api %s", name)
|
|
if err != nil {
|
|
log.Error("[Widget] Register api %s %v", name, err)
|
|
}
|
|
return err
|
|
},
|
|
"Models": func(name string, source []byte) error {
|
|
_, err := gou.LoadModelReturn(string(source), name)
|
|
log.Trace("[Widget] Register model %s", name)
|
|
if err != nil {
|
|
log.Error("[Widget] Register model %s %v", name, err)
|
|
}
|
|
return err
|
|
},
|
|
"Tables": func(name string, source []byte) error {
|
|
log.Trace("[Widget] Register table %s", name)
|
|
_, err := table.LoadTable(string(source), name)
|
|
if err != nil {
|
|
log.Error("[Widget] Register table %s %v", name, err)
|
|
}
|
|
return nil
|
|
},
|
|
"Tasks": func(name string, source []byte) error {
|
|
log.Trace("[Widget] Register task %s", name)
|
|
_, err := gou.LoadTask(string(source), name)
|
|
if err != nil {
|
|
log.Error("[Widget] Register task %s %v", name, err)
|
|
}
|
|
return nil
|
|
},
|
|
"Schedules": func(name string, source []byte) error {
|
|
log.Trace("[Widget] Register schedule %s", name)
|
|
_, err := gou.LoadSchedule(string(source), name)
|
|
if err != nil {
|
|
log.Error("[Widget] Register schedule %s %v", name, err)
|
|
}
|
|
return nil
|
|
},
|
|
}
|
|
}
|