@@ -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[]> {
193186function 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