Sort events by date asc

This commit is contained in:
Yax 2025-09-14 17:18:35 +02:00
parent 5797dc0dee
commit b80af75c09

View file

@ -10,7 +10,7 @@ import sys
import os
from dotenv import load_dotenv
from datetime import timedelta, date
from datetime import datetime, timedelta, date, time, timezone
from os import environ
from urllib.parse import quote_plus
import caldav
@ -33,7 +33,11 @@ def fill_event(component, calendar) -> dict[str, str]:
# month/day/year time? Never ever do that!
# It's one of the most confusing date formats ever!
# Use year-month-day time instead ... https://xkcd.com/1179/
cur["start"] = component.start.strftime("%m/%d/%Y %H:%M")
cur["start"] = component.start.strftime("%d/%m/%Y %H:%M")
if isinstance(component.start, datetime):
cur["dstart"] = component.start
else:
cur["dstart"] = datetime.combine(component.start, time(0, 0)).replace(tzinfo=timezone.utc)
endDate = component.end
if endDate:
cur["end"] = endDate.strftime("%m/%d/%Y %H:%M")
@ -68,15 +72,28 @@ def main():
print("No calendars defined for " + USERNAME)
sys.exit(0)
event_list = []
todo_list = []
for cal in calendars:
events = cal.search(event=True, start=start, end=end, expand=True) \
+ cal.search(todo=True)
events = cal.search(event=True, start=start, end=end, expand=True)
for event in events:
for component in event.icalendar_instance.walk():
if component.name == "VEVENT":
display_event(fill_event(component, cal))
elif component.name == "VTODO":
display_todo(fill_todo(component, cal))
event_list.append(fill_event(component, cal))
todos = cal.search(todo=True)
for todo in todos:
for component in todo.icalendar_instance.walk():
if component.name == "VTODO":
todo_list.append(fill_todo(component, cal))
event_list = sorted(event_list, key=lambda x: x['dstart'])
for event in event_list:
display_event(event)
for todo in todo_list:
display_todo(todo)
print(".")