feat: Kalender-Ansicht aktualisiert sich live via SSE
Backend: Neuer Event-Typ 'calendar' im Broadcaster. Wird bei Event-CRUD, Serien-Ausnahmen, Freigaben hinzufuegen/entfernen und beim Loeschen ganzer Kalender emittiert. Empfaenger: Eigentuemer + alle User mit CalendarShare auf dem jeweiligen Kalender. Frontend: CalendarView oeffnet beim Mount eine EventSource zu /api/sync/events und reloaded Kalenderliste + Events bei jedem 'calendar'-Event (300ms debounced). Damit sehen beteiligte Nutzer Aenderungen in praktisch Echtzeit - kein F5 mehr noetig. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -79,3 +79,16 @@ def notify_file_change(owner_id: int, file_id: int | None, change: str,
|
||||
'change': change, # 'created' | 'updated' | 'deleted' | 'locked' | 'unlocked'
|
||||
'file_id': file_id,
|
||||
})
|
||||
|
||||
|
||||
def notify_calendar_change(owner_id: int, calendar_id: int, change: str,
|
||||
shared_with: Iterable[int] = ()) -> None:
|
||||
"""Emit a calendar-level change event (event added/changed/deleted or
|
||||
share membership changed). Sent to owner + all users the calendar is
|
||||
shared with."""
|
||||
recipients = [owner_id, *shared_with]
|
||||
broadcaster.publish(recipients, {
|
||||
'type': 'calendar',
|
||||
'change': change, # 'event'|'share'|'deleted'
|
||||
'calendar_id': calendar_id,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user