@@ -29,9 +29,9 @@ public extension MailboxManager {
29
29
return
30
30
}
31
31
32
- let folderResultRaw = try await apiFetcher. folders ( mailbox: mailbox)
33
- let folderResult = folderResultRaw . filter { $0 . role != . unknown }
34
- let newFolders = getSubFolders ( from: folderResult )
32
+ let folderResult = try await apiFetcher. folders ( mailbox: mailbox)
33
+ let filteredFolderResult = filterOutUnknownFolders ( folderResult )
34
+ let newFolders = getSubFolders ( from: filteredFolderResult )
35
35
36
36
try ? writeTransaction { writableRealm in
37
37
// Update folders in Realm
@@ -43,7 +43,7 @@ public extension MailboxManager {
43
43
let cachedFolders = writableRealm. objects ( Folder . self)
44
44
45
45
// Remove old folders
46
- writableRealm. add ( folderResult , update: . modified)
46
+ writableRealm. add ( filteredFolderResult , update: . modified)
47
47
let toDeleteFolders = Set ( cachedFolders) . subtracting ( Set ( newFolders) )
48
48
. filter { $0. remoteId != Constants . searchFolderId }
49
49
var toDeleteThreads = [ Thread] ( )
@@ -116,4 +116,18 @@ public extension MailboxManager {
116
116
func cancelRefresh( ) async {
117
117
await refreshActor. cancelRefresh ( )
118
118
}
119
+
120
+ private func filterOutUnknownFolders( _ folders: [ Folder ] ) -> [ Folder ] {
121
+ let filteredFolders : [ Folder ] = folders. compactMap { folder in
122
+ guard folder. role != . unknown else { return nil }
123
+
124
+ let filteredChildren = filterOutUnknownFolders ( Array ( folder. children) )
125
+ folder. children. removeAll ( )
126
+ folder. children. insert ( objectsIn: filteredChildren)
127
+
128
+ return folder
129
+ }
130
+
131
+ return filteredFolders
132
+ }
119
133
}
0 commit comments