dotfiles/.local/bin/monitor9.py
2025-05-28 18:33:04 +02:00

87 lines
2.7 KiB
Python
Executable File

import caldav
from caldav import DAVClient
from caldav.elements import dav, cdav
import datetime
import json
# Replace these with your actual Apple ID and application-specific password
APPLE_ID = 'crlsprtrtz@icloud.com'
APP_PASSWORD = 'ewil-jvgj-dvev-qvjc'
# Initialize the client with SSL verification
client = DAVClient(
url='https://caldav.icloud.com/',
username=APPLE_ID,
password=APP_PASSWORD,
# verify_ssl=True # Ensure SSL verification is enabled for security
)
# Fetch the principal (iCloud user)
principal = client.principal()
# List all available calendars
calendars = principal.calendars()
# Define the desired calendar name
DESIRED_CALENDAR_NAME = "Trabajo"
# Initialize selected_calendar to None
selected_calendar = None
# Iterate through the calendars to find the desired one
for calendar in calendars:
if calendar.name.lower() == DESIRED_CALENDAR_NAME.lower():
selected_calendar = calendar
break
# Check if the desired calendar was found
if not selected_calendar:
print(f"Calendar '{DESIRED_CALENDAR_NAME}' not found.")
exit()
# Define the time range: now to 7 days from now
now = datetime.datetime.now()
in_7_days = now + datetime.timedelta(days=7)
# Fetch events within the specified time range
events = selected_calendar.date_search(
start=now,
end=in_7_days
)
# Prepare events for tooltip with enhanced formatting
# Prepare events for tooltip with enhanced formatting and ANSI colors
# Prepare events for tooltip with enhanced formatting and emojis
event_list = []
if events:
for event in events:
try:
event_details = event.vobject_instance
summary = event_details.vevent.summary.value if hasattr(event_details.vevent, 'summary') else 'No Title'
dtstart = event_details.vevent.dtstart.value if hasattr(event_details.vevent, 'dtstart') else 'No Start Time'
# Format datetime objects
if isinstance(dtstart, datetime.datetime):
dtstart_str = dtstart.strftime('%Y-%m-%d %H:%M')
elif isinstance(dtstart, datetime.date):
dtstart_str = dtstart.strftime('%Y-%m-%d') + " (All-Day)"
else:
dtstart_str = str(dtstart)
# Adding unicode icons and simple text formatting
event_list.append(f"📅 {summary}\n 🕒 {dtstart_str}")
except Exception as e:
continue
# Create the output JSON for Waybar with formatted tooltip
output = {
"text": now.strftime('%Y-%m-%d %H:%M'),
"tooltip": "\n\n".join(event_list) if event_list else "No events in the next 7 days",
"class": "calendar"
}
# Output JSON
print(json.dumps(output))