summaryrefslogtreecommitdiff
path: root/bspc/bspc.go
diff options
context:
space:
mode:
Diffstat (limited to 'bspc/bspc.go')
-rw-r--r--bspc/bspc.go20
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
}