@ -55,6 +55,7 @@ func (b *Bridge) Run(ctx context.Context, eventCh chan<- models.Event) error {
absences := make ( map [ int ] time . Time )
lastPress := make ( map [ string ] time . Time )
lastUpdate := time . Now ( )
needFull := false
for {
@ -62,6 +63,10 @@ func (b *Bridge) Run(ctx context.Context, eventCh chan<- models.Event) error {
case <- ctx . Done ( ) :
return ctx . Err ( )
case <- lightRefreshTimer . C :
if time . Since ( lastUpdate ) < time . Second * 10 {
continue
}
if needFull {
err := b . RefreshAll ( ctx )
if err != nil {
@ -79,9 +84,16 @@ func (b *Bridge) Run(ctx context.Context, eventCh chan<- models.Event) error {
return err
}
if updated > 0 {
// Force this to cool for 30 seconds unless a manual update occurs.
if updated > 10 {
lastUpdate = time . Now ( ) . Add ( time . Second * 15 )
}
log . Println ( fmt . Sprintf ( "[Bridge %d]" , b . externalID ) , "Updated" , updated , "hue services (regular check)" )
}
case <- b . needsUpdate :
lastUpdate = time . Now ( )
updated , err := b . MakeCongruent ( ctx )
if err != nil {
return err
@ -125,9 +137,11 @@ func (b *Bridge) Run(ctx context.Context, eventCh chan<- models.Event) error {
continue
}
b . mu . Lock ( )
if b . resources [ patch . Owner . ID ] == nil {
needFull = true
}
b . mu . Unlock ( )
device , deviceOK := b . devices [ patch . Owner . ID ]
if ! deviceOK || device . ID == 0 {
@ -141,7 +155,7 @@ func (b *Bridge) Run(ctx context.Context, eventCh chan<- models.Event) error {
} else if patch . Button . LastEvent == "long_release" {
valid = false
} else {
valid = lastPress [ patch . ID ] . Unix ( ) != data . CreationTime . Unix ( )
valid = data . CreationTime . Sub ( lastPress [ patch . ID ] ) >= time . Second * 2
}
if valid {