87 lines
2.7 KiB
Python
Executable File
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))
|
|
|