Add initial simple approach to time loop
This commit is contained in:
parent
6c14403ff4
commit
3b09a7da10
1 changed files with 35 additions and 4 deletions
|
@ -3,6 +3,7 @@ package server
|
|||
import (
|
||||
"time"
|
||||
|
||||
"git.ctrlz.es/mgdelacroix/birthdaybot/model"
|
||||
"github.com/charmbracelet/log"
|
||||
)
|
||||
|
||||
|
@ -35,15 +36,45 @@ func (w *Worker) Stop() {
|
|||
w.logger.Info("worker stopped")
|
||||
}
|
||||
|
||||
func (w *Worker) notifyDay(year, month, day int) {
|
||||
birthdays := model.FilterByDate(w.server.Birthdays(), year, month, day)
|
||||
w.logger.Info("notifying for date", "birthdays", len(birthdays), "year", year, "month", month, "day", day)
|
||||
|
||||
for _, b := range birthdays {
|
||||
w.logger.Info("notifying for birthday", "name", b.Name)
|
||||
w.server.Notify(b)
|
||||
}
|
||||
}
|
||||
|
||||
func (w *Worker) run() {
|
||||
ticker := time.NewTicker(1 * time.Second)
|
||||
// first we calculate the delta with 23:00
|
||||
now := time.Now()
|
||||
eleven := time.Date(now.Year(), now.Month(), now.Day(), 23, 0, 0, 0, now.Location())
|
||||
|
||||
if eleven.Before(now) {
|
||||
// tomorrow at 23:00
|
||||
eleven = time.Date(now.Year(), now.Month(), now.Day()+1, 23, 0, 0, 0, now.Location())
|
||||
}
|
||||
|
||||
firstTick := eleven.Sub(now)
|
||||
|
||||
var ticker *time.Ticker
|
||||
w.logger.Info("first timer tick set", "tick", firstTick)
|
||||
select {
|
||||
case <-time.After(firstTick):
|
||||
ticker = time.NewTicker(24 * time.Hour)
|
||||
w.notifyDay(eleven.Year(), int(eleven.Month()), eleven.Day())
|
||||
case <-w.stop:
|
||||
w.logger.Info("received stop signal")
|
||||
w.stopped <- true
|
||||
return
|
||||
}
|
||||
|
||||
for {
|
||||
select {
|
||||
case t := <-ticker.C:
|
||||
w.logger.Info("ticker ticked for worker", "tick", t)
|
||||
// ToDo: improve logic here
|
||||
b := w.server.Birthdays()[0]
|
||||
w.server.Notify(b)
|
||||
w.notifyDay(t.Year(), int(t.Month()), t.Day())
|
||||
case <-w.stop:
|
||||
w.logger.Info("received stop signal")
|
||||
w.stopped <- true
|
||||
|
|
Loading…
Reference in a new issue