Skip to content
Snippets Groups Projects
Commit 34522391 authored by Martin Mareš's avatar Martin Mareš
Browse files

Hook: Proper handling of occurrences

parent b0659b4f
No related branches found
No related tags found
No related merge requests found
......@@ -66,61 +66,123 @@ class HookApp:
])
return ["{} {}".format(code, msg)]
def create_regular_meeting(self, uid, meeting):
meeting_id = meeting["id"]
self.log(f"Meeting {meeting_id}: Planning")
db_query("""
INSERT INTO zoom_meetings
(meeting_id, uuid, host_id, topic, type, start_time, duration)
VALUES (%s, %s, %s, %s, %s, %s, %s)
""", (
meeting_id,
meeting['uuid'],
uid,
meeting['topic'],
meeting['type'],
parse_time(meeting['start_time'], meeting['timezone']),
meeting['duration'],
))
db_connection.commit()
def create_recurring_meeting(self, uid, meeting):
meeting_id = meeting["id"]
for occ in meeting["occurrences"]:
occ_id = occ["occurrence_id"]
self.log(f"Meeting {meeting_id}: Planning occurrence {occ_id}")
db_query("""
INSERT INTO zoom_meetings
(meeting_id, uuid, occurrence_id, host_id, topic, type, start_time, duration)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
""", (
meeting_id,
meeting['uuid'],
occ_id,
uid,
meeting['topic'],
meeting['type'],
parse_time(occ['start_time'], meeting['timezone']),
occ['duration'],
))
db_connection.commit()
def create_meeting(self, js):
payload = js["payload"]
object = payload["object"]
meeting_id = object["id"]
meeting = payload["object"]
meeting_id = meeting["id"]
type = object["type"]
if type != 2 and type != 8:
self.log(f"Meeting type {type} ignored")
return
host_user_id = object["host_id"]
host_user_id = meeting["host_id"]
db_query("SELECT * FROM zoom_users WHERE user_id=%s", (host_user_id,))
user = db.fetchone()
if user is None:
self.log(f"Meeting {meeting_id}: Host {host_user_id} not found in zoom_users")
return
self.log(f"Meeting {meeting_id}: Planning")
type = meeting["type"]
if type == 2:
self.create_regular_meeting(user.id, meeting)
elif type == 8:
self.create_recurring_meeting(user.id, meeting)
else:
self.log(f"Meeting {meeting_id}: Unknown type {type}")
return
def delete_regular_meeting(self, meeting):
meeting_id = meeting["id"]
self.log(f"Meeting {meeting_id}: Deleting")
db_query("""
INSERT INTO zoom_meetings
(meeting_id, uuid, host_id, topic, type, start_time, duration)
VALUES (%s, %s, %s, %s, %s, %s, %s)
DELETE FROM zoom_meetings
WHERE meeting_id=%s
""", (
meeting_id,
object['uuid'],
user.id,
object['topic'],
object['type'],
parse_time(object['start_time'], object['timezone']),
object['duration'],
))
db_connection.commit()
def delete_meeting(self, js):
payload = js["payload"]
object = payload["object"]
meeting_id = object["id"]
type = object["type"]
if type != 2 and type != 8:
self.log(f"Meeting type {type} ignored")
return
def delete_recurring_meeting(self, meeting):
meeting_id = meeting["id"]
self.log(f"Meeting {meeting_id}: Deleting")
if "occurrences" not in meeting:
return self.delete_regular_meeting(meeting)
for occ in meeting["occurrences"]:
occ_id = occ["occurrence_id"]
self.log(f"Meeting {meeting_id}: Deleting occurrence {occ_id}")
db_query("""
DELETE FROM zoom_meetings
WHERE meeting_id=%s AND start_time=%s AND duration=%s
WHERE meeting_id=%s AND occurrence_id=%s
""", (
meeting_id,
parse_time(object['start_time'], object['timezone']),
object['duration'],
occ_id,
))
db_connection.commit()
def delete_meeting(self, js):
payload = js["payload"]
meeting = payload["object"]
meeting_id = meeting["id"]
type = meeting["type"]
if type == 2:
self.delete_regular_meeting(meeting)
elif type == 8:
self.delete_recurring_meeting(meeting)
else:
self.log(f"Meeting {meeting_id}: Unknown type {type}")
return
def run(self):
method = self.env['REQUEST_METHOD']
if method != 'POST':
......@@ -135,12 +197,12 @@ class HookApp:
self.log(js)
event = js["event"]
# if event == "meeting.created":
# self.create_meeting(js)
# elif event == "meeting.deleted":
# self.delete_meeting(js)
# else:
# self.log(f"Unknown event: {event}")
if event == "meeting.created":
self.create_meeting(js)
elif event == "meeting.deleted":
self.delete_meeting(js)
else:
self.log(f"Unknown event: {event}")
self.wsgi_start("204 No Content", [])
return b""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment