dde-dock/loader.go
jouyouyun ef8674f58f Modify Start/Stop
- Fixed 'G_CRITICAL' Error
- Replace 'Fatal' with 'Error'
- No longer write gtk2/gtk3 configure file

tower: https://tower.im/projects/8f19f0bf0e754f0b82ef2c24bc230973/todos/cc84bedc05d744bd82db317829ebcfab/
Change-Id: I26d861423cac5524ef0061de569e463be4ee660b
2014-12-24 10:41:43 +08:00

85 lines
1.3 KiB
Go

package loader
import (
"pkg.linuxdeepin.com/lib/log"
)
var logger = log.NewLogger("dde.daemon.loader")
type Module struct {
Name string
Start func()
Stop func()
Enable bool
}
var modules = make([]*Module, 0)
func StartPlugin(plugin string) {
for _, m := range modules {
if m.Name == plugin {
m.Start()
return
}
}
}
func StopPlugin(plugin string) {
for _, m := range modules {
if m.Name == plugin {
m.Stop()
return
}
}
}
func Enable(name string, enable bool) {
for _, m := range modules {
if m.Name == name {
m.Enable = enable
}
}
}
func Register(newModule *Module) {
for _, m := range modules {
if m.Name == newModule.Name {
return
}
}
if newModule.Start == nil || newModule.Stop == nil {
logger.Error("can't register an incomplete module " + newModule.Name)
return
}
modules = append([]*Module{newModule}, modules...)
}
func Start() {
for _, m := range modules {
if !m.Enable {
continue
}
func() {
defer func() {
if err := recover(); err != nil {
logger.Error("Start module", m.Name, "failed:", err)
}
}()
m.Start()
}()
}
}
func Stop() {
for _, m := range modules {
func() {
defer func() {
if err := recover(); err != nil {
logger.Error("Stop module", m.Name, "failed:", err)
}
}()
m.Stop()
}()
}
}