Files
luk/maildir_gtd/utils.py
2025-05-08 12:09:43 -06:00

43 lines
1.5 KiB
Python

from datetime import datetime, timedelta
import re
from typing import List, Dict
def group_envelopes_by_date(envelopes: List[Dict]) -> List[Dict]:
"""Group envelopes by date and add headers for each group."""
grouped_envelopes = []
today = datetime.now()
yesterday = today - timedelta(days=1)
start_of_week = today - timedelta(days=today.weekday())
start_of_last_week = start_of_week - timedelta(weeks=1)
start_of_month = today.replace(day=1)
start_of_last_month = (start_of_month - timedelta(days=1)).replace(day=1)
def get_group_label(date: datetime) -> str:
if date.date() == today.date():
return "Today"
elif date.date() == yesterday.date():
return "Yesterday"
elif date >= start_of_week:
return "This Week"
elif date >= start_of_last_week:
return "Last Week"
elif date >= start_of_month:
return "This Month"
elif date >= start_of_last_month:
return "Last Month"
else:
return "Older"
current_group = None
for envelope in envelopes:
envelope_date = re.sub(r"[\+\-]\d\d:\d\d", "", envelope["date"])
envelope_date = datetime.strptime(envelope_date, "%Y-%m-%d %H:%M")
group_label = get_group_label(envelope_date)
if group_label != current_group:
grouped_envelopes.append({"type": "header", "label": group_label})
current_group = group_label
grouped_envelopes.append(envelope)
return grouped_envelopes