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