refactor metadata
This commit is contained in:
39
maildir_gtd/utils.py
Normal file
39
maildir_gtd/utils.py
Normal file
@@ -0,0 +1,39 @@
|
||||
from datetime import datetime, timedelta
|
||||
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 = datetime.strptime(envelope['date'].split('+')[0], "%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
|
||||
Reference in New Issue
Block a user