diff options
Diffstat (limited to 'internal/models')
| -rw-r--r-- | internal/models/timeline.go | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/internal/models/timeline.go b/internal/models/timeline.go index 5224b72..b740c42 100644 --- a/internal/models/timeline.go +++ b/internal/models/timeline.go @@ -41,6 +41,23 @@ type TimelineItem struct { DaySection DaySection `json:"day_section"` Source string `json:"source"` // "trello", "plantoeat", "calendar", "gtasks" + // Undated is true only for genuinely dateless Task/GTask items (the + // caller uses Time=now as a layout placeholder for them -- see + // timeline_logic.go's nativeUndated/gtask-no-due-date branches). + // Deliberately NOT the same thing as IsAllDay: doot-native and Google + // Tasks due dates are ALWAYS midnight-anchored even when a task has a + // real due date (see reference_google_tasks_due_date_utc_quirk), so + // IsAllDay ends up true for both "no due date" and "has a due date, but + // it's date-only" -- a distinction the WEB UI doesn't need (it buckets + // by DaySection, computed from Time regardless of IsAllDay, and only + // uses IsAllDay for a same-day visual choice that's fine either way for + // tasks) but the ANDROID WIDGET does: TimelineItemToWidgetItem uses + // Undated, not IsAllDay, to decide whether to populate wi.Start, because + // the widget's undated/floating pool has no per-day awareness at all -- + // conflating "no date" with "dated but time-only-midnight" there means + // a task due tomorrow renders as if due today (2026-08-10 report). + Undated bool `json:"-"` + // Source-specific metadata ListID string `json:"list_id,omitempty"` // For Google Tasks RecurringEventID string `json:"recurring_event_id,omitempty"` // For calendar events |
