Skip to content

Commit a34a27e

Browse files
authored
Tweak calendar events (#2349)
1 parent d9ea246 commit a34a27e

File tree

4 files changed

+79
-53
lines changed

4 files changed

+79
-53
lines changed

scripts/sync-working-groups/sync-working-groups.ts

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ async function main() {
5656
const existingMeetings = await readExistingMeetings()
5757
console.log(`Found ${existingMeetings.length} existing event(s) in file`)
5858

59-
const lastMeetingStart = existingMeetings.at(-1)?.start ?? null
6059
const cutoffDate = new Date(
6160
now.getTime() - DAYS_TO_KEEP * 24 * 60 * 60 * 1000,
6261
)
@@ -68,12 +67,9 @@ async function main() {
6867
maxResults: "250",
6968
})
7069

71-
const timeMin =
72-
lastMeetingStart !== null && lastMeetingStart !== undefined
73-
? new Date(Math.min(Date.parse(lastMeetingStart), now.getTime()))
74-
: new Date(now.getTime() - DAYS_BACK * 24 * 60 * 60 * 1000)
75-
70+
const timeMin = new Date(now.getTime() - DAYS_BACK * 24 * 60 * 60 * 1000)
7671
const timeMax = new Date(now.getTime() + DAYS_AHEAD * 24 * 60 * 60 * 1000)
72+
7773
searchParams.set("timeMin", timeMin.toISOString())
7874
searchParams.set("timeMax", timeMax.toISOString())
7975
console.log(
@@ -138,14 +134,11 @@ async function main() {
138134
`Fetched ${newMeetings.length} event(s) from API (${newCount} new)`,
139135
)
140136

141-
const allMeetings = mergeMeetings(existingMeetings, newMeetings)
137+
const allMeetings = mergeMeetings(existingMeetings, newMeetings, timeMin)
142138
const netChange = allMeetings.length - existingMeetings.length
143139

144-
if (netChange > 0) {
145-
console.log(`Added ${netChange} new event(s)`)
146-
} else if (netChange < 0) {
147-
console.log(`Removed ${Math.abs(netChange)} event(s)`)
148-
}
140+
console.log(`Net change: ${(netChange > 0 ? "+" : "") + netChange} event(s)`)
141+
149142
const cutoffDateStr = cutoffDate.toISOString().split("T")[0]
150143
const futureLimit = new Date(now.getTime() + DAYS_AHEAD * 24 * 60 * 60 * 1000)
151144
const futureLimitStr = futureLimit.toISOString().split("T")[0]
@@ -193,20 +186,33 @@ async function readExistingMeetings(): Promise<WorkingGroupMeeting[]> {
193186
function mergeMeetings(
194187
existing: WorkingGroupMeeting[],
195188
incoming: WorkingGroupMeeting[],
189+
checkForDeletionsAfter: Date,
196190
): WorkingGroupMeeting[] {
191+
const toDelete = new Set<string>()
197192
const byId = new Map<string, WorkingGroupMeeting>()
198193

199194
for (const meeting of existing) {
200195
byId.set(meeting.id, meeting)
196+
if (Date.parse(meeting.start) > +checkForDeletionsAfter) {
197+
toDelete.add(meeting.id)
198+
}
201199
}
202200

203201
for (const meeting of incoming) {
202+
toDelete.delete(meeting.id)
204203
const existing = byId.get(meeting.id)
205204
if (!existing || meeting.updated > existing.updated) {
206205
byId.set(meeting.id, meeting)
207206
}
208207
}
209208

209+
if (toDelete.size) {
210+
console.log(`Deleted ${toDelete.size} event(s)`)
211+
}
212+
for (const id of toDelete) {
213+
byId.delete(id)
214+
}
215+
210216
return Array.from(byId.values())
211217
}
212218

0 commit comments

Comments
 (0)