summaryrefslogtreecommitdiff
path: root/internal/models/timeline.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/models/timeline.go')
-rw-r--r--internal/models/timeline.go17
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