From 0da989bf46621e78bd265b7baf7e183176f2b8de Mon Sep 17 00:00:00 2001 From: Philippe Weidmann Date: Tue, 30 Apr 2024 08:09:45 +0200 Subject: [PATCH 1/2] fix: Freeze folder before async --- Mail/Views/Thread List/FlushFolderView.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Mail/Views/Thread List/FlushFolderView.swift b/Mail/Views/Thread List/FlushFolderView.swift index c66cf5a7f..2bf737bfd 100644 --- a/Mail/Views/Thread List/FlushFolderView.swift +++ b/Mail/Views/Thread List/FlushFolderView.swift @@ -56,9 +56,10 @@ struct FlushFolderView: View { Button { matomo.track(eventWithCategory: .threadList, name: "empty\(folder.matomoName.capitalized)") + let frozenFolder = folder.freezeIfNeeded() flushAlert = FlushAlertState { await tryOrDisplayError { - _ = try await mailboxManager.flushFolder(folder: folder.freezeIfNeeded()) + _ = try await mailboxManager.flushFolder(folder: folder) } } } label: { From ce3de22847d1b4e65fb2d83520ea55a152665be6 Mon Sep 17 00:00:00 2001 From: Philippe Weidmann Date: Tue, 30 Apr 2024 08:30:59 +0200 Subject: [PATCH 2/2] fix: Ensure destination folder is always frozen --- Mail/Views/MoveEmailView.swift | 8 +++++++- MailCore/Cache/MailboxManager/MailboxManager+Thread.swift | 5 +++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Mail/Views/MoveEmailView.swift b/Mail/Views/MoveEmailView.swift index c15aaa134..d56af43f2 100644 --- a/Mail/Views/MoveEmailView.swift +++ b/Mail/Views/MoveEmailView.swift @@ -92,9 +92,15 @@ struct MoveEmailView: View { private func move(to folder: Folder) { let frozenOriginFolder = originFolder?.freezeIfNeeded() + let frozenDestinationFolder = folder.freezeIfNeeded() + Task { await tryOrDisplayError { - try await actionsManager.performMove(messages: movedMessages, from: frozenOriginFolder, to: folder) + try await actionsManager.performMove( + messages: movedMessages, + from: frozenOriginFolder, + to: frozenDestinationFolder + ) } } dismissModal() diff --git a/MailCore/Cache/MailboxManager/MailboxManager+Thread.swift b/MailCore/Cache/MailboxManager/MailboxManager+Thread.swift index b4a28d44b..2ac3ad59d 100644 --- a/MailCore/Cache/MailboxManager/MailboxManager+Thread.swift +++ b/MailCore/Cache/MailboxManager/MailboxManager+Thread.swift @@ -19,6 +19,7 @@ import CocoaLumberjackSwift import Foundation import InfomaniakCore +import InfomaniakCoreDB import InfomaniakCoreUI import RealmSwift import Sentry @@ -31,8 +32,8 @@ public extension MailboxManager { /// - Parameters: /// - folder: Folder to fetch messages from /// - fetchCurrentFolderCompleted: Completion once the messages have been fetched - func threads(folder: Folder, fetchCurrentFolderCompleted: (() -> Void) = {}) async throws { - try await messages(folder: folder.freezeIfNeeded()) + func threads(@EnsureFrozen folder: Folder, fetchCurrentFolderCompleted: (() -> Void) = {}) async throws { + try await messages(folder: folder) fetchCurrentFolderCompleted() var roles: [FolderRole] {