mark messages as read when selecting a thread

Updates local flags and enqueues \\Seen flag action for IMAP sync.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-15 12:36:57 +01:00
parent fc90d71021
commit 6bd1163c6c

View File

@@ -187,7 +187,7 @@ final class MailViewModel {
func selectThread(_ thread: ThreadSummary) {
selectedThread = thread
messageObservation?.cancel()
guard let store else { return }
guard let store, let accountConfig else { return }
messageObservation = Task {
do {
for try await msgs in store.observeMessages(threadId: thread.id) {
@@ -199,6 +199,24 @@ final class MailViewModel {
}
}
}
// Mark all unread messages in the thread as read
if thread.unreadCount > 0 {
do {
let messages = try store.messagesForThread(threadId: thread.id)
for message in messages where !message.isRead {
try store.updateFlags(messageId: message.id, isRead: true, isFlagged: message.isFlagged)
let action = PendingAction(
accountId: accountConfig.id,
actionType: .setFlags,
payload: .setFlags(uid: message.uid, mailbox: mailboxName(for: message.mailboxId) ?? "INBOX", add: ["\\Seen"], remove: [])
)
Task { try await actionQueue?.enqueue(action) }
}
} catch {
errorMessage = error.localizedDescription
}
}
}
private var isSyncing = false