From 3ec5a21714f92421fbec24683c8b0cc838533c8e Mon Sep 17 00:00:00 2001 From: mARTin Date: Mon, 23 Mar 2026 00:12:28 +0100 Subject: [PATCH] fix: Apple Calendar ignoring selection state, causing duplicate events Apple calendar events were fetched from ALL calendars regardless of the user's Display checkbox selection. Now respects the stored selected state, matching the behavior of Synology/Google/Outlook providers. Also reverts the title-based deduplication which was too aggressive. v1.57.7 Co-Authored-By: Claude Opus 4.6 --- package.json | 2 +- src/components/WeeklyView.tsx | 13 +------------ src/lib/calendar-events.ts | 13 ++++++++++++- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index e9d5aac..760f62a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "my-weekly-todo-list", - "version": "1.57.6", + "version": "1.57.7", "description": "A web-based weekly task management application that organizes to-dos and calendar events in a single, intuitive weekly view", "main": "index.js", "scripts": { diff --git a/src/components/WeeklyView.tsx b/src/components/WeeklyView.tsx index b007170..f2a2162 100644 --- a/src/components/WeeklyView.tsx +++ b/src/components/WeeklyView.tsx @@ -1597,18 +1597,7 @@ export default function WeeklyView() { // Extend events with editable flag from connections const calendarEvents = useMemo(() => { - // Deduplicate events that appear in multiple calendars - const seen = new Set(); - const deduped = rawCalendarEvents.filter((event) => { - const startVal = event.start?.dateTime || event.start?.date || ""; - const endVal = event.end?.dateTime || event.end?.date || ""; - const key = `${event.title}|${startVal}|${endVal}`; - if (seen.has(key)) return false; - seen.add(key); - return true; - }); - - return deduped.map((event) => { + return rawCalendarEvents.map((event) => { let isEditable = false; if (event.calendarId) { for (const conn of connections) { diff --git a/src/lib/calendar-events.ts b/src/lib/calendar-events.ts index 0443485..d00734a 100644 --- a/src/lib/calendar-events.ts +++ b/src/lib/calendar-events.ts @@ -371,7 +371,18 @@ export const getCalendarEvents = async ( // It is: export const getUserCalendars = validateCredentials; // validateCredentials: (email: string, appSpecificPassword: string) - const calendars = await getAppleCalendars(email, appPassword); + const freshCalendars = await getAppleCalendars(email, appPassword); + + // Use stored selection state if available, otherwise use all fresh calendars + let calendars = freshCalendars; + if (connection.calendars && Array.isArray(connection.calendars) && connection.calendars.length > 0) { + const storedCalendars = connection.calendars as any[]; + // Only fetch from calendars that are selected + calendars = freshCalendars.filter(fc => { + const stored = storedCalendars.find((sc: any) => sc.id === fc.id); + return stored ? stored.selected !== false : true; + }); + } const calendarIds = calendars.map(c => c.id); // Fetch events for each calendar