From 23c670442392af1c75b935b3296ae2fc4fd094ba Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Mon, 23 Mar 2026 08:59:35 +0000 Subject: fix: support multiple enabled Google Task lists and Calendars - Update Google API interfaces with setters for list/calendar IDs - Update fetchCalendarEvents and fetchGoogleTasks to use enabled IDs from source_configs - Update timeline logic tests to reflect interface changes and seed config data - Ensure dashboard respects user-selected lists from settings --- internal/handlers/handlers.go | 34 ++++++++++++++++++++++++++++++++ internal/handlers/timeline_logic_test.go | 10 ++++++++++ 2 files changed, 44 insertions(+) (limited to 'internal/handlers') diff --git a/internal/handlers/handlers.go b/internal/handlers/handlers.go index 8abd4d7..fa97be0 100644 --- a/internal/handlers/handlers.go +++ b/internal/handlers/handlers.go @@ -373,6 +373,24 @@ func (h *Handler) fetchCalendarEvents(ctx context.Context, forceRefresh bool) ([ if h.googleCalendarClient == nil { return nil, nil } + + // Get enabled calendars from store + configs, _ := h.store.GetSourceConfigsBySource("gcal") + var enabledIDs []string + for _, cfg := range configs { + if cfg.Enabled { + enabledIDs = append(enabledIDs, cfg.ItemID) + } + } + + // If none enabled but we have a default from config, use that as a fallback + // (or if we want to respect the toggle strictly, we should only use enabled ones) + if len(enabledIDs) == 0 { + return nil, nil + } + + h.googleCalendarClient.SetCalendarIDs(enabledIDs) + fetcher := &CacheFetcher[models.CalendarEvent]{ Store: h.store, CacheKey: store.CacheKeyGoogleCalendar, @@ -389,6 +407,22 @@ func (h *Handler) fetchGoogleTasks(ctx context.Context, forceRefresh bool) ([]mo if h.googleTasksClient == nil { return nil, nil } + + // Get enabled task lists from store + configs, _ := h.store.GetSourceConfigsBySource("gtasks") + var enabledIDs []string + for _, cfg := range configs { + if cfg.Enabled { + enabledIDs = append(enabledIDs, cfg.ItemID) + } + } + + if len(enabledIDs) == 0 { + return nil, nil + } + + h.googleTasksClient.SetTaskListID(strings.Join(enabledIDs, ",")) + fetcher := &CacheFetcher[models.GoogleTask]{ Store: h.store, CacheKey: store.CacheKeyGoogleTasks, diff --git a/internal/handlers/timeline_logic_test.go b/internal/handlers/timeline_logic_test.go index d6959da..03bc291 100644 --- a/internal/handlers/timeline_logic_test.go +++ b/internal/handlers/timeline_logic_test.go @@ -33,6 +33,8 @@ func (m *MockCalendarClient) GetCalendarList(ctx context.Context) ([]models.Cale return nil, m.Err } +func (m *MockCalendarClient) SetCalendarIDs(ids []string) {} + func setupTestStore(t *testing.T) *store.Store { t.Helper() tempDir := t.TempDir() @@ -398,6 +400,14 @@ func TestFetchCalendarEvents_CacheFallbackOnAPIError(t *testing.T) { t.Fatalf("Failed to update cache metadata: %v", err) } + // Enable the calendar in config + err = db.SyncSourceConfigs("gcal", "calendar", []models.SourceConfig{ + {Source: "gcal", ItemType: "calendar", ItemID: "e-cached", ItemName: "Cached", Enabled: true}, + }) + if err != nil { + t.Fatalf("Failed to seed calendar config: %v", err) + } + // Create handler with a failing calendar client failingCal := &MockCalendarClient{Err: fmt.Errorf("API unavailable")} h := &Handler{ -- cgit v1.2.3