Skip to content

Commit 0e1fe71

Browse files
chore: Manually unsnooze message in DB
1 parent 7c4d2cd commit 0e1fe71

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

MailCore/API/MailApiError.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,6 @@ public class MailApiError: MailError {
173173
// Snooze
174174
apiMessageNotSnoozed,
175175
MailApiError(code: "mail__message_snooze_already_scheduled"),
176-
MailApiError(code: "mail__message_not_snoozed"),
177176
MailApiError(code: "mail__message_max_number_of_scheduled_snooze_reached"),
178177
MailApiError(code: "mail__message_cannot_be_snooze")
179178
]

MailCore/Cache/MailboxManager/MailboxManager+Thread.swift

Lines changed: 18 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,22 @@ 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+
for message in freshThread.messages {
577+
message.snoozeState = nil
578+
message.snoozeUuid = nil
579+
message.snoozeEndDate = nil
580+
}
575581

582+
try? freshThread.recomputeOrFail()
583+
let duplicatesThreads = Set(freshThread.duplicates.flatMap { $0.threads })
584+
for duplicateThread in duplicatesThreads {
585+
try? duplicateThread.recomputeOrFail()
586+
}
587+
}
576588
}
577589

578590
// MARK: - Utils

0 commit comments

Comments
 (0)