- Shipped
- 15 noiembrie 2026 la 10:00 UTC
- Author
- Kamo
- Commit
- 3b85588
Setări › E-mail › CalDAV/CardDAV a salvat conexiunile externe și a afișat "Ultima synced" pentru o sincronizare care nu a preluat nimic (lucrările DaemonService au lovit contoarele și a marcat totul ca IDLE; clasele furnizorilor erau TODO-uri) Le sincronizează pentru real (groupware / sync): - CalDAV / CardDAV: descoperire (adresa → principal → acasă set → colecții, cu /.fallback bine cunoscut, o adresă de calendar unic lipită funcționează), CTag/sync-token check, calendar-query ETag listare (ultimele 366 de zile), multiget de ceea ce sa schimbat, PUT/DELETE cu If-Match/If-None-Match. iCloud își setează adresele implicite. - Google Calendar + Oameni, Microsoft Calendare grafice + contacte pe care le acordați /oauth stochează fluxul; token-urile reîmprospătate (și token-urile de reîmprospătare rotate păstrate) cu un Scrieți că înlocuiește doar blobul exact pe care l-a actualizat. - Teren de evenimente prin IcsImportService.upsert (serii, excepții, EXDATEs) și Contacte prin ContactService + ContactDetailStore — fără invitații, fără Memento-uri, nici un tabel brut scrie. - Contabilitate pe colecție / element (tabele noi groupware_sync_*) oferă actualizări, Ștergeri și în ambele sensuri: trageți mai întâi (copia exterioară câștigă un egal), apoi împingeți Kamo Editează/creează/șterge atunci când integrarea este bidirecțională și colecția Gardieni: nimic eliminat dintr-o listă eșuată sau suspect de goală, nimic Kamo nu a importat, nimic care a îmbătrânit doar din fereastră; o trecere care ar șterge cea mai mare parte a unei colecții acolo este refuzată. - Starea este onest: SINCRONIZAREA în timp ce rulează, IDLE + lastSyncedAt numai după o perioadă completă fetch, ERROR + plain-words errorMessage altfel; scris coloană-cu-coloană astfel Per-colecție lastError și numărătoarea erorilor sunt în ordinea în care au apărut Setările utile (syncSupported, calendarsSynced, eventsSynced, Adresa de e-mail (addressBooksSynced, contactsSynced, collections[]). - Programare: **************** (ceasul DaemonService) și /integrations/{id} (Sincronizează acum prin daemon.sync.trigger, local fallback fără NATS); per-integrare SingletonTaskRunner lease astfel încât podurile nu se dublează niciodată. - Conexiunea de testare se conectează acum și se listează; rândurile de membri înregistrează organizația lor; Ștergerea unei integrări detașează (păstrează) ceea ce a fost sincronizat; Trebuie să fie https la o gazdă publică (fără cluster/SSRF); acreditările nu sunt înregistrate niciodată. - S-au eliminat stuburile furnizorilor de TODO morți și reîmprospătările lor neutilizate.
