diff --git a/Mail/Views/Thread/Message/MessageView.swift b/Mail/Views/Thread/Message/MessageView.swift index 253579606..bb2a5b28c 100644 --- a/Mail/Views/Thread/Message/MessageView.swift +++ b/Mail/Views/Thread/Message/MessageView.swift @@ -102,10 +102,10 @@ struct MessageView: View { prepareBodyIfNeeded() } .task { - if message.shouldComplete { - await fetchMessage() - } - try? await fetchEventCalendar() + await fetchMessageAndEventCalendar() + } + .task(id: isMessageExpanded) { + await fetchMessageAndEventCalendar() } .onDisappear { inlineAttachmentWorker?.stop() @@ -127,21 +127,36 @@ struct MessageView: View { } } - @MainActor private func fetchMessage() async { + private func fetchMessageAndEventCalendar() async { + guard isMessageExpanded else { return } + + async let fetchMessageResult: Void = fetchMessage() + + async let fetchEventCalendar: Void = fetchEventCalendar() + + await fetchMessageResult + await fetchEventCalendar + } + + private func fetchMessage() async { + guard message.shouldComplete else { return } + await tryOrDisplayError { do { try await mailboxManager.message(message: message) } catch let error as MailApiError where error == .apiMessageNotFound { snackbarPresenter.show(message: error.errorDescription ?? "") try await mailboxManager.refreshFolder(from: [message], additionalFolder: nil) + } catch let error as AFErrorWithContext where error.afError.isExplicitlyCancelledError { + isShowingErrorLoading = false } catch { isShowingErrorLoading = true } } } - private func fetchEventCalendar() async throws { - try await mailboxManager.calendarEvent(from: message.uid) + private func fetchEventCalendar() async { + try? await mailboxManager.calendarEvent(from: message.uid) } } diff --git a/MailCore/API/MailError.swift b/MailCore/API/MailError.swift index 31fadf4b8..f802b7f24 100644 --- a/MailCore/API/MailError.swift +++ b/MailCore/API/MailError.swift @@ -23,9 +23,9 @@ import MailResources extension ApiError: CustomStringConvertible {} -class AFErrorWithContext: MailError { - let request: DataRequest - let afError: AFError +public class AFErrorWithContext: MailError { + public let request: DataRequest + public let afError: AFError init(request: DataRequest, afError: AFError) { self.request = request