55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
package hwinfostreamdeckplugin
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
type actionManager struct {
|
|
mux sync.RWMutex
|
|
actions map[string]*actionData
|
|
}
|
|
|
|
func newActionManager() *actionManager {
|
|
return &actionManager{actions: make(map[string]*actionData)}
|
|
}
|
|
|
|
func (tm *actionManager) Run(updateTiles func(*actionData)) {
|
|
go func() {
|
|
ticker := time.NewTicker(time.Second)
|
|
for range ticker.C {
|
|
tm.mux.RLock()
|
|
for _, data := range tm.actions {
|
|
if data.settings.IsValid {
|
|
updateTiles(data)
|
|
}
|
|
}
|
|
tm.mux.RUnlock()
|
|
}
|
|
}()
|
|
}
|
|
|
|
func (tm *actionManager) SetAction(action, context string, settings *actionSettings) {
|
|
tm.mux.Lock()
|
|
tm.actions[context] = &actionData{action, context, settings}
|
|
tm.mux.Unlock()
|
|
}
|
|
|
|
func (tm *actionManager) RemoveAction(context string) {
|
|
tm.mux.Lock()
|
|
delete(tm.actions, context)
|
|
tm.mux.Unlock()
|
|
}
|
|
|
|
func (tm *actionManager) getSettings(context string) (actionSettings, error) {
|
|
tm.mux.RLock()
|
|
data, ok := tm.actions[context]
|
|
tm.mux.RUnlock()
|
|
if !ok {
|
|
return actionSettings{}, fmt.Errorf("getSettings invalid key: %s", context)
|
|
}
|
|
// return full copy of settings, not reference to stored settings
|
|
return *data.settings, nil
|
|
}
|