diff --git a/ui/prochandlers.go b/ui/prochandlers.go index 5198697..574da10 100644 --- a/ui/prochandlers.go +++ b/ui/prochandlers.go @@ -8,8 +8,6 @@ package ui import ( "fmt" "os" - "sort" - "strings" "time" "github.com/gcla/gowid" @@ -125,17 +123,7 @@ func (t updatePacketViews) OnError(code pcap.HandlerCode, app gowid.IApp, err er if !profiles.ConfBool("main.suppress-tshark-errors", true) { var errstr string if kverr, ok := err.(gowid.KeyValueError); ok { - errstr = fmt.Sprintf("%v\n\n", kverr.Cause()) - kvs := make([]string, 0, len(kverr.KeyVals)) - ks := make([]string, 0, len(kverr.KeyVals)) - for k := range kverr.KeyVals { - ks = append(ks, k) - } - sort.Sort(sort.StringSlice(ks)) - for _, k := range ks { - kvs = append(kvs, fmt.Sprintf("%v: %v", k, kverr.KeyVals[k])) - } - errstr = errstr + strings.Join(kvs, "\n\n") + errstr = termshark.KeyValueErrorString(kverr) } else { errstr = fmt.Sprintf("%v", err) } diff --git a/ui/streamui.go b/ui/streamui.go index eb43982..0f880c3 100644 --- a/ui/streamui.go +++ b/ui/streamui.go @@ -8,7 +8,6 @@ package ui import ( "fmt" "os" - "strings" "sync" "time" @@ -343,18 +342,13 @@ func (t *streamParseHandler) OnError(code pcap.HandlerCode, app gowid.IApp, err } else if !profiles.ConfBool("main.suppress-tshark-errors", true) { var errstr string if kverr, ok := err.(gowid.KeyValueError); ok { - errstr = fmt.Sprintf("%v\n\n", kverr.Cause()) - kvs := make([]string, 0, len(kverr.KeyVals)) - for k, v := range kverr.KeyVals { - kvs = append(kvs, fmt.Sprintf("%v: %v", k, v)) - } - errstr = errstr + strings.Join(kvs, "\n") + errstr = termshark.KeyValueErrorString(kverr) } else { errstr = fmt.Sprintf("%v", err) } app.Run(gowid.RunFunction(func(app gowid.IApp) { - OpenError(errstr, app) + OpenLongError(errstr, app) })) } } diff --git a/utils.go b/utils.go index 8c9e674..4f0a865 100644 --- a/utils.go +++ b/utils.go @@ -683,6 +683,24 @@ func ErrLogger(key string, val string) *io.PipeWriter { return log.NewEntry(l).WithField(key, val).WriterLevel(log.ErrorLevel) } +// KeyValueErrorString returns a string representation of +// a gowid KeyValueError intended to be suitable for displaying in +// a termshark error dialog. +func KeyValueErrorString(err gowid.KeyValueError) string { + res := fmt.Sprintf("%v\n\n", err.Cause()) + kvs := make([]string, 0, len(err.KeyVals)) + ks := make([]string, 0, len(err.KeyVals)) + for k := range err.KeyVals { + ks = append(ks, k) + } + sort.Sort(sort.StringSlice(ks)) + for _, k := range ks { + kvs = append(kvs, fmt.Sprintf("%v: %v", k, err.KeyVals[k])) + } + res = res + strings.Join(kvs, "\n\n") + return res +} + //====================================================================== // Need to publish fields for template use