- Shipped
- 15 novembre 2026 alle ore 10:00 UTC
- Author
- Kamo
- Commit
- 3b85588
Impostazioni › Email › CalDAV/CardDAV salvava le connessioni esterne e mostrava "Ultimo "Non sincronizzato" per una sincronizzazione che non ha recuperato nulla (i lavori di DaemonService hanno bloccato i contatori e ha contrassegnato tutto come IDLE; le classi dei provider erano TODO) Li sincronizza in tempo reale (groupware/sync): - CalDAV/CardDAV: scoperta (indirizzo → principale → home set → collezioni, con /.fallback ben noto, un indirizzo di calendario singolo incollato funziona), CTag/sync-token check, calendar-query ETag lista (ultimi 366 giorni), multiget di ciò che è cambiato, PUT/DELETE con If-Match/If-None-Match. iCloud imposta di default i suoi indirizzi. - Google Calendar + Persone, Microsoft Calendari grafici + contatti sulla concessione /oauth memorizza il flusso; i token aggiornati (e i token di aggiornamento ruotati mantenuti) con un Scrive che sostituisce solo l'esatto blob che ha aggiornato. - Gli eventi atterrano tramite IcsImportService.upsert (serie, eccezioni, EXDATEs) e Contatti tramite ContactService + ContactDetailStore — nessun invito, nessun Promemoria, nessuna tabella grezza scrive. - La contabilità per collezione / elemento (nuove tabelle groupware_sync_*) fornisce aggiornamenti, Cancellazioni e a due vie: tirare prima (la copia esterna vince un pareggio), poi spingere Kamo Modifica/crea/cancella quando l'integrazione è bidirezionale e la raccolta Guardie: nulla rimosso su un elenco non riuscito o sospettamente vuoto, niente Kamo non importava, niente che invecchiasse solo fuori dalla finestra; un passaggio Una richiesta che cancellerebbe la maggior parte di una collezione là fuori è rifiutata. - Lo stato è onesto: SYNCING durante l'esecuzione, IDLE + lastSyncedAt solo dopo un pieno fetch, ERROR + plain-words errorMessage altrimenti; scritto colonna per colonna così Per-collezione lastError e i conteggi sono in Il payload delle impostazioni (syncSupported, calendarsSynced, eventsSynced, addressBooksSynced, contactsSynced, collezioni[]). - Schedulazione: **************** (orologio di DaemonService) e /integrations/{id} (Sincronizza ora tramite daemon.sync.trigger, fallback locale senza NATS); per l'integrazione SingletonTaskRunner lease in modo che i pods non vengano mai eseguiti due volte. - Test Connection ora accede e elenca; le righe dei membri registrano la loro organizzazione; L'eliminazione di un'integrazione stacca (mantene) ciò che è stato sincronizzato; Deve essere https a un host pubblico (nessuna portata cluster/SSRF); le credenziali non vengono mai registrate. - Rimuovendo gli stub morti del provider TODO e i loro aggiornamenti inutilizzati.
