hwinfo-streamdeck/internal/app/hwinfostreamdeckplugin/action_manager.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
}