diff options
Diffstat (limited to 'bspc/bspc.go')
| -rw-r--r-- | bspc/bspc.go | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/bspc/bspc.go b/bspc/bspc.go index 4c5f9e7..9eb948c 100644 --- a/bspc/bspc.go +++ b/bspc/bspc.go @@ -117,6 +117,7 @@ func LoadState() (*State, error) { type Subscriber struct { Event chan *Event + Err chan error cleanup chan bool cmd *exec.Cmd pipe io.ReadCloser @@ -124,7 +125,6 @@ type Subscriber struct { } type Event struct { - Err error Name string Tokens []string } @@ -143,15 +143,23 @@ func Subscribe() (*Subscriber, error) { var s Subscriber s.Event = make(chan *Event) + s.Err = make(chan error) s.cleanup = make(chan bool) s.cmd = cmd s.pipe = pipe s.scanner = bufio.NewScanner(s.pipe) go func() { for { - if event := s.get(); event != nil { + event, err := s.get() + + if event != nil { s.Event <- event } + + if err != nil { + s.Err <- err + return + } }}() return &s, nil @@ -173,7 +181,7 @@ func (s *Subscriber) getLine() (string, error) { return "", nil } -func (s *Subscriber) get() (*Event) { +func (s *Subscriber) get() (*Event, error) { var line string var err error for { @@ -181,10 +189,10 @@ func (s *Subscriber) get() (*Event) { if len(line) > 0 && line[0] != 'W' { break } } - if line == "" { return nil } - if err != nil { return &Event{err, "", nil} } + if line == "" { return nil, nil } + if err != nil { return nil, err } name, tokens, _ := strings.Cut(line, " ") - return &Event{nil, name, strings.Split(tokens, " ")} + return &Event{name, strings.Split(tokens, " ")}, nil } |