finish EventHandler model for now.

This commit is contained in:
2021-09-20 18:10:18 +02:00
parent 4109d41bec
commit b2c9cca400
+28 -3
View File
@@ -11,8 +11,11 @@ type EventHandler struct {
ID int `json:"id"`
EventName string `json:"eventName"`
Conditions map[string]EventCondition `json:"conditions"`
OneShot bool `json:"oneShot"`
Priority int `json:"priority"`
TargetKind ReferenceKind `json:"targetType"`
TargetValue string `json:"targetValue"`
Actions EventAction `json:"actions"`
}
type EventHandlerRepository interface {
@@ -49,9 +52,9 @@ func (h *EventHandler) MatchesEvent(event Event, targets []Device) bool {
}
func (c *EventCondition) check(key, value string, targets []Device) bool {
any := strings.Index(key, "any.") == 0
all := strings.Index(key, "all.") == 0
if any || all && len(key) > 4 {
any := strings.HasPrefix(key, "any.")
all := strings.HasPrefix(key, "all.")
if any || all {
count := 0
for _, target := range targets {
if c.checkDevice(key[4:], target) {
@@ -119,3 +122,25 @@ func (c *EventCondition) matches(value string) bool {
return false
}
}
type EventAction struct {
SetPower *bool `json:"setPower"`
SetColor *string `json:"setColor"`
SetIntensity *float64 `json:"setIntensity"`
AddIntensity *float64 `json:"addIntensity"`
}
func (action *EventAction) Apply(other EventAction) {
if action.SetPower == nil {
action.SetPower = other.SetPower
}
if action.SetColor == nil {
action.SetColor = other.SetColor
}
if action.SetIntensity == nil && other.SetIntensity != nil {
action.SetIntensity = other.SetIntensity
}
if action.AddIntensity == nil && action.SetIntensity == nil {
action.AddIntensity = other.AddIntensity
}
}