From c47137fb4988c49008037ab4c67771b3192725ad Mon Sep 17 00:00:00 2001 From: Linus Rath <139418639+rathlinus@users.noreply.github.com> Date: Thu, 9 Jul 2026 13:59:52 +0200 Subject: [PATCH] feat: enable trusted-senders address book sync by default when contacts are available --- components/settings/content-senders-settings.tsx | 2 +- stores/auth-store.ts | 7 +++++++ stores/settings-store.ts | 8 ++++++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/components/settings/content-senders-settings.tsx b/components/settings/content-senders-settings.tsx index bd72b083..86ab896a 100644 --- a/components/settings/content-senders-settings.tsx +++ b/components/settings/content-senders-settings.tsx @@ -67,7 +67,7 @@ export function ContentSendersSettings() { updateSetting('trustedSendersAddressBook', checked)} /> diff --git a/stores/auth-store.ts b/stores/auth-store.ts index d5502594..331933ba 100644 --- a/stores/auth-store.ts +++ b/stores/auth-store.ts @@ -280,6 +280,13 @@ function initializeFeatureStores(client: IJMAPClient): void { contactStore.setSupportsSync(true); contactStore.fetchAddressBooks(client).catch((err) => debug.error('Failed to fetch address books:', err)); contactStore.fetchContacts(client).catch((err) => debug.error('Failed to fetch contacts:', err)); + + // Default trusted-sender syncing on when contacts are available, unless the + // user has already made an explicit choice (`null` = not yet decided). + const settings = useSettingsStore.getState(); + if (settings.trustedSendersAddressBook === null) { + settings.updateSetting('trustedSendersAddressBook', true); + } } else { useContactStore.getState().setSupportsSync(false); } diff --git a/stores/settings-store.ts b/stores/settings-store.ts index abb4b324..1cd4ccc5 100644 --- a/stores/settings-store.ts +++ b/stores/settings-store.ts @@ -188,7 +188,11 @@ interface SettingsState { // Privacy & Security sessionTimeout: number; // minutes (0 = never) trustedSenders: string[]; // Email addresses that can load external content - trustedSendersAddressBook: boolean; // Store trusted senders in a dedicated JMAP address book + // Store trusted senders in a dedicated JMAP address book so they sync across + // devices. `null` means "not yet decided": resolved on first connect to + // `true` when the server supports contacts, otherwise left off. Once the user + // toggles it, it holds a concrete boolean and is never auto-changed again. + trustedSendersAddressBook: boolean | null; // Filters expandedFilterView: boolean; @@ -398,7 +402,7 @@ const DEFAULT_SETTINGS = { // Privacy & Security sessionTimeout: 0, // Never trustedSenders: [] as string[], - trustedSendersAddressBook: false, + trustedSendersAddressBook: null as boolean | null, // Filters expandedFilterView: false,