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

View file

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

View file

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

View file

@ -21,6 +21,8 @@
package main package main
import "errors"
func InitWindowsPlugin() (Plugin, error) { 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) { func InitX11Plugin() (Plugin, error) {
display := C.XOpenDisplay(nil) display := C.XOpenDisplay(nil)
if display == 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 return &x11Plugin{display: display}, nil
} }

View file

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