@@ -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 )
0 commit comments