@@ -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