55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
import uuid
|
|
from datetime import datetime, timezone
|
|
from calendar import month_abbr
|
|
|
|
start_year = 2025
|
|
|
|
def get_event_date(date_str):
|
|
parts = date_str.split()
|
|
if len(parts) != 2:
|
|
return None
|
|
month_str, day_str = parts
|
|
month = list(month_abbr).index(month_str)
|
|
day = int(day_str)
|
|
# If the month is September (9) or later, use start_year; otherwise, the next year.
|
|
year = start_year if month >= 9 else start_year + 1
|
|
return datetime(year, month, day).date()
|
|
|
|
events = []
|
|
with open('reading_plan.md', 'r') as f:
|
|
# Read only the lines that begin with a pipe symbol ("|")
|
|
lines = [line for line in f if line.strip().startswith("|")]
|
|
if len(lines) < 3:
|
|
raise Exception("Not enough rows in markdown table")
|
|
# Skip header and separator lines
|
|
data_lines = lines[2:]
|
|
for line in data_lines:
|
|
cols = [c.strip() for c in line.strip().strip("|").split("|")]
|
|
if len(cols) < 4:
|
|
continue
|
|
date_val = get_event_date(cols[0])
|
|
if not date_val:
|
|
continue
|
|
summary = f"Day {cols[1]} Reading"
|
|
description = f"Old Testament: {cols[2]}\\nNew Testament: {cols[3]}"
|
|
events.append((date_val, summary, description))
|
|
|
|
with open('reading_plan.ics', 'w') as f:
|
|
f.write("BEGIN:VCALENDAR\n")
|
|
f.write("VERSION:2.0\n")
|
|
f.write("PRODID:-//OSB in one Year//EN\n")
|
|
for date_val, summary, description in events:
|
|
f.write("BEGIN:VEVENT\n")
|
|
uid = str(uuid.uuid4())
|
|
# Use timezone-aware UTC time for DTSTAMP
|
|
dtstamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
|
|
dtstart = date_val.strftime("%Y%m%d")
|
|
f.write("UID:" + uid + "\n")
|
|
f.write("DTSTAMP:" + dtstamp + "\n")
|
|
f.write("DTSTART;VALUE=DATE:" + dtstart + "\n")
|
|
f.write("SUMMARY:" + summary + "\n")
|
|
f.write("DESCRIPTION:" + description + "\n")
|
|
f.write("END:VEVENT\n")
|
|
f.write("END:VCALENDAR\n")
|
|
|