fix: enhance calendar event handling with IMIP invitation and cancellation support

This commit is contained in:
Linus Rath
2026-03-18 19:59:47 +01:00
parent bcdde9f454
commit b844b88733
2 changed files with 314 additions and 3 deletions
+27
View File
@@ -126,6 +126,13 @@ export const useCalendarStore = create<CalendarStore>()(
try {
const created = await client.createCalendarEvent(event, sendSchedulingMessages);
set((state) => ({ events: [...state.events, created] }));
if (sendSchedulingMessages && created.participants) {
try {
await client.sendImipInvitation(created);
} catch (e) {
debug.error('Failed to send invitation emails:', e);
}
}
return created;
} catch (error) {
debug.error('Failed to create event:', error);
@@ -141,6 +148,16 @@ export const useCalendarStore = create<CalendarStore>()(
set((state) => ({
events: state.events.map(e => e.id === id ? { ...e, ...updates } : e),
}));
if (sendSchedulingMessages) {
try {
const updatedEvent = await client.getCalendarEvent(id);
if (updatedEvent?.participants) {
await client.sendImipInvitation(updatedEvent);
}
} catch (e) {
debug.error('Failed to send update notification emails:', e);
}
}
} catch (error) {
debug.error('Failed to update event:', error);
set({ error: 'Failed to update event' });
@@ -296,6 +313,16 @@ export const useCalendarStore = create<CalendarStore>()(
deleteEvent: async (client, id, sendSchedulingMessages) => {
set({ error: null });
try {
if (sendSchedulingMessages) {
try {
const event = await client.getCalendarEvent(id);
if (event?.participants) {
await client.sendImipCancellation(event);
}
} catch (e) {
debug.error('Failed to send cancellation emails:', e);
}
}
await client.deleteCalendarEvent(id, sendSchedulingMessages);
set((state) => ({
events: state.events.filter(e => e.id !== id),