diff --git a/mattermost/server/bathroom-linux-amd64 b/mattermost/server/bathroom-linux-amd64 index 69d6958..5daaba3 100755 --- a/mattermost/server/bathroom-linux-amd64 +++ b/mattermost/server/bathroom-linux-amd64 Binary files differ diff --git a/mattermost/server/bathroom-linux-amd64 b/mattermost/server/bathroom-linux-amd64 index 69d6958..5daaba3 100755 --- a/mattermost/server/bathroom-linux-amd64 +++ b/mattermost/server/bathroom-linux-amd64 Binary files differ diff --git a/mattermost/server/bathroom.go b/mattermost/server/bathroom.go index 04509ba..642a2e1 100644 --- a/mattermost/server/bathroom.go +++ b/mattermost/server/bathroom.go @@ -6,6 +6,7 @@ "github.com/mattermost/mattermost-server/plugin" "github.com/pkg/errors" "sync" + "reflect" ) type Config struct { @@ -17,6 +18,7 @@ plugin.MattermostPlugin config *Config configLock sync.RWMutex + configChanged chan struct{} } func (p *HelloWorldPlugin) Init() *HelloWorldPlugin { @@ -33,19 +35,35 @@ p.configLock.Lock() defer p.configLock.Unlock() - if err := p.API.LoadPluginConfiguration(p.config); err != nil { + var newConfig *Config = new(Config); + if err := p.API.LoadPluginConfiguration(newConfig); err != nil { return errors.Wrap(err, "failed to load configuration") } + if newConfig != p.config && reflect.ValueOf(*newConfig).NumField() != 0 { + // p.config = newConfig + } + p.API.LogInfo(fmt.Sprintf("Config: %d %s", p.config.NumDoors, p.config.WatchPath)) return nil } +func watchLoop(p *HelloWorldPlugin) { + for { + p.configLock.Lock() + var restart chan struct{} = p.configChanged + p.configLock.Unlock() + select { + case <- restart: + p.API.LogInfo("CONFIG CHANGED, RESTARTING") + } + } +} func (p *HelloWorldPlugin) OnActivate() error { - + //go watchLoop(p) return nil } diff --git a/mattermost/server/bathroom-linux-amd64 b/mattermost/server/bathroom-linux-amd64 index 69d6958..5daaba3 100755 --- a/mattermost/server/bathroom-linux-amd64 +++ b/mattermost/server/bathroom-linux-amd64 Binary files differ diff --git a/mattermost/server/bathroom.go b/mattermost/server/bathroom.go index 04509ba..642a2e1 100644 --- a/mattermost/server/bathroom.go +++ b/mattermost/server/bathroom.go @@ -6,6 +6,7 @@ "github.com/mattermost/mattermost-server/plugin" "github.com/pkg/errors" "sync" + "reflect" ) type Config struct { @@ -17,6 +18,7 @@ plugin.MattermostPlugin config *Config configLock sync.RWMutex + configChanged chan struct{} } func (p *HelloWorldPlugin) Init() *HelloWorldPlugin { @@ -33,19 +35,35 @@ p.configLock.Lock() defer p.configLock.Unlock() - if err := p.API.LoadPluginConfiguration(p.config); err != nil { + var newConfig *Config = new(Config); + if err := p.API.LoadPluginConfiguration(newConfig); err != nil { return errors.Wrap(err, "failed to load configuration") } + if newConfig != p.config && reflect.ValueOf(*newConfig).NumField() != 0 { + // p.config = newConfig + } + p.API.LogInfo(fmt.Sprintf("Config: %d %s", p.config.NumDoors, p.config.WatchPath)) return nil } +func watchLoop(p *HelloWorldPlugin) { + for { + p.configLock.Lock() + var restart chan struct{} = p.configChanged + p.configLock.Unlock() + select { + case <- restart: + p.API.LogInfo("CONFIG CHANGED, RESTARTING") + } + } +} func (p *HelloWorldPlugin) OnActivate() error { - + //go watchLoop(p) return nil } diff --git a/mattermost/server/bathroom.tar.gz b/mattermost/server/bathroom.tar.gz index 6781b7e..4a75780 100644 --- a/mattermost/server/bathroom.tar.gz +++ b/mattermost/server/bathroom.tar.gz Binary files differ diff --git a/mattermost/server/bathroom-linux-amd64 b/mattermost/server/bathroom-linux-amd64 index 69d6958..5daaba3 100755 --- a/mattermost/server/bathroom-linux-amd64 +++ b/mattermost/server/bathroom-linux-amd64 Binary files differ diff --git a/mattermost/server/bathroom.go b/mattermost/server/bathroom.go index 04509ba..642a2e1 100644 --- a/mattermost/server/bathroom.go +++ b/mattermost/server/bathroom.go @@ -6,6 +6,7 @@ "github.com/mattermost/mattermost-server/plugin" "github.com/pkg/errors" "sync" + "reflect" ) type Config struct { @@ -17,6 +18,7 @@ plugin.MattermostPlugin config *Config configLock sync.RWMutex + configChanged chan struct{} } func (p *HelloWorldPlugin) Init() *HelloWorldPlugin { @@ -33,19 +35,35 @@ p.configLock.Lock() defer p.configLock.Unlock() - if err := p.API.LoadPluginConfiguration(p.config); err != nil { + var newConfig *Config = new(Config); + if err := p.API.LoadPluginConfiguration(newConfig); err != nil { return errors.Wrap(err, "failed to load configuration") } + if newConfig != p.config && reflect.ValueOf(*newConfig).NumField() != 0 { + // p.config = newConfig + } + p.API.LogInfo(fmt.Sprintf("Config: %d %s", p.config.NumDoors, p.config.WatchPath)) return nil } +func watchLoop(p *HelloWorldPlugin) { + for { + p.configLock.Lock() + var restart chan struct{} = p.configChanged + p.configLock.Unlock() + select { + case <- restart: + p.API.LogInfo("CONFIG CHANGED, RESTARTING") + } + } +} func (p *HelloWorldPlugin) OnActivate() error { - + //go watchLoop(p) return nil } diff --git a/mattermost/server/bathroom.tar.gz b/mattermost/server/bathroom.tar.gz index 6781b7e..4a75780 100644 --- a/mattermost/server/bathroom.tar.gz +++ b/mattermost/server/bathroom.tar.gz Binary files differ diff --git a/mattermost/server/plugin.json b/mattermost/server/plugin.json index e5c6549..a02176d 100644 --- a/mattermost/server/plugin.json +++ b/mattermost/server/plugin.json @@ -3,5 +3,13 @@ "name": "Bathroom Monitor", "server": { "executable": "bathroom-linux-amd64" + }, + "settings_schema": { + "header":"Header", + "footer":"Footer", + "settings": [ + {"key":"NumDoors", "display_name":"Number of Door Sensors", "type":"string", "default":"1"}, + {"key":"WatchPath", "display_name":"Folder path to watch for sensor changes", "type":"string", "default":"./"} + ] } }