feat: add default mail program settings with localization support

This commit is contained in:
Linus Rath
2026-03-23 23:07:19 +01:00
parent 8eff9fdfab
commit ddb3422852
9 changed files with 91 additions and 2 deletions
+35 -2
View File
@@ -1,7 +1,8 @@
"use client";
import { useState } from 'react';
import { useState, useCallback } from 'react';
import { useTranslations } from 'next-intl';
import { useConfig } from '@/hooks/use-config';
import { useSettingsStore } from '@/stores/settings-store';
import type { ArchiveMode, HoverAction } from '@/stores/settings-store';
import { ALL_HOVER_ACTIONS } from '@/stores/settings-store';
@@ -10,13 +11,26 @@ import { useEmailStore } from '@/stores/email-store';
import { cn } from '@/lib/utils';
import { SettingsSection, SettingItem, Select, ToggleSwitch } from './settings-section';
import { TrustedSendersModal } from '@/components/trusted-senders-modal';
import { ChevronRight, AlertTriangle, FolderSync, Loader2 } from 'lucide-react';
import { ChevronRight, AlertTriangle, FolderSync, Loader2, Mail } from 'lucide-react';
export function EmailSettings() {
const t = useTranslations('settings.email_behavior');
const { appName } = useConfig();
const [showTrustedModal, setShowTrustedModal] = useState(false);
const [isReorganizing, setIsReorganizing] = useState(false);
const [reorganizeResult, setReorganizeResult] = useState<string | null>(null);
const [defaultMailStatus, setDefaultMailStatus] = useState<'idle' | 'success' | 'error'>('idle');
const handleSetDefaultMailProgram = useCallback(() => {
try {
if (typeof navigator !== 'undefined' && navigator.registerProtocolHandler) {
navigator.registerProtocolHandler('mailto', `${window.location.origin}/compose?mailto=%s`);
setDefaultMailStatus('success');
}
} catch {
setDefaultMailStatus('error');
}
}, []);
const {
markAsReadDelay,
@@ -279,6 +293,25 @@ export function EmailSettings() {
/>
</SettingItem>
{/* Default Mail Program */}
<SettingItem label={t('default_mail_program.label')} description={t('default_mail_program.description', { appName: appName || 'Bulwark' })}>
<div className="flex flex-col items-end gap-1">
<button
onClick={handleSetDefaultMailProgram}
className="flex items-center gap-2 px-3 py-1.5 bg-muted hover:bg-accent rounded-md transition-colors"
>
<Mail className="w-4 h-4" />
<span className="text-sm text-foreground">{t('default_mail_program.button')}</span>
</button>
{defaultMailStatus === 'success' && (
<p className="text-xs text-green-600 dark:text-green-400">{t('default_mail_program.success')}</p>
)}
{defaultMailStatus === 'error' && (
<p className="text-xs text-destructive">{t('default_mail_program.error')}</p>
)}
</div>
</SettingItem>
{/* Trusted Senders */}
<SettingItem label={t('trusted_senders.label')} description={t('trusted_senders.description')}>
<button
+7
View File
@@ -855,6 +855,13 @@
"tag": "Schlagwort",
"spam": "Als Spam markieren",
"none_selected": "Keine Aktionen ausgewählt"
},
"default_mail_program": {
"label": "Standard-E-Mail-Programm",
"description": "Registrieren Sie {appName} als Ihr Standard-E-Mail-Programm für mailto:-Links",
"button": "Als Standard festlegen",
"success": "Browser wurde aufgefordert, als Standard festzulegen",
"error": "Ihr Browser unterstützt diese Funktion nicht"
}
},
"composer": {
+7
View File
@@ -855,6 +855,13 @@
"tag": "Tag",
"spam": "Mark as Spam",
"none_selected": "No actions selected"
},
"default_mail_program": {
"label": "Default Mail Program",
"description": "Register {appName} as your default mail program for mailto: links",
"button": "Set as Default",
"success": "Browser prompted to set as default",
"error": "Your browser does not support this feature"
}
},
"composer": {
+7
View File
@@ -855,6 +855,13 @@
"tag": "Etiqueta",
"spam": "Marcar como spam",
"none_selected": "No hay acciones seleccionadas"
},
"default_mail_program": {
"label": "Programa de correo predeterminado",
"description": "Registrar {appName} como su programa de correo predeterminado para enlaces mailto:",
"button": "Establecer como predeterminado",
"success": "El navegador solicitó establecer como predeterminado",
"error": "Su navegador no admite esta función"
}
},
"composer": {
+7
View File
@@ -855,6 +855,13 @@
"tag": "Étiquette",
"spam": "Marquer comme spam",
"none_selected": "Aucune action sélectionnée"
},
"default_mail_program": {
"label": "Programme de messagerie par défaut",
"description": "Enregistrer {appName} comme programme de messagerie par défaut pour les liens mailto:",
"button": "Définir par défaut",
"success": "Le navigateur a été invité à définir par défaut",
"error": "Votre navigateur ne prend pas en charge cette fonctionnalité"
}
},
"composer": {
+7
View File
@@ -855,6 +855,13 @@
"tag": "Etichetta",
"spam": "Segna come spam",
"none_selected": "Nessuna azione selezionata"
},
"default_mail_program": {
"label": "Programma di posta predefinito",
"description": "Registra {appName} come programma di posta predefinito per i link mailto:",
"button": "Imposta come predefinito",
"success": "Il browser ha chiesto di impostare come predefinito",
"error": "Il tuo browser non supporta questa funzionalità"
}
},
"composer": {
+7
View File
@@ -855,6 +855,13 @@
"tag": "タグ",
"spam": "スパムとしてマーク",
"none_selected": "アクションが選択されていません"
},
"default_mail_program": {
"label": "既定のメールプログラム",
"description": "{appName}をmailto:リンクの既定のメールプログラムとして登録します",
"button": "既定に設定",
"success": "ブラウザに既定として設定するよう要求しました",
"error": "お使いのブラウザはこの機能をサポートしていません"
}
},
"composer": {
+7
View File
@@ -855,6 +855,13 @@
"tag": "Label",
"spam": "Markeer als spam",
"none_selected": "Geen acties geselecteerd"
},
"default_mail_program": {
"label": "Standaard e-mailprogramma",
"description": "Registreer {appName} als uw standaard e-mailprogramma voor mailto:-links",
"button": "Instellen als standaard",
"success": "Browser gevraagd om als standaard in te stellen",
"error": "Uw browser ondersteunt deze functie niet"
}
},
"composer": {
+7
View File
@@ -855,6 +855,13 @@
"tag": "Etiqueta",
"spam": "Marcar como spam",
"none_selected": "Nenhuma ação selecionada"
},
"default_mail_program": {
"label": "Programa de e-mail padrão",
"description": "Registrar {appName} como seu programa de e-mail padrão para links mailto:",
"button": "Definir como padrão",
"success": "O navegador solicitou definir como padrão",
"error": "Seu navegador não suporta esta funcionalidade"
}
},
"composer": {