From ebb2adb52698a082aeb4d6f89feea23765f469bf Mon Sep 17 00:00:00 2001 From: Ambroise Decouttere Date: Fri, 9 Jun 2023 14:49:24 +0200 Subject: [PATCH] fix: Reset folder history when it is emptied --- MailCore/Cache/MailboxManager.swift | 48 ++++++++++++++--------------- MailCore/Models/Folder.swift | 5 +++ 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/MailCore/Cache/MailboxManager.swift b/MailCore/Cache/MailboxManager.swift index fcd89a0b9..4d0287bbc 100644 --- a/MailCore/Cache/MailboxManager.swift +++ b/MailCore/Cache/MailboxManager.swift @@ -685,21 +685,8 @@ public class MailboxManager: ObservableObject { MailboxInfosManager.instance.updateUnseen(unseenMessages: folder.unreadCount, for: mailbox) } - var remainingOldMessagesToFetch = folder.remainingOldMessagesToFetch - while remainingOldMessagesToFetch > 0 { + while try await fetchOnePage(folder: folder, direction: .previous) { guard !Task.isCancelled else { return } - - if try !(await fetchOnePage(folder: folder, direction: .previous)) { - break - } - - remainingOldMessagesToFetch -= Constants.pageSize - await backgroundRealm.execute { realm in - let folder = folder.fresh(using: realm) - try? realm.safeWrite { - folder?.remainingOldMessagesToFetch = remainingOldMessagesToFetch - } - } } } @@ -730,23 +717,36 @@ public class MailboxManager: ObservableObject { try await handleMessagesUids(messageUids: messagesUids, folder: folder) - guard paginationInfo != nil else { - return messagesUids.addedShortUids.count > Constants.pageSize - } - - if messagesUids.addedShortUids.count < Constants.pageSize || messagesUids.addedShortUids.contains("1") { - if direction == .previous { - await backgroundRealm.execute { realm in - let freshFolder = folder.fresh(using: realm) + switch direction { + case .previous: + return await backgroundRealm.execute { realm in + let freshFolder = folder.fresh(using: realm) + if messagesUids.addedShortUids.count < Constants.pageSize || messagesUids.addedShortUids.contains("1") { try? realm.safeWrite { freshFolder?.isHistoryComplete = true freshFolder?.remainingOldMessagesToFetch = 0 } + return false + } else { + try? realm.safeWrite { + freshFolder?.remainingOldMessagesToFetch -= Constants.pageSize + } + return true + } + } + case .following: + if paginationInfo == nil { + await backgroundRealm.execute { realm in + let freshFolder = folder.fresh(using: realm) + try? realm.safeWrite { + freshFolder?.resetHistoryInfo() + } } } - return false + default: + break } - return true + return messagesUids.addedShortUids.count == Constants.pageSize } private func handleMessagesUids(messageUids: MessagesUids, folder: Folder) async throws { diff --git a/MailCore/Models/Folder.swift b/MailCore/Models/Folder.swift index 8eb961b14..962f35331 100644 --- a/MailCore/Models/Folder.swift +++ b/MailCore/Models/Folder.swift @@ -191,6 +191,11 @@ public class Folder: Object, Codable, Comparable, Identifiable { unreadCount = threads.where { $0.unseenMessages > 0 }.count } + public func resetHistoryInfo() { + remainingOldMessagesToFetch = Constants.messageQuantityLimit + isHistoryComplete = false + } + public func isParent(of folder: Folder) -> Bool { let myComponents = path.components(separatedBy: separator) let folderComponents = folder.path.components(separatedBy: separator)