| package main |
| |
| import ( |
| "context" |
| "time" |
| |
| "code.hackerspace.pl/hscloud/hswaw/site/calendar" |
| "github.com/golang/glog" |
| ) |
| |
| func (s *service) eventsWorker(ctx context.Context) { |
| get := func() { |
| events, err := calendar.GetUpcomingEvents(ctx, time.Now()) |
| if err != nil { |
| glog.Errorf("Geting events failed: %v", err) |
| return |
| } |
| |
| s.eventsMu.Lock() |
| s.events = events |
| s.eventsMu.Unlock() |
| } |
| // Perform initial fetch. |
| get() |
| |
| // .. and update very minute. |
| t := time.NewTicker(time.Minute) |
| defer t.Stop() |
| |
| for { |
| select { |
| case <-ctx.Done(): |
| return |
| case <-t.C: |
| get() |
| } |
| } |
| } |
| |
| func (s *service) getEvents() []*calendar.UpcomingEvent { |
| s.eventsMu.RLock() |
| events := s.events |
| s.eventsMu.RUnlock() |
| return events |
| } |