From 77936b3b8dd3dbbef7803a51db811a35d80691f8 Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Wed, 8 Apr 2026 14:43:34 +0200 Subject: [PATCH] =?UTF-8?q?Fix:=20CalDAV=20delete/update,=20Copy-Men=C3=BC?= =?UTF-8?q?-Reset,=20Timezone=20beim=20Kopieren=20-=20caldav=5Fclient:=20c?= =?UTF-8?q?lient.event()=20=E2=86=92=20caldav.Event()=20mit=20resource.loa?= =?UTF-8?q?d()=20f=C3=BCr=20update/delete=20(DAVClient=20hat=20keine=20eve?= =?UTF-8?q?nt()-Methode)=20-=20Popup:=20Copy-Men=C3=BC=20wird=20beim=20?= =?UTF-8?q?=C3=96ffnen=20eines=20neuen=20Events=20immer=20zur=C3=BCckgeset?= =?UTF-8?q?zt=20-=20copyEventToCalendar:=20start/end=20via=20new=20Date().?= =?UTF-8?q?toISOString()=20normalisiert=20=E2=86=92=20verhindert=202h-Vers?= =?UTF-8?q?chiebung=20bei=20Terminen=20ohne=20Timezone-Info?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/caldav_client.py | 5 +++-- frontend/js/calendar.js | 7 ++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/backend/caldav_client.py b/backend/caldav_client.py index 23c9bdd..49f9ca6 100644 --- a/backend/caldav_client.py +++ b/backend/caldav_client.py @@ -211,7 +211,8 @@ def update_event( url: str, username: str, password: str, event_url: str, data: Dict ): client = _client(url, username, password) - resource = client.event(url=event_url) + resource = caldav.Event(client=client, url=event_url) + resource.load() raw = resource.data cal = Calendar.from_ical(raw) @@ -255,7 +256,7 @@ def update_event( def delete_event(url: str, username: str, password: str, event_url: str): client = _client(url, username, password) - resource = client.event(url=event_url) + resource = caldav.Event(client=client, url=event_url) resource.delete() diff --git a/frontend/js/calendar.js b/frontend/js/calendar.js index 8e2ae6a..bfa22a3 100644 --- a/frontend/js/calendar.js +++ b/frontend/js/calendar.js @@ -723,6 +723,7 @@ function bindSidebar() { // ── Event Popup ─────────────────────────────────────────── function showEventPopup(ev, anchor) { const popup = document.getElementById('popup-event'); + document.getElementById('popup-copy-menu').classList.add('hidden'); popup.classList.remove('hidden'); const color = ev.color || ev.calendarColor || '#4285f4'; @@ -1935,7 +1936,11 @@ function buildWritableCalendars(_excludeEv) { } async function copyEventToCalendar(ev, cal) { - const { title, start, end, allDay, location, description, color } = ev; + const { title, allDay, location, description, color } = ev; + // Normalize to UTC ISO string so the backend doesn't misinterpret bare local times + const toISO = s => (s && s.length > 10) ? new Date(s).toISOString() : s; + const start = allDay ? ev.start : toISO(ev.start); + const end = allDay ? ev.end : toISO(ev.end); try { if (cal.type === 'google') { await api.post('/google/events', {