|
|
package channels
import ( "context" "log" "time"
"git.aiterp.net/rpdata/logbot3/internal/models" "git.aiterp.net/rpdata/logbot3/internal/models/changes" )
// SubscribeLogged returns a channel that gets all the channel changes.
func SubscribeLogged(ctx context.Context) (<-chan models.Channel, error) { earliest := time.Now() channels, err := ListLogged(ctx) if err != nil { return nil, err }
output := make(chan models.Channel, len(channels)+8) for _, channel := range channels { output <- channel }
go func() { for { time.Sleep(time.Second * 5)
// Get the changes.
changes, err := changes.List(ctx, &changes.Filter{EarliestDate: &earliest, Keys: []models.ChangeKey{{Model: "Channel", ID: "*"}}}) if ctx.Err() != nil { return } else if err != nil { log.Println("Failed to get chnges:", err) continue }
// Group changes to the same model.
for _, change := range changes { for _, obj := range change.Objects { channel, err := obj.Channel() if err != nil { continue }
output <- channel } } } }()
return output, nil }
|