From 28d874edd8b792fad88590e7bd12bcddc3521d84 Mon Sep 17 00:00:00 2001 From: Zaine Date: Wed, 10 Jun 2026 16:30:21 +0100 Subject: [PATCH] updates for zmanagement x3 --- .../zaine/app/service/CalendarSyncService.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/zaine/app/service/CalendarSyncService.java b/src/main/java/org/zaine/app/service/CalendarSyncService.java index 5b9e899..1c6cd05 100644 --- a/src/main/java/org/zaine/app/service/CalendarSyncService.java +++ b/src/main/java/org/zaine/app/service/CalendarSyncService.java @@ -36,7 +36,9 @@ import java.time.temporal.Temporal; import java.util.ArrayList; import java.util.Base64; import java.util.Comparator; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -157,11 +159,22 @@ public class CalendarSyncService { } } - return events.stream() + return deduplicate(events.stream() .filter(event -> event.getStartsAt().isBefore(to.toOffsetDateTime()) && event.getEndsAt().isAfter(from.toOffsetDateTime())) .sorted(Comparator.comparing(CalendarEvent::getStartsAt)) - .toList(); + .toList()); + } + + private List deduplicate(List events) { + Map uniqueEvents = new LinkedHashMap<>(); + for (CalendarEvent event : events) { + CalendarEvent duplicate = uniqueEvents.putIfAbsent(event.getExternalId(), event); + if (duplicate != null) { + logger.info("Skipping duplicate calendar event from " + event.getSource() + " at " + event.getStartsAt()); + } + } + return List.copyOf(uniqueEvents.values()); } private List toCalendarEvents(