Skip to content

v2.0.1

Choose a tag to compare

@arvarik arvarik released this 17 Oct 02:10
· 2 commits to main since this release
d5a3dc2

Contrack 2.0.1 adds a CardDAV connector for two-way or pull-only contact sync with Nextcloud, iCloud, Fastmail, Radicale, and Baïkal (#108), walks admins through Google OAuth setup directly in Settings, hardens background connector sync across Google, Gmail, IMAP, ICS, and CardDAV, and refines every section of Settings.

Added

  • CardDAV connector (#235, #244): Sync contacts two-way or pull-only with Nextcloud, iCloud, Fastmail, Radicale, and Baïkal.
    • Discovers address books automatically via /.well-known/carddav, current-user-principal, and addressbook-home-set (including cross-host partition servers such as iCloud), and lets you choose which writable address book to sync when a server hosts more than one.
    • Uses incremental sync-collection (RFC 6578) reports with automatic fallback to PROPFIND ETag scans and addressbook-multiget batching.
    • Preserves server-owned vCard properties (PHOTO, NICKNAME, structured ADR, Apple ITEM1.* labels, UID, and custom X-* fields) when pushing local edits, guards updates with If-Match / If-None-Match: *, and safely unlinks server-deleted or book-switched cards without moving your Contrack contacts to Trash.

Changed

  • Guided Google OAuth setup (#237): Settings → Administration → General now walks through the five Google Cloud Console steps inline with a one-click copyable redirect URI, and the Connect Google dialog explains where an admin configures OAuth when credentials are not yet set.

Fixed

  • Connectors & background sync (#236, #244):
    • Retry connectors in error state with exponential backoff (up to 6 hours) while pausing connectors that require re-authentication (needs_reauth).
    • Merge incoming Google Contacts fields into matched existing contacts instead of overwriting them, and only overwrite avatar photos when changed.
    • Advance the Gmail historyId cursor only up to the last processed message when a run hits the per-run cap so remaining messages are picked up on the next sync.
    • Deduplicate cross-folder IMAP messages by Message-ID, stream body fetches in bounded batches, and preserve all-day recurring ICS event IDs across time zones.
  • Settings — You (#238): Normalize usernames and emails before saving, skip no-op passkey renames, reject blank or unchanged passwords, refresh device sessions after a password change, and standardize error toasts across Account, Passkeys, Appearance, Network, Keyboard, and Privacy.
  • Settings — Tools (#239): Reject empty or oversized import files upfront, clear stale errors when switching import tabs, lock duplicate merge/dismiss actions while a mutation is in flight, and avoid flashing an empty state when clearing an enrichment search.
  • Settings — Your data (#240): Add search filters to Archived contacts and Trash, offer Undo when restoring an archived contact, allow case-only tag merges, prune hidden selections when filtering, and keep cached rows on screen when a background refetch fails.
  • Settings — Connect (#241): Accept webcal:// calendar URLs, strip imaps:///imap:// prefixes and ports pasted into IMAP host fields, preserve leading/trailing spaces in CardDAV and IMAP passwords, and add a search filter and optional contact name prompt to Correspondents.
  • Settings — Administration (#242): Keep cached AI settings and Audit log entries on screen when a background refetch fails, reject non-decimal SMTP port strings, clamp numeric retention inputs on blur, and validate invitation email addresses as you type.

Full Changelog: v2.0.0...v2.0.1