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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user