Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 18 additions & 12 deletions scripts/sync-working-groups/sync-working-groups.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ async function main() {
const existingMeetings = await readExistingMeetings()
console.log(`Found ${existingMeetings.length} existing event(s) in file`)

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

const timeMin =
lastMeetingStart !== null && lastMeetingStart !== undefined
? new Date(Math.min(Date.parse(lastMeetingStart), now.getTime()))
: new Date(now.getTime() - DAYS_BACK * 24 * 60 * 60 * 1000)

const timeMin = new Date(now.getTime() - DAYS_BACK * 24 * 60 * 60 * 1000)
const timeMax = new Date(now.getTime() + DAYS_AHEAD * 24 * 60 * 60 * 1000)

searchParams.set("timeMin", timeMin.toISOString())
searchParams.set("timeMax", timeMax.toISOString())
console.log(
Expand Down Expand Up @@ -138,14 +134,11 @@ async function main() {
`Fetched ${newMeetings.length} event(s) from API (${newCount} new)`,
)

const allMeetings = mergeMeetings(existingMeetings, newMeetings)
const allMeetings = mergeMeetings(existingMeetings, newMeetings, timeMin)
const netChange = allMeetings.length - existingMeetings.length

if (netChange > 0) {
console.log(`Added ${netChange} new event(s)`)
} else if (netChange < 0) {
console.log(`Removed ${Math.abs(netChange)} event(s)`)
}
console.log(`Net change: ${(netChange > 0 ? "+" : "") + netChange} event(s)`)

const cutoffDateStr = cutoffDate.toISOString().split("T")[0]
const futureLimit = new Date(now.getTime() + DAYS_AHEAD * 24 * 60 * 60 * 1000)
const futureLimitStr = futureLimit.toISOString().split("T")[0]
Expand Down Expand Up @@ -193,20 +186,33 @@ async function readExistingMeetings(): Promise<WorkingGroupMeeting[]> {
function mergeMeetings(
existing: WorkingGroupMeeting[],
incoming: WorkingGroupMeeting[],
checkForDeletionsAfter: Date,
): WorkingGroupMeeting[] {
const toDelete = new Set<string>()
const byId = new Map<string, WorkingGroupMeeting>()

for (const meeting of existing) {
byId.set(meeting.id, meeting)
if (Date.parse(meeting.start) > +checkForDeletionsAfter) {
toDelete.add(meeting.id)
}
}

for (const meeting of incoming) {
toDelete.delete(meeting.id)
const existing = byId.get(meeting.id)
if (!existing || meeting.updated > existing.updated) {
byId.set(meeting.id, meeting)
}
}

if (toDelete.size) {
console.log(`Deleted ${toDelete.size} event(s)`)
}
for (const id of toDelete) {
byId.delete(id)
}

return Array.from(byId.values())
}

Expand Down
Loading
Loading