From ad609e913e188f2f32a83c2062a08b130c19c137 Mon Sep 17 00:00:00 2001 From: Chris Nutter Date: Thu, 9 Jan 2025 21:33:10 -0800 Subject: [PATCH] updated with todos and sysarg implement --- app.py | 93 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 46 insertions(+), 47 deletions(-) diff --git a/app.py b/app.py index e771dc4..163cdc1 100644 --- a/app.py +++ b/app.py @@ -2,6 +2,7 @@ import caldav import json import requests import tzdata +import sys from datetime import datetime, timedelta from zoneinfo import ZoneInfo @@ -21,92 +22,90 @@ def create_calendar_events_from_json(caldav_url, username, password, json): # 2. Get principal and calendar my_principal = client.principal() - my_calendar = my_principal.calendar(name="Achievement of the Week") # Replace with your calendar name + my_calendar = my_principal.calendar(name="Achievement of The Week") # Replace with your calendar name - # 3. Read JSON data + # 3a. Read JSON data response = requests.get(json) response.raise_for_status() - # 3a. Parse JSON + Time Calculator + # 3b. Parse JSON + Time Calculator events_data = response.json() + + # 3c. Convert UTC to PST start_time = datetime.fromisoformat(events_data['StartAt']).replace(tzinfo=ZoneInfo('UTC')).astimezone(ZoneInfo('America/Los_Angeles')) end_time = start_time + timedelta(weeks=1) - # 3b. Delete old data if it's the same. + # 3d. Check if Username is on unlocks + status = "NEEDS-ACTION" + if "Unlocks" in events_data: + for unlock in events_data["Unlocks"]: + if unlock["User"] == "{RA_USER}": # Replace with your username + status = "COMPLETED" + break + + # 3e. Delete old data if it's the same. for event in my_calendar.events(): if events_data['Achievement']['Title'] in event.data: event.delete() - - # Optional: Verify deletion + + #print(f"Checking and removing duplicates...") remaining = [e for e in my_calendar.events() if events_data['Achievement']['Title'] in e.data] - print(f"Remaining duplicates: {len(remaining)}") + #print(f"Remaining duplicates: {len(remaining)}") # 4. Create events from JSON data - # Create event in iCal format - ical_data = f"""BEGIN:VCALENDAR + print(f"Updating calendar...") + ical_data_event = f"""BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT SUMMARY:{events_data['Achievement']['Title']} DTSTART:{start_time.strftime('%Y%m%dT%H%M%S')} DTEND:{end_time.strftime('%Y%m%dT%H%M%S')} -DESCRIPTION:{events_data['Achievement']['Description']} -LOCATION:{events_data['Console']['Title']} - {events_data['Game']['Title']} +DESCRIPTION:{events_data['Achievement']['Description']}\\n\\nhttps://retroachievements.org/achievement/{events_data['Achievement']['ID']} +LOCATION:{events_data['Game']['Title']} for the {events_data['Console']['Title']} +CATEGORIES:RetroAchievements END:VEVENT END:VCALENDAR """ - # Create the event - my_calendar.save_event(ical_data) + print(f"Updating reminders...") + ical_data_todo = f"""BEGIN:VCALENDAR +VERSION:2.0 +BEGIN:VTODO +SUMMARY:{events_data['Achievement']['Title']} +DUE:{end_time.strftime('%Y%m%dT%H%M%S')} +STATUS:{status} +PRIORITY:1 +DESCRIPTION:{events_data['Achievement']['Description']}\\n\\nhttps://retroachievements.org/achievement/{events_data['Achievement']['ID']} +LOCATION:{events_data['Game']['Title']} for the {events_data['Console']['Title']} +CATEGORIES:RetroAchievements +END:VTODO +END:VCALENDAR +""" + + my_calendar.save_event(ical_data_event) + print(f"Calendar was updated.") + + my_calendar.save_todo(ical_data_todo) + print(f"Reminders were updated.") except Exception as e: print(f"Error: {str(e)}") -# Example JSON format: -""" -[ -{ - "Achievement": { - "ID": 354286, - "Title": "Adventure Man: Action Force Victory", - "Description": "Complete the Dr X Battle on Adventure Mode (No Passwords)", - "Points": 10, - "TrueRatio": 17, - "Type": "win_condition", - "Author": null, - "BadgeName": "399242", - "BadgeURL": "/Badge/399242.png", - "DateCreated": "2023-09-08", - "DateModified": "2023-09-11" - }, - "Console": { - "ID": 5, - "Title": "Game Boy Advance" - }, - "ForumTopic": { - "ID": 29289 - }, - "Game": { - "ID": 9848, - "Title": "Action Man: Robot Atak" - }, - "StartAt": "2025-01-06T00:00:00.000000Z", -] -""" - # Usage example if __name__ == "__main__": - if len(sys.argv) != 5: + if len(sys.argv) != 6: print("Usage: python3 app.py ") sys.exit(1) CALDAV_URL = sys.argv[1] USERNAME = sys.argv[2] PASSWORD = sys.argv[3] + RA_USER = sys.argv[5] RA_API = sys.argv[4] # CalDAV server details JSON = f"https://retroachievements.org/API/API_GetAchievementOfTheWeek.php?&y={RA_API}" - response = requests.get(JSON_FILE) + response = requests.get(JSON) data = response.json() create_calendar_events_from_json(CALDAV_URL, USERNAME, PASSWORD, JSON)