From ba6b25f3f115a5132b41e034987f4c8042cfb2bf Mon Sep 17 00:00:00 2001 From: Linus Rath <139418639+rathlinus@users.noreply.github.com> Date: Fri, 27 Mar 2026 02:09:00 +0100 Subject: [PATCH] fix: respect markAsReadDelay setting in EmailViewer #95 --- components/email/email-viewer.tsx | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/components/email/email-viewer.tsx b/components/email/email-viewer.tsx index 7cba4f29..2e5f585a 100644 --- a/components/email/email-viewer.tsx +++ b/components/email/email-viewer.tsx @@ -1148,10 +1148,30 @@ export function EmailViewer({ ); useEffect(() => { - // Mark as read when email is viewed - if (email && !email.keywords?.$seen && onMarkAsRead) { - onMarkAsRead(email.id, true); + // Mark as read when email is viewed, respecting the delay setting + if (!email || email.keywords?.$seen || !onMarkAsRead) { + return; } + + const markAsReadDelay = useSettingsStore.getState().markAsReadDelay; + + // Never auto-mark + if (markAsReadDelay === -1) { + return; + } + + // Instant mark + if (markAsReadDelay === 0) { + onMarkAsRead(email.id, true); + return; + } + + // Delayed mark + const timeout = setTimeout(() => { + onMarkAsRead(email.id, true); + }, markAsReadDelay); + + return () => clearTimeout(timeout); // eslint-disable-next-line react-hooks/exhaustive-deps -- email?.id changes when email changes, which is the intended trigger }, [email?.id, email?.keywords?.$seen, onMarkAsRead]);