Skip to content

Commit 618ef95

Browse files
committed
Preserve event trigger state on iCal update
The iCal parser now retains the triggered and endTriggered flags for events that persist across updates, matching by start time and title. This prevents unnecessary reset of trigger states for recurring or unchanged events.
1 parent 6c8d42d commit 618ef95

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

usermods/google_calendar_scheduler/google_calendar_scheduler.cpp

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,13 @@ bool GoogleCalendarScheduler::fetchCalendarEvents() {
323323

324324
// Simple iCal parser - extracts VEVENT blocks
325325
void GoogleCalendarScheduler::parseICalData(String& icalData) {
326+
// Store old events to preserve trigger state
327+
CalendarEvent oldEvents[MAX_EVENTS];
328+
uint8_t oldEventCount = eventCount;
329+
for (uint8_t i = 0; i < oldEventCount; i++) {
330+
oldEvents[i] = events[i];
331+
}
332+
326333
eventCount = 0;
327334

328335
int pos = 0;
@@ -398,9 +405,23 @@ void GoogleCalendarScheduler::parseICalData(String& icalData) {
398405
event.endTime = parseICalDateTime(dtEnd);
399406
}
400407

401-
// Reset trigger flags
402-
event.triggered = false;
403-
event.endTriggered = false;
408+
// Preserve trigger state if this event existed before with same start time
409+
bool foundMatch = false;
410+
for (uint8_t i = 0; i < oldEventCount; i++) {
411+
if (oldEvents[i].startTime == event.startTime &&
412+
oldEvents[i].title == event.title) {
413+
event.triggered = oldEvents[i].triggered;
414+
event.endTriggered = oldEvents[i].endTriggered;
415+
foundMatch = true;
416+
break;
417+
}
418+
}
419+
420+
// Reset trigger flags only for new events
421+
if (!foundMatch) {
422+
event.triggered = false;
423+
event.endTriggered = false;
424+
}
404425

405426
DEBUG_PRINT(F("Calendar: Event "));
406427
DEBUG_PRINT(eventCount);

0 commit comments

Comments
 (0)