- Verschickt
- 15. November 2026 um 10:00 UTC
- Autor
- Kamo
- Commit
- 3b85588
Einstellungen › E-Mail › CalDAV/CardDAV speicherte außerhalb der Verbindungen und zeigte "Letzte Synced" für eine Synchronisierung, die nichts abgerufen hat (DaemonService's Jobs bumped counters Die Provider-Klassen waren TODOs). EmailService jetzt Synchronisiert sie wirklich (Groupware/Sync): - CalDAV/CardDAV: Entdeckung (Adresse → Haupt → Home-Set → Sammlungen, mit /.allgemein bekanntes Fallback, eine eingefügte Einzelkalender-Adresse funktioniert), CTag/sync-token check, calendar-query ETag Auflistung (letzte 366 Tage), multiget von was geändert wurde, PUT/DELETE mit If-Match/If-None-Match. iCloud setzt seine Adressen standardmäßig ein. - Google Calendar + Personen, Microsoft Graph Kalender + Kontakte auf der Gewährung der /oauth-Fluss speichert; Token werden aktualisiert (und rotierte Aktualisierungs-Token bleiben erhalten) mit einem Schreiben, das nur den exakten Blob ersetzt, den es aktualisiert hat. - Events landen über IcsImportService.upsert (Serien, Ausnahmen, EXDATEs) und Kontakte über ContactService + ContactDetailStore — keine Einladungen, keine Erinnerungen, keine Rohtabelle schreibt. - Buchhaltung pro Sammlung/Item (neue groupware_sync_* Tabellen) gibt Updates, Löschungen und Zwei-Wege: zuerst ziehen (außerhalb der Kopie gewinnt ein Gleichstand), dann drücken Kamo Bearbeiten/Erstellen/Löschen, wenn die Integration bidirektional ist und die Sammlung Guards: bei einem fehlgeschlagenen oder verdächtig leeren Listing wird nichts entfernt, Nichts Kamo importierte nicht, nichts, das nur aus dem Fenster gealtert ist; ein Pass Ein Antrag, der den größten Teil einer Sammlung löschen würde, wird abgelehnt. - Status ist ehrlich: SYNCING während des Laufens, IDLE + lastSyncedAt erst nach einem vollen fetch, ERROR + plain-words errorMessage andernfalls; Spalte für Spalte geschrieben so Pro-Collection lastError und Counts sind in der Liste der Dateien aufgeführt Nutzdaten der Einstellungen (syncSupported, calendarsSynced, eventsSynced, addressBooksSynced, contactsSynced, collections[]). - Scheduling: **************** (DaemonService's Uhr) und /integrations/{id} (Jetzt synchronisieren über daemon.sync.trigger, lokales Fallback ohne NATS); pro-Integration SingletonTaskRunner Lease, so dass Pods niemals doppelt ausgeführt werden. - Test Connection meldet sich jetzt an und listet; Mitgliederzeilen zeichnen ihre Organisation auf; Löschen einer Integration löst (behält) das, was synchronisiert wurde; außerhalb der Adressen muss https zu einem öffentlichen Host sein (keine Cluster-/SSRF-Reichweite); Anmeldeinformationen werden nie protokolliert. - Entfernt die toten TODO-Anbieter-Stubs und ihre ungenutzten Refresher.
