diff --git a/Apps/MagnumOpus/ViewModels/MailViewModel.swift b/Apps/MagnumOpus/ViewModels/MailViewModel.swift index 45f00cc..5e9f173 100644 --- a/Apps/MagnumOpus/ViewModels/MailViewModel.swift +++ b/Apps/MagnumOpus/ViewModels/MailViewModel.swift @@ -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