diff options
Diffstat (limited to 'internal/api/google_calendar.go')
| -rw-r--r-- | internal/api/google_calendar.go | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/internal/api/google_calendar.go b/internal/api/google_calendar.go index 8dd48f0..2154351 100644 --- a/internal/api/google_calendar.go +++ b/internal/api/google_calendar.go @@ -76,15 +76,27 @@ func (c *GoogleCalendarClient) GetUpcomingEvents(ctx context.Context, maxResults } } + // Deduplicate events (same event may appear in multiple calendars) + seen := make(map[string]bool) + var uniqueEvents []models.CalendarEvent + for _, event := range allEvents { + // Use summary + start time as dedup key + key := event.Summary + event.Start.Format(time.RFC3339) + if !seen[key] { + seen[key] = true + uniqueEvents = append(uniqueEvents, event) + } + } + // Sort all events by start time - sort.Slice(allEvents, func(i, j int) bool { - return allEvents[i].Start.Before(allEvents[j].Start) + sort.Slice(uniqueEvents, func(i, j int) bool { + return uniqueEvents[i].Start.Before(uniqueEvents[j].Start) }) // Limit to maxResults - if len(allEvents) > maxResults { - allEvents = allEvents[:maxResults] + if len(uniqueEvents) > maxResults { + uniqueEvents = uniqueEvents[:maxResults] } - return allEvents, nil + return uniqueEvents, nil } |
