@@ -529,20 +529,18 @@ public extension MailboxManager {
529
529
530
530
return isInFolder && isSnoozed && isLastMessageFromThreadNotSnoozed
531
531
}
532
- } . freeze ( )
532
+ } . freezeIfNeeded ( )
533
533
534
534
guard !threadsToUnsnooze. isEmpty else { return }
535
535
536
536
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 }
540
538
541
539
do {
542
540
try await self . apiFetcher. deleteSnooze ( message: lastMessageSnoozed, mailbox: self . mailbox)
543
541
return lastMessageSnoozed. uid
544
542
} catch let error as MailApiError where error == . apiMessageNotSnoozed {
545
- self . unsnoozeThreadInRealm ( )
543
+ self . manuallyUnsnoozeThreadInRealm ( thread : thread )
546
544
return nil
547
545
} catch {
548
546
SentrySDK . capture ( message: " Impossible to automatically unsnooze thread " ) { scope in
@@ -571,8 +569,24 @@ public extension MailboxManager {
571
569
}
572
570
}
573
571
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 }
575
577
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
+ }
576
590
}
577
591
578
592
// MARK: - Utils
0 commit comments