Skip to content

Commit

Permalink
fix: Reset folder history when it is emptied
Browse files Browse the repository at this point in the history
  • Loading branch information
Ambrdctr committed Jun 9, 2023
1 parent a68c8d8 commit ebb2adb
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 24 deletions.
48 changes: 24 additions & 24 deletions MailCore/Cache/MailboxManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
}
}
}

Expand Down Expand Up @@ -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 {
Expand Down
5 changes: 5 additions & 0 deletions MailCore/Models/Folder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit ebb2adb

Please sign in to comment.