@@ -941,6 +941,34 @@ function processEventInstance(recEvent){
941941 * If removePastEventsFromCalendar is set to false, events that have taken place will not be removed.
942942 */
943943function processEventCleanup ( ) {
944+ // When an instance of a recurring event is deleted, we need to track it
945+ // First, let's track the existing recurring event instances from the calendar
946+ var existingRecurringInstances = new Set ( ) ;
947+
948+ for ( var i = 0 ; i < calendarEvents . length ; i ++ ) {
949+ if ( calendarEvents [ i ] . recurringEventId && calendarEvents [ i ] . extendedProperties &&
950+ calendarEvents [ i ] . extendedProperties . private && calendarEvents [ i ] . extendedProperties . private [ "rec-id" ] ) {
951+ existingRecurringInstances . add ( calendarEvents [ i ] . extendedProperties . private [ "rec-id" ] ) ;
952+ }
953+ }
954+
955+ // Check if any recurring event instance in our ICS data is missing from the calendar
956+ var deletedEventsJson = PropertiesService . getScriptProperties ( ) . getProperty ( 'manuallyDeletedEvents' ) ;
957+ var deletedEvents = deletedEventsJson ? JSON . parse ( deletedEventsJson ) : { } ;
958+ var now = new Date ( ) . getTime ( ) ;
959+
960+ for ( var i = 0 ; i < icsEventsIds . length ; i ++ ) {
961+ if ( icsEventsIds [ i ] . includes ( "_" ) ) { // This is a recurring event instance
962+ if ( ! existingRecurringInstances . has ( icsEventsIds [ i ] ) ) {
963+ // This recurring event instance exists in ICS but not in calendar - mark as deleted
964+ deletedEvents [ icsEventsIds [ i ] ] = now ;
965+ }
966+ }
967+ }
968+
969+ // Store updated deleted events list
970+ PropertiesService . getScriptProperties ( ) . setProperty ( 'manuallyDeletedEvents' , JSON . stringify ( deletedEvents ) ) ;
971+
944972 for ( var i = 0 ; i < calendarEvents . length ; i ++ ) {
945973 var currentID = calendarEventsIds [ i ] ;
946974 var feedIndex = icsEventsIds . indexOf ( currentID ) ;
0 commit comments