summaryrefslogtreecommitdiff
path: root/internal/api/google_calendar.go
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-01-23 16:10:52 -1000
committerPeter Stone <thepeterstone@gmail.com>2026-01-23 16:10:52 -1000
commit7828e19501b3ca8b2e86ca7297f580c659e5c9b8 (patch)
treee3113af67fcecc459d81b213d7f043630dccae98 /internal/api/google_calendar.go
parentd11334c0999efb670a8eab93527a50f644fdfceb (diff)
Fix bugs #24-27: calendar dedup, uncomplete tasks, planning view
Bug fixes: - #24: Deduplicate calendar events across multiple calendars using summary + start time as key - #25: Change event icon from calendar to clock to avoid confusion with date display - #26: Add task uncomplete functionality via ReopenTask API for Todoist and closed=false for Trello - #27: Restructure planning view with sections for Scheduled (timed events/tasks), Today (unscheduled), Quick Add, and Upcoming (3 days) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'internal/api/google_calendar.go')
-rw-r--r--internal/api/google_calendar.go22
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
}