From 912bcf53bd96ee7476beabf0105715857b66e193 Mon Sep 17 00:00:00 2001 From: Yanxin Lu Date: Sun, 22 Mar 2026 15:50:43 -0700 Subject: [PATCH] calendar: fix _days_until to handle Unix timestamps from todoman --porcelain --- skills/calendar/scripts/cal_tool.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/skills/calendar/scripts/cal_tool.py b/skills/calendar/scripts/cal_tool.py index 950b342..e44db62 100644 --- a/skills/calendar/scripts/cal_tool.py +++ b/skills/calendar/scripts/cal_tool.py @@ -413,15 +413,23 @@ def _todoman_list_json(*extra_args): return json.loads(result.stdout) -def _days_until(due_str): - """Days from today until due date string. Negative means overdue.""" - if not due_str: +def _days_until(due_val): + """Days from today until due date (string or Unix timestamp). Negative means overdue.""" + if not due_val: return None + # Unix timestamp (int/float) from todoman --porcelain + if isinstance(due_val, (int, float)): + try: + due_date = datetime.fromtimestamp(due_val, tz=timezone.utc).date() + except (ValueError, TypeError, OSError): + return None + return (due_date - date.today()).days + # String formats (ISO or YYYY-MM-DD) try: - due_date = datetime.fromisoformat(due_str).date() + due_date = datetime.fromisoformat(due_val).date() except (ValueError, TypeError): try: - due_date = _parse_date(due_str) + due_date = _parse_date(due_val) except ValueError: return None return (due_date - date.today()).days