log plugin errors

This commit is contained in:
Unrud 2018-07-31 20:19:05 +02:00
parent fe568cd37c
commit 2eb0baaca1
6 changed files with 25 additions and 15 deletions

11
main.go
View file

@ -156,16 +156,18 @@ func main() {
log.Fatal("interval must be greater or equal to zero")
}
var plugin Plugin
var pluginName string
platformErrors := ""
for _, f := range Plugins {
for _, pluginInfo := range Plugins {
pluginName = pluginInfo.Name
var err error
plugin, err = f()
plugin, err = pluginInfo.Init()
if err == nil {
break
} else if _, ok := err.(UnsupportedPlatformError); ok {
platformErrors += err.Error() + "\n"
platformErrors += fmt.Sprintf("%s plugin: %v\n", pluginName, err)
} else {
log.Fatal(err)
log.Fatal(fmt.Sprintf("%s plugin: %v", pluginName, err))
}
}
if plugin == nil {
@ -212,6 +214,7 @@ func main() {
return
}
if err := processCommand(plugin, message); err != nil {
log.Print(fmt.Sprintf("%s plugin: %v", pluginName, err))
return
}
}

View file

@ -19,20 +19,22 @@
package main
import "fmt"
type PluginInfo struct {
Name string
Init func() (Plugin, error)
}
var Plugins [](func() (Plugin, error)) = [](func() (Plugin, error)){
InitX11Plugin,
InitWindowsPlugin,
var Plugins []PluginInfo = []PluginInfo{
{"X11", InitX11Plugin},
{"Windows", InitWindowsPlugin},
}
type UnsupportedPlatformError struct {
name string
message string
err error
}
func (e UnsupportedPlatformError) Error() string {
return fmt.Sprintf("%s plugin: %s", e.name, e.message)
return e.err.Error()
}
type Plugin interface {

View file

@ -75,7 +75,7 @@ func InitWindowsPlugin() (Plugin, error) {
p.userDLL = syscall.NewLazyDLL("user32.dll")
p.sendInputProc = p.userDLL.NewProc("SendInput")
if err := p.sendInputProc.Find(); err != nil {
return nil, UnsupportedPlatformError{"Windows", err.Error()}
return nil, UnsupportedPlatformError{err}
}
return p, nil
}

View file

@ -21,6 +21,8 @@
package main
import "errors"
func InitWindowsPlugin() (Plugin, error) {
return nil, UnsupportedPlatformError{"Windows", "disabled"}
return nil, UnsupportedPlatformError{errors.New("disabled")}
}

View file

@ -43,7 +43,8 @@ type x11Plugin struct {
func InitX11Plugin() (Plugin, error) {
display := C.XOpenDisplay(nil)
if display == nil {
return nil, UnsupportedPlatformError{"X11", "failed to connect to X server"}
return nil, UnsupportedPlatformError{
errors.New("failed to connect to X server")}
}
return &x11Plugin{display: display}, nil
}

View file

@ -21,6 +21,8 @@
package main
import "errors"
func InitX11Plugin() (Plugin, error) {
return nil, UnsupportedPlatformError{"X11", "disabled"}
return nil, UnsupportedPlatformError{errors.New("disabled")}
}