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', {