Skip to content

Commit 256213a

Browse files
committed
Get rid of currentdeck, log errors to stderr, ensure that watcher can be closed on deck change
1 parent 8905acb commit 256213a

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

deck.go

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ type Deck struct {
2222
File string
2323
Background image.Image
2424
Widgets []Widget
25+
Watcher *fsnotify.Watcher
2526
}
2627

2728
// LoadDeck loads a deck configuration.
@@ -30,7 +31,6 @@ func LoadDeck(dev *streamdeck.Device, base string, deckName string) (*Deck, erro
3031
if err != nil {
3132
return nil, err
3233
}
33-
currentDeck = path
3434
fmt.Println("Loading deck:", path)
3535

3636
dc, err := LoadConfig(path)
@@ -72,17 +72,21 @@ func LoadDeck(dev *streamdeck.Device, base string, deckName string) (*Deck, erro
7272
d.Widgets = append(d.Widgets, w)
7373
}
7474

75-
watcher, err := fsnotify.NewWatcher()
75+
d.Watcher, err = fsnotify.NewWatcher()
7676
if err == nil {
77-
err = watcher.Add(path)
77+
err = d.Watcher.Add(path)
7878
if err == nil {
7979

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+
d.Watcher.Close()
8690
d, err := LoadDeck(dev, base, deckName)
8791
if err != nil {
8892
fatal(err)
@@ -96,16 +100,16 @@ func LoadDeck(dev *streamdeck.Device, base string, deckName string) (*Deck, erro
96100
deck.updateWidgets()
97101
return
98102
}
99-
case error := <-watcher.Errors:
100-
fmt.Printf("Watcher had an error: %s\n", error)
103+
case error := <- d.Watcher.Errors:
104+
fmt.Fprintf(os.Stderr, "Watcher had an error: %s\n", error)
101105
}
102106
}
103107
}()
104108
} else {
105-
fmt.Printf("Failed to watch deck, automatic reloading diabled: %s\n", err)
109+
fmt.Fprintf(os.Stderr, "Failed to watch deck, automatic reloading diabled: %s\n", err)
106110
}
107111
} else {
108-
fmt.Printf("Failed to initialize fsnotify, automatic reloading diabled: %s\n", err)
112+
fmt.Fprintf(os.Stderr, "Failed to initialize fsnotify, automatic reloading diabled: %s\n", err)
109113
}
110114

111115
return &d, nil
@@ -257,6 +261,7 @@ func (d *Deck) triggerAction(dev *streamdeck.Device, index uint8, hold bool) {
257261
}
258262

259263
if a.Deck != "" {
264+
d.Watcher.Close()
260265
d, err := LoadDeck(dev, filepath.Dir(d.File), a.Deck)
261266
if err != nil {
262267
fmt.Fprintln(os.Stderr, "Can't load deck:", err)

main.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919

2020
var (
2121
deck *Deck
22-
currentDeck string
2322

2423
dbusConn *dbus.Conn
2524
keyboard uinput.Keyboard

0 commit comments

Comments
 (0)