- Diantar
- 15 November 2026 pukul 10.00 UTC
- Pengarang
- Kamo
- Kommit
- 3b85588
Pengaturan › Surel › CalDAV/CardDAV menyimpan koneksi luar dan menampilkan "Last synced" untuk sinkronisasi yang tidak mendapatkan apa-apa (tugas DaemonService menghancurkan counter dan menandai semuanya sebagai IDLE; kelas provider adalah TODO). EmailService now sinkronkan mereka secara nyata (groupware/sync): - CalDAV/CardDAV: discovery (address → principal → home set → collections, with /.well-known fallback, alamat kalender tunggal yang ditempel bekerja), CTag/sync-token check, calendar-query ETag daftar (366 hari terakhir), multiget apa yang berubah, PUT/DELETE dengan If-Match/If-None-Match. iCloud default alamatnya. - Google Calendar + Orang-orang, Microsoft Kalender grafik + kontak pada pemberian /oauth flow stores; tokens refreshed (dan rotated refresh tokens kept) with a tulis yang hanya menggantikan blob yang tepat yang ia refresh. - Peristiwa mendarat melalui IcsImportService.upsert (seri, pengecualian, EXDATEs) dan kontak melalui ContactService + ContactDetailStore — tidak ada undangan, tidak Pengingat, tidak ada tabel mentah menulis. - Pencatatan per koleksi/item (tabel groupware_sync_* baru) memberikan pembaruan, penghapusan dan dua arah: tarik pertama (salinan luar menang), lalu tekan Kamo mengedit/menciptakan/membuang ketika integrasi adalah dua arah dan koleksi Tidak ada yang dihilangkan dari daftar yang gagal atau kosong tidak ada Kamo tidak diimpor, tidak ada yang hanya tua di luar jendela; a pass yang akan menghapus sebagian besar koleksi di luar sana ditolak. - Statusnya jujur: SYNCING saat berjalan, IDLE + lastSyncedAt hanya setelah penuh fetch, ERROR + plain-words errorMessage jika tidak; ditulis kolom-demi-kolom sehingga penyuntingan anggota di tengah-jalan bertahan. Per-koleksi lastError dan hitungan berada dalam beban pengaturan (syncSupported, calendarsSynced, eventsSynced, addressBooksSynced, contactsSynced, collections[]). - Penjadwalan: **************** (jam DaemonService) dan /integrations/{id} (Sync Now via daemon.sync.trigger, fallback lokal tanpa NATS); per-integrasi SingletonTaskRunner lease sehingga pods tidak pernah double-run. - Uji Koneksi sekarang masuk dan daftar; baris anggota merekam organisasi mereka; menghapus integrasi memisahkan (menyimpan) apa yang disensorkan; alamat luar harus https ke host publik (tidak ada jangkauan cluster/SSRF); kredensial tidak pernah tercatat. - Hapus stub TODO provider yang mati dan refresher yang tidak digunakan.
