feat: add setting to show avatars in junk folder, disabled by default
This commit is contained in:
@@ -37,6 +37,7 @@ export function EmailListItem({ email, selected, onClick, onContextMenu, onToggl
|
|||||||
const density = useSettingsStore((state) => state.density);
|
const density = useSettingsStore((state) => state.density);
|
||||||
const mailLayout = useSettingsStore((state) => state.mailLayout);
|
const mailLayout = useSettingsStore((state) => state.mailLayout);
|
||||||
const emailKeywords = useSettingsStore((state) => state.emailKeywords);
|
const emailKeywords = useSettingsStore((state) => state.emailKeywords);
|
||||||
|
const showAvatarsInJunk = useSettingsStore((state) => state.showAvatarsInJunk);
|
||||||
const { identities } = useAuthStore();
|
const { identities } = useAuthStore();
|
||||||
const isChecked = selectedEmailIds.has(email.id);
|
const isChecked = selectedEmailIds.has(email.id);
|
||||||
const isUnread = !email.keywords?.$seen;
|
const isUnread = !email.keywords?.$seen;
|
||||||
@@ -49,6 +50,7 @@ export function EmailListItem({ email, selected, onClick, onContextMenu, onToggl
|
|||||||
const showRecipient = currentMailboxRole === 'sent' || currentMailboxRole === 'drafts';
|
const showRecipient = currentMailboxRole === 'sent' || currentMailboxRole === 'drafts';
|
||||||
const sender = showRecipient ? (email.to?.[0] ?? email.from?.[0]) : email.from?.[0];
|
const sender = showRecipient ? (email.to?.[0] ?? email.from?.[0]) : email.from?.[0];
|
||||||
const isFocusedMailLayout = mailLayout === 'focus';
|
const isFocusedMailLayout = mailLayout === 'focus';
|
||||||
|
const hideJunkAvatarImages = currentMailboxRole === 'junk' && !showAvatarsInJunk;
|
||||||
const inlinePreview = showPreview && email.preview ? ` ${email.preview}` : '';
|
const inlinePreview = showPreview && email.preview ? ` ${email.preview}` : '';
|
||||||
|
|
||||||
// Resolve color tags using keyword definitions from settings; unknown tags fall back to gray
|
// Resolve color tags using keyword definitions from settings; unknown tags fall back to gray
|
||||||
@@ -164,6 +166,7 @@ export function EmailListItem({ email, selected, onClick, onContextMenu, onToggl
|
|||||||
email={sender?.email}
|
email={sender?.email}
|
||||||
size="md"
|
size="md"
|
||||||
className="flex-shrink-0 shadow-sm"
|
className="flex-shrink-0 shadow-sm"
|
||||||
|
disableImages={hideJunkAvatarImages}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|||||||
@@ -64,6 +64,8 @@ const SingleEmailItem = React.forwardRef<HTMLDivElement, SingleEmailItemProps>(
|
|||||||
const emailKeywords = useSettingsStore((state) => state.emailKeywords);
|
const emailKeywords = useSettingsStore((state) => state.emailKeywords);
|
||||||
const density = useSettingsStore((state) => state.density);
|
const density = useSettingsStore((state) => state.density);
|
||||||
const mailLayout = useSettingsStore((state) => state.mailLayout);
|
const mailLayout = useSettingsStore((state) => state.mailLayout);
|
||||||
|
const showAvatarsInJunk = useSettingsStore((state) => state.showAvatarsInJunk);
|
||||||
|
const hideJunkAvatarImages = currentMailboxRole === 'junk' && !showAvatarsInJunk;
|
||||||
const isUnifiedView = useEmailStore((state) => state.isUnifiedView);
|
const isUnifiedView = useEmailStore((state) => state.isUnifiedView);
|
||||||
const getAccountById = useAccountStore((state) => state.getAccountById);
|
const getAccountById = useAccountStore((state) => state.getAccountById);
|
||||||
const accountColor = email.accountId ? getAccountById(email.accountId)?.avatarColor : undefined;
|
const accountColor = email.accountId ? getAccountById(email.accountId)?.avatarColor : undefined;
|
||||||
@@ -182,6 +184,7 @@ const SingleEmailItem = React.forwardRef<HTMLDivElement, SingleEmailItemProps>(
|
|||||||
email={sender?.email}
|
email={sender?.email}
|
||||||
size="md"
|
size="md"
|
||||||
className="flex-shrink-0 shadow-sm"
|
className="flex-shrink-0 shadow-sm"
|
||||||
|
disableImages={hideJunkAvatarImages}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
@@ -359,6 +362,7 @@ export const ThreadListItem = React.forwardRef<HTMLDivElement, ThreadListItemPro
|
|||||||
const showPreview = useSettingsStore((state) => state.showPreview);
|
const showPreview = useSettingsStore((state) => state.showPreview);
|
||||||
const density = useSettingsStore((state) => state.density);
|
const density = useSettingsStore((state) => state.density);
|
||||||
const mailLayout = useSettingsStore((state) => state.mailLayout);
|
const mailLayout = useSettingsStore((state) => state.mailLayout);
|
||||||
|
const showAvatarsInJunk = useSettingsStore((state) => state.showAvatarsInJunk);
|
||||||
const isMobile = useUIStore((state) => state.isMobile);
|
const isMobile = useUIStore((state) => state.isMobile);
|
||||||
const { latestEmail, participantNames, hasUnread, hasStarred, hasAttachment, hasAnswered, hasForwarded, emailCount } = thread;
|
const { latestEmail, participantNames, hasUnread, hasStarred, hasAttachment, hasAnswered, hasForwarded, emailCount } = thread;
|
||||||
const isFocusedMailLayout = mailLayout === 'focus';
|
const isFocusedMailLayout = mailLayout === 'focus';
|
||||||
@@ -376,6 +380,7 @@ export const ThreadListItem = React.forwardRef<HTMLDivElement, ThreadListItemPro
|
|||||||
)).slice(0, 4)
|
)).slice(0, 4)
|
||||||
: participantNames;
|
: participantNames;
|
||||||
const avatarPerson = showRecipient ? latestEmail.to?.[0] : latestEmail.from?.[0];
|
const avatarPerson = showRecipient ? latestEmail.to?.[0] : latestEmail.from?.[0];
|
||||||
|
const hideJunkAvatarImages = currentMailboxRole === 'junk' && !showAvatarsInJunk;
|
||||||
|
|
||||||
const { dragHandlers, isDragging: isThreadDragging } = useEmailDrag({
|
const { dragHandlers, isDragging: isThreadDragging } = useEmailDrag({
|
||||||
email: latestEmail,
|
email: latestEmail,
|
||||||
@@ -563,6 +568,7 @@ export const ThreadListItem = React.forwardRef<HTMLDivElement, ThreadListItemPro
|
|||||||
email={avatarPerson?.email}
|
email={avatarPerson?.email}
|
||||||
size="md"
|
size="md"
|
||||||
className="flex-shrink-0 shadow-sm"
|
className="flex-shrink-0 shadow-sm"
|
||||||
|
disableImages={hideJunkAvatarImages}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ export function AppearanceSettings() {
|
|||||||
const tAdvanced = useTranslations('settings.advanced');
|
const tAdvanced = useTranslations('settings.advanced');
|
||||||
const tTour = useTranslations('tour');
|
const tTour = useTranslations('tour');
|
||||||
const { theme, setTheme } = useThemeStore();
|
const { theme, setTheme } = useThemeStore();
|
||||||
const { fontSize, density, animationsEnabled, senderFavicons, updateSetting } = useSettingsStore();
|
const { fontSize, density, animationsEnabled, senderFavicons, showAvatarsInJunk, updateSetting } = useSettingsStore();
|
||||||
const { startTour, resetTourCompletion } = useTour();
|
const { startTour, resetTourCompletion } = useTour();
|
||||||
const { isSettingLocked, isSettingHidden } = usePolicyStore();
|
const { isSettingLocked, isSettingHidden } = usePolicyStore();
|
||||||
|
|
||||||
@@ -130,6 +130,10 @@ export function AppearanceSettings() {
|
|||||||
<ToggleSwitch checked={senderFavicons} onChange={(checked) => updateSetting('senderFavicons', checked)} />
|
<ToggleSwitch checked={senderFavicons} onChange={(checked) => updateSetting('senderFavicons', checked)} />
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
|
|
||||||
|
<SettingItem label={tAdvanced('show_avatars_in_junk.label')} description={tAdvanced('show_avatars_in_junk.description')}>
|
||||||
|
<ToggleSwitch checked={showAvatarsInJunk} onChange={(checked) => updateSetting('showAvatarsInJunk', checked)} />
|
||||||
|
</SettingItem>
|
||||||
|
|
||||||
<SettingItem label={tTour('restart_title')} description={tTour('restart_desc')}>
|
<SettingItem label={tTour('restart_title')} description={tTour('restart_desc')}>
|
||||||
<Button
|
<Button
|
||||||
variant="outline"
|
variant="outline"
|
||||||
|
|||||||
@@ -140,9 +140,11 @@ interface AvatarProps {
|
|||||||
contactPhotoUri?: string;
|
contactPhotoUri?: string;
|
||||||
size?: "sm" | "md" | "lg";
|
size?: "sm" | "md" | "lg";
|
||||||
className?: string;
|
className?: string;
|
||||||
|
/** When true, suppress all image sources (favicons, plugin avatars, profile pics, contact photos) and render initials only. */
|
||||||
|
disableImages?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function Avatar({ name, email, contactPhotoUri, size = "md", className }: AvatarProps) {
|
export function Avatar({ name, email, contactPhotoUri, size = "md", className, disableImages = false }: AvatarProps) {
|
||||||
const [imgError, setImgError] = useState(false);
|
const [imgError, setImgError] = useState(false);
|
||||||
const [pluginAvatarUrl, setPluginAvatarUrl] = useState<string | null>(null);
|
const [pluginAvatarUrl, setPluginAvatarUrl] = useState<string | null>(null);
|
||||||
const [pluginAvatarFailed, setPluginAvatarFailed] = useState(false);
|
const [pluginAvatarFailed, setPluginAvatarFailed] = useState(false);
|
||||||
@@ -222,9 +224,11 @@ export function Avatar({ name, email, contactPhotoUri, size = "md", className }:
|
|||||||
// Priority: contact photo > plugin avatar (e.g. Gravatar) > custom avatar > profile picture > company favicon > initials
|
// Priority: contact photo > plugin avatar (e.g. Gravatar) > custom avatar > profile picture > company favicon > initials
|
||||||
const customAvatar = devMode && email ? CUSTOM_AVATARS[email.toLowerCase()] : null;
|
const customAvatar = devMode && email ? CUSTOM_AVATARS[email.toLowerCase()] : null;
|
||||||
const pluginAvatar = pluginAvatarFailed ? null : pluginAvatarUrl;
|
const pluginAvatar = pluginAvatarFailed ? null : pluginAvatarUrl;
|
||||||
const imgSrc = !imgError && !domainFailed
|
const imgSrc = disableImages
|
||||||
? resolvedContactPhoto || pluginAvatar || customAvatar || profilePic || (showFavicon ? `/api/favicon?domain=${encodeURIComponent(faviconDomain!)}` : null)
|
? null
|
||||||
: (resolvedContactPhoto || pluginAvatar || customAvatar || profilePic || null);
|
: !imgError && !domainFailed
|
||||||
|
? resolvedContactPhoto || pluginAvatar || customAvatar || profilePic || (showFavicon ? `/api/favicon?domain=${encodeURIComponent(faviconDomain!)}` : null)
|
||||||
|
: (resolvedContactPhoto || pluginAvatar || customAvatar || profilePic || null);
|
||||||
|
|
||||||
const handleImgError = useCallback(() => {
|
const handleImgError = useCallback(() => {
|
||||||
// If the plugin avatar just failed, mark it and fall through to the next source
|
// If the plugin avatar just failed, mark it and fall through to the next source
|
||||||
|
|||||||
@@ -1285,6 +1285,10 @@
|
|||||||
"label": "Absender-Favicons (Experimentell)",
|
"label": "Absender-Favicons (Experimentell)",
|
||||||
"description": "Website-Symbole als Profilbilder für geschäftliche Absender anzeigen"
|
"description": "Website-Symbole als Profilbilder für geschäftliche Absender anzeigen"
|
||||||
},
|
},
|
||||||
|
"show_avatars_in_junk": {
|
||||||
|
"label": "Avatare im Spam-Ordner anzeigen",
|
||||||
|
"description": "Profilbilder und Favicons für Absender im Spam-Ordner anzeigen. Standardmäßig deaktiviert, damit Phishing-Versuche nicht durch vertraute Logos legitim wirken."
|
||||||
|
},
|
||||||
"keyboard_shortcuts": {
|
"keyboard_shortcuts": {
|
||||||
"label": "Tastaturkürzel",
|
"label": "Tastaturkürzel",
|
||||||
"description": "Verfügbare Tastaturkürzel anzeigen",
|
"description": "Verfügbare Tastaturkürzel anzeigen",
|
||||||
|
|||||||
@@ -1287,6 +1287,10 @@
|
|||||||
"label": "Sender Favicons (Experimental)",
|
"label": "Sender Favicons (Experimental)",
|
||||||
"description": "Show website icons as profile pictures for business senders"
|
"description": "Show website icons as profile pictures for business senders"
|
||||||
},
|
},
|
||||||
|
"show_avatars_in_junk": {
|
||||||
|
"label": "Show Avatars in Junk Folder",
|
||||||
|
"description": "Show profile images and favicons for senders in the junk folder. Disabled by default to avoid lending visual legitimacy to phishing attempts."
|
||||||
|
},
|
||||||
"keyboard_shortcuts": {
|
"keyboard_shortcuts": {
|
||||||
"label": "Keyboard Shortcuts",
|
"label": "Keyboard Shortcuts",
|
||||||
"description": "View available keyboard shortcuts",
|
"description": "View available keyboard shortcuts",
|
||||||
|
|||||||
@@ -1285,6 +1285,10 @@
|
|||||||
"label": "Favicons de remitente (Experimental)",
|
"label": "Favicons de remitente (Experimental)",
|
||||||
"description": "Mostrar iconos de sitios web como fotos de perfil para remitentes empresariales"
|
"description": "Mostrar iconos de sitios web como fotos de perfil para remitentes empresariales"
|
||||||
},
|
},
|
||||||
|
"show_avatars_in_junk": {
|
||||||
|
"label": "Mostrar avatares en la carpeta de spam",
|
||||||
|
"description": "Mostrar imágenes de perfil y favicons de remitentes en la carpeta de spam. Desactivado por defecto para no dar apariencia legítima a los intentos de phishing."
|
||||||
|
},
|
||||||
"keyboard_shortcuts": {
|
"keyboard_shortcuts": {
|
||||||
"label": "Atajos de Teclado",
|
"label": "Atajos de Teclado",
|
||||||
"description": "Ver atajos de teclado disponibles",
|
"description": "Ver atajos de teclado disponibles",
|
||||||
|
|||||||
@@ -1285,6 +1285,10 @@
|
|||||||
"label": "Favicons des expéditeurs (Expérimental)",
|
"label": "Favicons des expéditeurs (Expérimental)",
|
||||||
"description": "Afficher les icônes de sites web comme photos de profil pour les expéditeurs professionnels"
|
"description": "Afficher les icônes de sites web comme photos de profil pour les expéditeurs professionnels"
|
||||||
},
|
},
|
||||||
|
"show_avatars_in_junk": {
|
||||||
|
"label": "Afficher les avatars dans le dossier indésirable",
|
||||||
|
"description": "Afficher les photos de profil et favicons des expéditeurs dans le dossier indésirable. Désactivé par défaut pour éviter de donner une apparence légitime aux tentatives d'hameçonnage."
|
||||||
|
},
|
||||||
"keyboard_shortcuts": {
|
"keyboard_shortcuts": {
|
||||||
"label": "Raccourcis clavier",
|
"label": "Raccourcis clavier",
|
||||||
"description": "Voir les raccourcis clavier disponibles",
|
"description": "Voir les raccourcis clavier disponibles",
|
||||||
|
|||||||
@@ -1285,6 +1285,10 @@
|
|||||||
"label": "Favicon dei mittenti (Sperimentale)",
|
"label": "Favicon dei mittenti (Sperimentale)",
|
||||||
"description": "Mostra le icone dei siti web come immagini profilo per i mittenti aziendali"
|
"description": "Mostra le icone dei siti web come immagini profilo per i mittenti aziendali"
|
||||||
},
|
},
|
||||||
|
"show_avatars_in_junk": {
|
||||||
|
"label": "Mostra avatar nella cartella spam",
|
||||||
|
"description": "Mostra immagini profilo e favicon dei mittenti nella cartella spam. Disattivato per impostazione predefinita per non dare apparenza legittima ai tentativi di phishing."
|
||||||
|
},
|
||||||
"keyboard_shortcuts": {
|
"keyboard_shortcuts": {
|
||||||
"label": "Scorciatoie da tastiera",
|
"label": "Scorciatoie da tastiera",
|
||||||
"description": "Visualizza le scorciatoie da tastiera disponibili",
|
"description": "Visualizza le scorciatoie da tastiera disponibili",
|
||||||
|
|||||||
@@ -1285,6 +1285,10 @@
|
|||||||
"label": "送信者ファビコン(実験的)",
|
"label": "送信者ファビコン(実験的)",
|
||||||
"description": "ビジネス送信者のプロフィール画像としてウェブサイトアイコンを表示"
|
"description": "ビジネス送信者のプロフィール画像としてウェブサイトアイコンを表示"
|
||||||
},
|
},
|
||||||
|
"show_avatars_in_junk": {
|
||||||
|
"label": "迷惑メールフォルダでアバターを表示",
|
||||||
|
"description": "迷惑メールフォルダの送信者にプロフィール画像とファビコンを表示します。フィッシング詐欺に正規のような見た目を与えないため、既定では無効です。"
|
||||||
|
},
|
||||||
"keyboard_shortcuts": {
|
"keyboard_shortcuts": {
|
||||||
"label": "キーボードショートカット",
|
"label": "キーボードショートカット",
|
||||||
"description": "利用可能なキーボードショートカットを表示",
|
"description": "利用可能なキーボードショートカットを表示",
|
||||||
|
|||||||
@@ -1285,6 +1285,10 @@
|
|||||||
"label": "보낸 사람 파비콘 (실험적 기능)",
|
"label": "보낸 사람 파비콘 (실험적 기능)",
|
||||||
"description": "비즈니스 메일의 경우 해당 웹사이트의 아이콘을 프로필 사진으로 보여줘요"
|
"description": "비즈니스 메일의 경우 해당 웹사이트의 아이콘을 프로필 사진으로 보여줘요"
|
||||||
},
|
},
|
||||||
|
"show_avatars_in_junk": {
|
||||||
|
"label": "스팸함에서 아바타 표시",
|
||||||
|
"description": "스팸함의 보낸 사람에 대한 프로필 이미지와 파비콘을 표시해요. 피싱 메일이 정상적인 메일처럼 보이지 않도록 기본적으로 꺼져 있어요."
|
||||||
|
},
|
||||||
"keyboard_shortcuts": {
|
"keyboard_shortcuts": {
|
||||||
"label": "단축키",
|
"label": "단축키",
|
||||||
"description": "사용 가능한 키보드 단축키를 확인해 보세요",
|
"description": "사용 가능한 키보드 단축키를 확인해 보세요",
|
||||||
|
|||||||
@@ -1266,6 +1266,10 @@
|
|||||||
"label": "Sūtītāju ikonas (Eksperimentāli)",
|
"label": "Sūtītāju ikonas (Eksperimentāli)",
|
||||||
"description": "Rādīt vietņu ikonas kā sūtītāju avatarus"
|
"description": "Rādīt vietņu ikonas kā sūtītāju avatarus"
|
||||||
},
|
},
|
||||||
|
"show_avatars_in_junk": {
|
||||||
|
"label": "Rādīt avatarus mēstuļu mapē",
|
||||||
|
"description": "Rādīt sūtītāju profila attēlus un ikonas mēstuļu mapē. Pēc noklusējuma izslēgts, lai pikšķerēšanas mēģinājumi neizskatītos uzticami."
|
||||||
|
},
|
||||||
"keyboard_shortcuts": {
|
"keyboard_shortcuts": {
|
||||||
"label": "Īsinājumtaustiņi",
|
"label": "Īsinājumtaustiņi",
|
||||||
"description": "Skatīt pieejamos tastatūras īsinājumtaustiņus",
|
"description": "Skatīt pieejamos tastatūras īsinājumtaustiņus",
|
||||||
|
|||||||
@@ -1285,6 +1285,10 @@
|
|||||||
"label": "Afzender-favicons (Experimenteel)",
|
"label": "Afzender-favicons (Experimenteel)",
|
||||||
"description": "Toon websitepictogrammen als profielfoto's voor zakelijke afzenders"
|
"description": "Toon websitepictogrammen als profielfoto's voor zakelijke afzenders"
|
||||||
},
|
},
|
||||||
|
"show_avatars_in_junk": {
|
||||||
|
"label": "Avatars tonen in de map ongewenst",
|
||||||
|
"description": "Toon profielfoto's en favicons van afzenders in de map ongewenst. Standaard uitgeschakeld zodat phishingpogingen geen vertrouwd uiterlijk krijgen."
|
||||||
|
},
|
||||||
"keyboard_shortcuts": {
|
"keyboard_shortcuts": {
|
||||||
"label": "Sneltoetsen",
|
"label": "Sneltoetsen",
|
||||||
"description": "Bekijk beschikbare sneltoetsen",
|
"description": "Bekijk beschikbare sneltoetsen",
|
||||||
|
|||||||
@@ -1285,6 +1285,10 @@
|
|||||||
"label": "Favikony nadawców (eksperymentalne)",
|
"label": "Favikony nadawców (eksperymentalne)",
|
||||||
"description": "Pokazuj ikony stron internetowych jako zdjęcia profilowe nadawców firmowych"
|
"description": "Pokazuj ikony stron internetowych jako zdjęcia profilowe nadawców firmowych"
|
||||||
},
|
},
|
||||||
|
"show_avatars_in_junk": {
|
||||||
|
"label": "Pokazuj awatary w folderze spam",
|
||||||
|
"description": "Pokazuj zdjęcia profilowe i favikony nadawców w folderze spam. Domyślnie wyłączone, aby próby phishingu nie wyglądały na wiarygodne."
|
||||||
|
},
|
||||||
"keyboard_shortcuts": {
|
"keyboard_shortcuts": {
|
||||||
"label": "Skróty klawiszowe",
|
"label": "Skróty klawiszowe",
|
||||||
"description": "Wyświetl dostępne skróty klawiszowe",
|
"description": "Wyświetl dostępne skróty klawiszowe",
|
||||||
|
|||||||
@@ -1285,6 +1285,10 @@
|
|||||||
"label": "Favicons de remetente (Experimental)",
|
"label": "Favicons de remetente (Experimental)",
|
||||||
"description": "Exibir ícones de sites como fotos de perfil para remetentes empresariais"
|
"description": "Exibir ícones de sites como fotos de perfil para remetentes empresariais"
|
||||||
},
|
},
|
||||||
|
"show_avatars_in_junk": {
|
||||||
|
"label": "Mostrar avatares na pasta de spam",
|
||||||
|
"description": "Exibir imagens de perfil e favicons dos remetentes na pasta de spam. Desativado por padrão para não dar aparência legítima a tentativas de phishing."
|
||||||
|
},
|
||||||
"keyboard_shortcuts": {
|
"keyboard_shortcuts": {
|
||||||
"label": "Atalhos de Teclado",
|
"label": "Atalhos de Teclado",
|
||||||
"description": "Visualizar atalhos de teclado disponíveis",
|
"description": "Visualizar atalhos de teclado disponíveis",
|
||||||
|
|||||||
@@ -1285,6 +1285,10 @@
|
|||||||
"label": "Фавиконы отправителей (Экспериментально)",
|
"label": "Фавиконы отправителей (Экспериментально)",
|
||||||
"description": "Показывать иконки сайтов как аватары для корпоративных отправителей"
|
"description": "Показывать иконки сайтов как аватары для корпоративных отправителей"
|
||||||
},
|
},
|
||||||
|
"show_avatars_in_junk": {
|
||||||
|
"label": "Показывать аватары в папке «Спам»",
|
||||||
|
"description": "Показывать аватары и фавиконы отправителей в папке «Спам». По умолчанию отключено, чтобы фишинговые письма не выглядели правдоподобно."
|
||||||
|
},
|
||||||
"keyboard_shortcuts": {
|
"keyboard_shortcuts": {
|
||||||
"label": "Сочетания клавиш",
|
"label": "Сочетания клавиш",
|
||||||
"description": "Просмотреть доступные сочетания клавиш",
|
"description": "Просмотреть доступные сочетания клавиш",
|
||||||
|
|||||||
@@ -1285,6 +1285,10 @@
|
|||||||
"label": "Favicons відправника (експериментальний)",
|
"label": "Favicons відправника (експериментальний)",
|
||||||
"description": "Показувати піктограми веб-сайтів як зображення профілю для бізнес-відправників"
|
"description": "Показувати піктограми веб-сайтів як зображення профілю для бізнес-відправників"
|
||||||
},
|
},
|
||||||
|
"show_avatars_in_junk": {
|
||||||
|
"label": "Показувати аватари в папці «Спам»",
|
||||||
|
"description": "Показувати зображення профілю та фавікони відправників у папці «Спам». Типово вимкнено, щоб фішингові листи не виглядали достовірно."
|
||||||
|
},
|
||||||
"keyboard_shortcuts": {
|
"keyboard_shortcuts": {
|
||||||
"label": "Комбінації клавіш",
|
"label": "Комбінації клавіш",
|
||||||
"description": "Переглянути доступні комбінації клавіш",
|
"description": "Переглянути доступні комбінації клавіш",
|
||||||
|
|||||||
@@ -1285,6 +1285,10 @@
|
|||||||
"label": "发件人图标(实验性)",
|
"label": "发件人图标(实验性)",
|
||||||
"description": "使用企业发件人的网站图标作为头像"
|
"description": "使用企业发件人的网站图标作为头像"
|
||||||
},
|
},
|
||||||
|
"show_avatars_in_junk": {
|
||||||
|
"label": "在垃圾邮件文件夹中显示头像",
|
||||||
|
"description": "在垃圾邮件文件夹中显示发件人的头像和网站图标。默认关闭,避免钓鱼邮件因熟悉的图标看起来更可信。"
|
||||||
|
},
|
||||||
"keyboard_shortcuts": {
|
"keyboard_shortcuts": {
|
||||||
"label": "键盘快捷键",
|
"label": "键盘快捷键",
|
||||||
"description": "查看可用快捷键",
|
"description": "查看可用快捷键",
|
||||||
|
|||||||
@@ -187,6 +187,7 @@ interface SettingsState {
|
|||||||
|
|
||||||
// Experimental
|
// Experimental
|
||||||
senderFavicons: boolean;
|
senderFavicons: boolean;
|
||||||
|
showAvatarsInJunk: boolean; // Show profile images/favicons in the junk folder
|
||||||
|
|
||||||
// Sidebar
|
// Sidebar
|
||||||
colorfulSidebarIcons: boolean; // Tint folder icons by role (inbox blue, junk red, etc.)
|
colorfulSidebarIcons: boolean; // Tint folder icons by role (inbox blue, junk red, etc.)
|
||||||
@@ -334,6 +335,7 @@ const DEFAULT_SETTINGS = {
|
|||||||
|
|
||||||
// Experimental
|
// Experimental
|
||||||
senderFavicons: true,
|
senderFavicons: true,
|
||||||
|
showAvatarsInJunk: false,
|
||||||
|
|
||||||
// Sidebar
|
// Sidebar
|
||||||
colorfulSidebarIcons: true,
|
colorfulSidebarIcons: true,
|
||||||
@@ -475,6 +477,7 @@ export const useSettingsStore = create<SettingsState>()(
|
|||||||
showRailAccountList: state.showRailAccountList,
|
showRailAccountList: state.showRailAccountList,
|
||||||
enableUnifiedMailbox: state.enableUnifiedMailbox,
|
enableUnifiedMailbox: state.enableUnifiedMailbox,
|
||||||
senderFavicons: state.senderFavicons,
|
senderFavicons: state.senderFavicons,
|
||||||
|
showAvatarsInJunk: state.showAvatarsInJunk,
|
||||||
colorfulSidebarIcons: state.colorfulSidebarIcons,
|
colorfulSidebarIcons: state.colorfulSidebarIcons,
|
||||||
folderIcons: state.folderIcons,
|
folderIcons: state.folderIcons,
|
||||||
emailKeywords: state.emailKeywords,
|
emailKeywords: state.emailKeywords,
|
||||||
|
|||||||
Reference in New Issue
Block a user