OpenDiablo2/d2core/d2term/terminal_logger.go

47 lines
767 B
Go

package d2term
import (
"bufio"
"bytes"
"io"
"strings"
)
type terminalLogger struct {
terminal *Terminal
buffer bytes.Buffer
writer io.Writer
}
func (tl *terminalLogger) Write(p []byte) (int, error) {
n, err := tl.buffer.Write(p)
if err != nil {
return n, err
}
reader := bufio.NewReader(&tl.buffer)
termBytes, _, err := reader.ReadLine()
if err != nil {
return n, err
}
line := string(termBytes)
lineLower := strings.ToLower(line)
switch {
case strings.Index(lineLower, "error") > 0:
tl.terminal.Errorf(line)
case strings.Index(lineLower, "warning") > 0:
tl.terminal.Warningf(line)
default:
tl.terminal.Printf(line)
}
return tl.writer.Write(p)
}
func (tl *terminalLogger) BindToTerminal(t *Terminal) {
tl.terminal = t
}