Stian Fredrik Aune
3 years ago
5 changed files with 191 additions and 14 deletions
-
20app/services/handlerfactory/config.go
-
92app/services/handlerfactory/factory.go
-
72app/services/handlerfactory/utils.go
-
4cmd/lucy/factorycmd.go
-
15cmd/lucy/help.go
@ -0,0 +1,72 @@ |
|||||
|
package handlerfactory |
||||
|
|
||||
|
import ( |
||||
|
"git.aiterp.net/lucifer/new-server/models" |
||||
|
) |
||||
|
|
||||
|
func optimizeLists( |
||||
|
add []models.EventHandler, |
||||
|
del []models.EventHandler, |
||||
|
) ([]models.EventHandler, []models.EventHandler) { |
||||
|
newAdd := make([]models.EventHandler, 0, len(add)) |
||||
|
newDel := make([]models.EventHandler, 0, len(del)) |
||||
|
|
||||
|
OptimizeLoop1: |
||||
|
for _, addItem := range add { |
||||
|
for _, delItem := range del { |
||||
|
if checkDuplicate(&addItem, &delItem) { |
||||
|
continue OptimizeLoop1 |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
newAdd = append(newAdd, addItem) |
||||
|
} |
||||
|
|
||||
|
OptimizeLoop2: |
||||
|
for _, delItem := range del { |
||||
|
for _, addItem := range add { |
||||
|
if checkDuplicate(&addItem, &delItem) { |
||||
|
continue OptimizeLoop2 |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
newDel = append(newDel, delItem) |
||||
|
} |
||||
|
|
||||
|
return newAdd, newDel |
||||
|
} |
||||
|
|
||||
|
func checkDuplicate(a *models.EventHandler, b *models.EventHandler) bool { |
||||
|
check := true |
||||
|
check = check && a.EventName == b.EventName |
||||
|
check = check && len(a.Conditions) == len(b.Conditions) |
||||
|
for k := range a.Conditions { |
||||
|
check = check && a.Conditions[k] == b.Conditions[k] |
||||
|
} |
||||
|
check = check && a.OneShot == b.OneShot |
||||
|
check = check && a.Priority == b.Priority |
||||
|
check = check && a.TargetKind == b.TargetKind |
||||
|
check = check && a.TargetValue == b.TargetValue |
||||
|
check = check && a.From == b.From |
||||
|
check = check && a.To == b.To |
||||
|
|
||||
|
aPower := a.Actions.SetPower |
||||
|
bPower := b.Actions.SetPower |
||||
|
powerEq := (aPower == nil && bPower == nil) || (aPower != nil && bPower != nil && *aPower == *bPower) |
||||
|
|
||||
|
aColor := a.Actions.SetColor |
||||
|
bColor := b.Actions.SetColor |
||||
|
colorEq := (aColor == nil && bColor == nil) || (aColor != nil && bColor != nil && *aColor == *bColor) |
||||
|
|
||||
|
aInt := a.Actions.SetIntensity |
||||
|
bInt := b.Actions.SetIntensity |
||||
|
intEq := (aInt == nil && bInt == nil) || (aInt != nil && bInt != nil && *aInt == *bInt) |
||||
|
|
||||
|
aTemp := a.Actions.SetTemperature |
||||
|
bTemp := b.Actions.SetTemperature |
||||
|
tempEq := (aTemp == nil && bTemp == nil) || (aTemp != nil && bTemp != nil && *aTemp == *bTemp) |
||||
|
|
||||
|
check = check && powerEq && colorEq && intEq && tempEq |
||||
|
|
||||
|
return check |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue