Files
2024-04-16 16:59:59 -04:00

112 lines
4.3 KiB
Python

import datetime
import time
import subprocess
import os
import reference
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
# If modifying these scopes, delete the file token.json.
SCOPES = ["https://www.googleapis.com/auth/calendar.readonly"]
IGNORE_TYPES = ["workingLocation", "outOfOffice", "focusTime"]
def main():
"""Shows basic usage of the Google Calendar API.
Prints the start and name of the next 10 events on the user's calendar.
"""
creds = None
if os.path.exists("token.json"):
creds = Credentials.from_authorized_user_file("token.json", SCOPES)
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file("credentials.json", SCOPES)
creds = flow.run_local_server(port=0)
with open("token.json", "w") as token:
token.write(creds.to_json())
try:
service = build("calendar", "v3", credentials=creds)
# Call the Calendar API
now = datetime.datetime.utcnow().isoformat() + "Z"
# time_change = datetime.timedelta(minutes=5)
# print(now)
# now2 = now + time_change
# now2 = now2.isoformat() + "Z"
# print(now2)
events_result = (
service.events()
.list(
calendarId="primary",
timeMin=now,
maxResults=4,
singleEvents=True,
orderBy="startTime",
)
.execute()
)
events = events_result.get("items", [])
if not events:
print("No upcoming events found.")
return
# curr_client = "Artera"
# if curr_client in reference.GONG_URLS.keys():
# cmd=f'''osascript -e 'display notification "Meeting with {curr_client} soon. Opening GonG URL"' '''
# os.system(cmd)
# time.sleep(5)
# os.system(f"open {reference.BASE_URL}{reference.GONG_URLS[curr_client]}")
# else:
# print("Not found")
# Prints the start and name of the next 10 events
for event in events:
# Parse the datetime first
start = event["start"].get("dateTime", event["start"].get("date"))[:-6]
if len(start) > 4:
if event["eventType"] not in IGNORE_TYPES:
# start = start[:-6]
start_time = datetime.datetime.strptime(start, "%Y-%m-%dT%H:%M:%S")
now = datetime.datetime.now()
difference = start_time - now
seconds_in_day = 24 * 60 * 60
time_left_in_min_sec = divmod(difference.days * seconds_in_day + difference.seconds, 60)
# print(time_left_in_min_sec)
# Then parse the name to attribute it to a client.
client_name = event["summary"]
print(client_name)
if time_left_in_min_sec[0] < 10 and time_left_in_min_sec > 0:
if client_name in reference.GONG_URLS.keys():
cmd=f'''osascript -e 'display notification "Meeting with {curr_client} soon. Opening GonG URL"' '''
os.system(cmd)
time.sleep(5)
os.system(f"open {reference.BASE_URL}{reference.GONG_URLS[curr_client]}")
else:
# print("Not found")
pass
# print("Upcoming Meeting")
# if client_name in reference.GONG_URLS.keys()
else:
pass
# print("Nothing new")
# print(start, event["organizer"]["email"])
# if event["eventType"] != "outOfOffice":
# print(event["organizer"]["email"])
# for items in event["attendees"]:
# print(items["email"])
except HttpError as error:
print(f"An error occurred: {error}")
if __name__ == "__main__":
main()