Skip to content

Commit

Permalink
feat: Mark message as seen locally before api call
Browse files Browse the repository at this point in the history
  • Loading branch information
Ambrdctr committed May 1, 2024
1 parent 81ceef6 commit 26316dd
Showing 1 changed file with 39 additions and 4 deletions.
43 changes: 39 additions & 4 deletions MailCore/Cache/MailboxManager/MailboxManager+Message.swift
Original file line number Diff line number Diff line change
Expand Up @@ -105,17 +105,52 @@ public extension MailboxManager {
// MARK: Private

func markAsSeen(messages: [Message], seen: Bool) async throws {
if seen {
try await apiFetcher.markAsSeen(mailbox: mailbox, messages: messages)
} else {
try await apiFetcher.markAsUnseen(mailbox: mailbox, messages: messages)
await markSeenLocally(seen, messages: messages)

do {
if seen {
try await apiFetcher.markAsSeen(mailbox: mailbox, messages: messages)
} else {
try await apiFetcher.markAsUnseen(mailbox: mailbox, messages: messages)
}
} catch {
await markSeenLocally(!seen, messages: messages)
}

try await refreshFolder(from: messages, additionalFolder: nil)

// TODO: Remove after fix
SentryDebug.listIncoherentMessageUpdate(messages: messages, actualSeen: seen)
}

func markSeenLocally(_ seen: Bool, messages: [Message]) async {
await backgroundRealm.execute { realm in
var updateThreads = Set<Thread>()

try? realm.write {
for message in messages {
guard let liveMessage = realm.object(ofType: Message.self, forPrimaryKey: message.uid) else {
continue
}

liveMessage.seen = seen

for thread in liveMessage.threads {
updateThreads.insert(thread)
}
}

for thread in updateThreads {
guard let liveThread = realm.object(ofType: Thread.self, forPrimaryKey: thread.uid) else {
continue
}

liveThread.updateUnseenMessages()
}
}
}
}

/// Set starred the given messages.
/// - Important: This methods stars only the messages you passes, no processing is done to add duplicates or remove drafts
func star(messages: [Message], starred: Bool) async throws {
Expand Down

0 comments on commit 26316dd

Please sign in to comment.