summaryrefslogtreecommitdiff
path: root/internal/handlers
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-03-23 08:59:35 +0000
committerPeter Stone <thepeterstone@gmail.com>2026-03-23 08:59:35 +0000
commit23c670442392af1c75b935b3296ae2fc4fd094ba (patch)
tree3137ff26aa5ed14ff8acb77007d4bc6ec2fff217 /internal/handlers
parent92c784dd057d8f110c677516909162c4cd4d00da (diff)
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
Diffstat (limited to 'internal/handlers')
-rw-r--r--internal/handlers/handlers.go34
-rw-r--r--internal/handlers/timeline_logic_test.go10
2 files changed, 44 insertions, 0 deletions
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{