Skip to content

Commit e035729

Browse files
committed
Get rid of currentdeck, log errors to stderr, ensure that watcher can be closed on deck change
1 parent 85ab5e9 commit e035729

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-10
lines changed

deck.go

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ type Deck struct {
2323
File string
2424
Background image.Image
2525
Widgets []Widget
26+
Watcher *fsnotify.Watcher
2627
}
2728

2829
// LoadDeck loads a deck configuration.
@@ -72,17 +73,23 @@ func LoadDeck(dev *streamdeck.Device, base string, deckName string) (*Deck, erro
7273
d.Widgets = append(d.Widgets, w)
7374
}
7475

75-
watcher, err := fsnotify.NewWatcher()
76+
d.Watcher, err = fsnotify.NewWatcher()
7677
if err == nil {
77-
err = watcher.Add(path)
78+
err = d.Watcher.Add(path)
7879
if err == nil {
79-
8080
go func() {
8181
for {
8282
select {
83-
case event := <-watcher.Events:
84-
if currentDeck == path {
85-
fmt.Printf("Change: %s: %s\n", event.Op, event.Name)
83+
case event, ok := <-d.Watcher.Events:
84+
if !ok {
85+
return
86+
}
87+
if d.File == path {
88+
fmt.Printf("Change: %s: %s\n", event.Op, event.Name)
89+
err = d.Watcher.Close()
90+
if err != nil {
91+
fatal(err)
92+
}
8693
d, err := LoadDeck(dev, base, deckName)
8794
if err != nil {
8895
fatal(err)
@@ -96,16 +103,16 @@ func LoadDeck(dev *streamdeck.Device, base string, deckName string) (*Deck, erro
96103
deck.updateWidgets()
97104
return
98105
}
99-
case error := <-watcher.Errors:
100-
fmt.Printf("Watcher had an error: %s\n", error)
106+
case err := <-d.Watcher.Errors:
107+
fmt.Fprintf(os.Stderr, "Watcher had an error: %s\n", err)
101108
}
102109
}
103110
}()
104111
} else {
105-
fmt.Printf("Failed to watch deck, automatic reloading diabled: %s\n", err)
112+
fmt.Fprintf(os.Stderr, "Failed to watch deck, automatic reloading diabled: %s\n", err)
106113
}
107114
} else {
108-
fmt.Printf("Failed to initialize fsnotify, automatic reloading diabled: %s\n", err)
115+
fmt.Fprintf(os.Stderr, "Failed to initialize fsnotify, automatic reloading diabled: %s\n", err)
109116
}
110117

111118
return &d, nil
@@ -262,6 +269,10 @@ func (d *Deck) triggerAction(dev *streamdeck.Device, index uint8, hold bool) {
262269
}
263270

264271
if a.Deck != "" {
272+
err := d.Watcher.Close()
273+
if err != nil {
274+
fatal(err)
275+
}
265276
d, err := LoadDeck(dev, filepath.Dir(d.File), a.Deck)
266277
if err != nil {
267278
fmt.Fprintln(os.Stderr, "Can't load deck:", err)

0 commit comments

Comments
 (0)