mirror of
https://github.com/Xevion/go-ha.git
synced 2025-12-05 23:15:07 -06:00
switch back to pointers, but this time add etl := etl when iterating over list to set correct pointer
This commit is contained in:
18
app.go
18
app.go
@@ -26,9 +26,9 @@ type App struct {
|
||||
|
||||
schedules pq.PriorityQueue
|
||||
intervals pq.PriorityQueue
|
||||
entityListeners map[string][]EntityListener
|
||||
entityListeners map[string][]*EntityListener
|
||||
entityListenersId int64
|
||||
eventListeners map[string][]EventListener
|
||||
eventListeners map[string][]*EventListener
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -97,8 +97,8 @@ func NewApp(request NewAppRequest) *App {
|
||||
state: state,
|
||||
schedules: pq.New(),
|
||||
intervals: pq.New(),
|
||||
entityListeners: map[string][]EntityListener{},
|
||||
eventListeners: map[string][]EventListener{},
|
||||
entityListeners: map[string][]*EntityListener{},
|
||||
eventListeners: map[string][]*EventListener{},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,15 +147,16 @@ func (a *App) RegisterIntervals(intervals ...Interval) {
|
||||
|
||||
func (a *App) RegisterEntityListeners(etls ...EntityListener) {
|
||||
for _, etl := range etls {
|
||||
etl := etl
|
||||
if etl.delay != 0 && etl.toState == "" {
|
||||
log.Fatalln("EntityListener error: you have to use ToState() when using Duration()")
|
||||
}
|
||||
|
||||
for _, entity := range etl.entityIds {
|
||||
if elList, ok := a.entityListeners[entity]; ok {
|
||||
a.entityListeners[entity] = append(elList, etl)
|
||||
a.entityListeners[entity] = append(elList, &etl)
|
||||
} else {
|
||||
a.entityListeners[entity] = []EntityListener{etl}
|
||||
a.entityListeners[entity] = []*EntityListener{&etl}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -163,12 +164,13 @@ func (a *App) RegisterEntityListeners(etls ...EntityListener) {
|
||||
|
||||
func (a *App) RegisterEventListeners(evls ...EventListener) {
|
||||
for _, evl := range evls {
|
||||
evl := evl
|
||||
for _, eventType := range evl.eventTypes {
|
||||
if elList, ok := a.eventListeners[eventType]; ok {
|
||||
a.eventListeners[eventType] = append(elList, evl)
|
||||
a.eventListeners[eventType] = append(elList, &evl)
|
||||
} else {
|
||||
ws.SubscribeToEventType(eventType, a.conn, a.ctx)
|
||||
a.eventListeners[eventType] = []EventListener{evl}
|
||||
a.eventListeners[eventType] = []*EventListener{&evl}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package gomeassistant
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/golang-module/carbon"
|
||||
@@ -130,7 +131,7 @@ func runSchedules(a *App) {
|
||||
sched = popSchedule(a)
|
||||
}
|
||||
|
||||
fmt.Println("Next schedule:", sched.nextRunTime)
|
||||
log.Println("Next schedule:", sched.nextRunTime)
|
||||
time.Sleep(time.Until(sched.nextRunTime))
|
||||
sched.maybeRunCallback(a)
|
||||
requeueSchedule(a, sched)
|
||||
|
||||
Reference in New Issue
Block a user