67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
/* Copyright Azareal 2016 - 2017 */
|
|
package main
|
|
import "log"
|
|
|
|
var plugins map[string]Plugin = make(map[string]Plugin)
|
|
var hooks map[string]func(interface{})interface{} = make(map[string]func(interface{})interface{})
|
|
var vhooks map[string]func(...interface{})interface{} = make(map[string]func(...interface{})interface{})
|
|
|
|
type Plugin struct
|
|
{
|
|
UName string
|
|
Name string
|
|
Author string
|
|
URL string
|
|
Settings string
|
|
Active bool
|
|
Tag string
|
|
Type string
|
|
Init func()
|
|
Activate func()error
|
|
Deactivate func()
|
|
}
|
|
|
|
/*func add_hook(name string, handler func(interface{})interface{}) {
|
|
hooks[name] = handler
|
|
}*/
|
|
|
|
func init_plugins() {
|
|
for name, body := range plugins {
|
|
log.Print("Added plugin " + name)
|
|
if body.Active {
|
|
log.Print("Initialised plugin " + name)
|
|
plugins[name].Init()
|
|
}
|
|
}
|
|
}
|
|
|
|
func add_hook(name string, handler interface{}) {
|
|
switch h := handler.(type) {
|
|
case func(interface{})interface{}:
|
|
hooks[name] = h
|
|
case func(...interface{}) interface{}:
|
|
vhooks[name] = h
|
|
default:
|
|
panic("I don't recognise this kind of handler!") // Should this be an error for the plugin instead of a panic()?
|
|
}
|
|
}
|
|
|
|
func remove_hook(name string/*, plugin string */) {
|
|
delete(hooks, name)
|
|
}
|
|
|
|
func run_hook(name string, data interface{}) interface{} {
|
|
return hooks[name](data)
|
|
}
|
|
|
|
func remove_vhook(name string) {
|
|
delete(vhooks, name)
|
|
}
|
|
|
|
func run_vhook(name string, data ...interface{}) interface{} {
|
|
return vhooks[name](data...)
|
|
}
|
|
|
|
func run_vhook_noreturn(name string, data ...interface{}) {
|
|
_ = vhooks[name](data...)
|
|
} |