@@ -13,6 +13,7 @@ import (
1313 "time"
1414
1515 "github.com/atotto/clipboard"
16+ "github.com/fsnotify/fsnotify"
1617 "github.com/godbus/dbus"
1718 "github.com/muesli/streamdeck"
1819)
@@ -25,8 +26,8 @@ type Deck struct {
2526}
2627
2728// LoadDeck loads a deck configuration.
28- func LoadDeck (dev * streamdeck.Device , base string , deck string ) (* Deck , error ) {
29- path , err := expandPath (base , deck )
29+ func LoadDeck (dev * streamdeck.Device , base string , deckName string ) (* Deck , error ) {
30+ path , err := expandPath (base , deckName )
3031 if err != nil {
3132 return nil , err
3233 }
@@ -71,6 +72,42 @@ func LoadDeck(dev *streamdeck.Device, base string, deck string) (*Deck, error) {
7172 d .Widgets = append (d .Widgets , w )
7273 }
7374
75+ watcher , err := fsnotify .NewWatcher ()
76+ if err == nil {
77+ err = watcher .Add (path )
78+ if err == nil {
79+
80+ go func () {
81+ for {
82+ select {
83+ case event := <- watcher .Events :
84+ if currentDeck == path {
85+ fmt .Printf ("Change: %s: %s\n " , event .Op , event .Name )
86+ d , err := LoadDeck (dev , base , deckName )
87+ if err != nil {
88+ fatal (err )
89+ }
90+ err = dev .Clear ()
91+ if err != nil {
92+ fatal (err )
93+ }
94+
95+ deck = d
96+ deck .updateWidgets ()
97+ return
98+ }
99+ case error := <- watcher .Errors :
100+ fmt .Printf ("Watcher had an error: %s\n " , error )
101+ }
102+ }
103+ }()
104+ } else {
105+ fmt .Printf ("Failed to watch deck, automatic reloading diabled: %s\n " , err )
106+ }
107+ } else {
108+ fmt .Printf ("Failed to initialize fsnotify, automatic reloading diabled: %s\n " , err )
109+ }
110+
74111 return & d , nil
75112}
76113
0 commit comments