summaryrefslogtreecommitdiff
path: root/internal/handlers/timeline_logic.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/handlers/timeline_logic.go')
-rw-r--r--internal/handlers/timeline_logic.go29
1 files changed, 28 insertions, 1 deletions
diff --git a/internal/handlers/timeline_logic.go b/internal/handlers/timeline_logic.go
index 553593d..5ea44b5 100644
--- a/internal/handlers/timeline_logic.go
+++ b/internal/handlers/timeline_logic.go
@@ -13,7 +13,7 @@ import (
)
// BuildTimeline aggregates and normalizes data into a timeline structure
-func BuildTimeline(ctx context.Context, s *store.Store, calendarClient api.GoogleCalendarAPI, start, end time.Time) ([]models.TimelineItem, error) {
+func BuildTimeline(ctx context.Context, s *store.Store, calendarClient api.GoogleCalendarAPI, tasksClient api.GoogleTasksAPI, start, end time.Time) ([]models.TimelineItem, error) {
var items []models.TimelineItem
now := config.Now()
@@ -151,6 +151,33 @@ func BuildTimeline(ctx context.Context, s *store.Store, calendarClient api.Googl
}
}
+ // 5. Fetch Google Tasks
+ if tasksClient != nil {
+ gTasks, err := tasksClient.GetTasksByDateRange(ctx, start, end)
+ if err == nil {
+ for _, gTask := range gTasks {
+ taskTime := start // Default to start of range if no due date
+ if gTask.DueDate != nil {
+ taskTime = *gTask.DueDate
+ }
+ item := models.TimelineItem{
+ ID: gTask.ID,
+ Type: models.TimelineItemTypeGTask,
+ Title: gTask.Title,
+ Time: taskTime,
+ Description: gTask.Notes,
+ URL: gTask.URL,
+ OriginalItem: gTask,
+ IsCompleted: gTask.Completed,
+ Source: "gtasks",
+ ListID: gTask.ListID,
+ }
+ item.ComputeDaySection(now)
+ items = append(items, item)
+ }
+ }
+ }
+
// Sort items by Time
sort.Slice(items, func(i, j int) bool {
return items[i].Time.Before(items[j].Time)