Skip to content

Commit 238747a

Browse files
chore: Manually unsnooze message in DB
1 parent 7c4d2cd commit 238747a

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

MailCore/Cache/MailboxManager/MailboxManager+Thread.swift

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -529,20 +529,18 @@ public extension MailboxManager {
529529

530530
return isInFolder && isSnoozed && isLastMessageFromThreadNotSnoozed
531531
}
532-
}.freeze()
532+
}.freezeIfNeeded()
533533

534534
guard !threadsToUnsnooze.isEmpty else { return }
535535

536536
let unsnoozedMessages: [String] = await Array(threadsToUnsnooze).concurrentCompactMap(customConcurrency: 4) { thread in
537-
guard let lastMessageSnoozed = thread.messages.last(where: { $0.isSnoozed }) else {
538-
return nil
539-
}
537+
guard let lastMessageSnoozed = thread.messages.last(where: { $0.isSnoozed }) else { return nil }
540538

541539
do {
542540
try await self.apiFetcher.deleteSnooze(message: lastMessageSnoozed, mailbox: self.mailbox)
543541
return lastMessageSnoozed.uid
544542
} catch let error as MailApiError where error == .apiMessageNotSnoozed {
545-
self.unsnoozeThreadInRealm()
543+
self.manuallyUnsnoozeThreadInRealm(thread: thread)
546544
return nil
547545
} catch {
548546
SentrySDK.capture(message: "Impossible to automatically unsnooze thread") { scope in
@@ -571,8 +569,24 @@ public extension MailboxManager {
571569
}
572570
}
573571

574-
private func unsnoozeThreadInRealm() {
572+
private func manuallyUnsnoozeThreadInRealm(thread: Thread) {
573+
try? writeTransaction { writableRealm in
574+
guard let freshThread = thread.fresh(using: writableRealm) else { return }
575+
576+
let snoozedMessages = freshThread.messages.where { $0.snoozeState == .snoozed }
575577

578+
for snoozedMessage in snoozedMessages {
579+
snoozedMessage.snoozeState = nil
580+
snoozedMessage.snoozeUuid = nil
581+
snoozedMessage.snoozeEndDate = nil
582+
}
583+
584+
try? freshThread.recomputeOrFail()
585+
let duplicatesThreads = Set(freshThread.duplicates.flatMap { $0.threads })
586+
for duplicateThread in duplicatesThreads {
587+
try? duplicateThread.recomputeOrFail()
588+
}
589+
}
576590
}
577591

578592
// MARK: - Utils

0 commit comments

Comments
 (0)