From 96588aef6a708a0699079d37e542f9101a10b81d Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Fri, 8 Jan 2016 10:29:14 -0500 Subject: [PATCH] (fix) properly handle mail subfolders for EAS --- ActiveSync/SOGoActiveSyncDispatcher.m | 30 +++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/ActiveSync/SOGoActiveSyncDispatcher.m b/ActiveSync/SOGoActiveSyncDispatcher.m index 637dd612e..251eb8188 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher.m +++ b/ActiveSync/SOGoActiveSyncDispatcher.m @@ -697,6 +697,27 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. } +- (void) _flattenFolders: (NSArray *) theFolders + into: (NSMutableArray *) theTarget + parent: (NSString *) theParent +{ + NSArray *o; + int i; + + [theTarget addObjectsFromArray: theFolders]; + + for (i = 0; i < [theFolders count]; i++) + { + if (theParent) + [[theFolders objectAtIndex: i] setObject: theParent forKey: @"parent"]; + + o = [[theFolders objectAtIndex: i] objectForKey: @"children"]; + + if (o) + [self _flattenFolders: o into: theTarget parent: [[theFolders objectAtIndex: i] objectForKey: @"path"]]; + } +} + // // // @@ -708,16 +729,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. inResponse: (WOResponse *) theResponse { NSString *key, *cKey, *nkey, *name, *serverId, *parentId, *nameInCache, *personalFolderName, *syncKey, *folderType, *operation; + NSMutableArray *folders, *processedFolders, *allFoldersMetadata; NSMutableDictionary *cachedGUIDs, *metadata; - NSMutableArray *folders, *processedFolders; NSDictionary *folderMetadata, *imapGUIDs; - NSArray *allFoldersMetadata, *allKeys; SOGoMailAccounts *accountsFolder; SOGoMailAccount *accountFolder; NSMutableString *s, *commands; SOGoUserFolder *userFolder; SoSecurityManager *sm; SOGoCacheGCSObject *o; + NSArray *allKeys; id currentFolder; NSData *d; @@ -759,7 +780,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. accountsFolder = [userFolder lookupName: @"Mail" inContext: context acquire: NO]; accountFolder = [accountsFolder lookupName: @"0" inContext: context acquire: NO]; - allFoldersMetadata = [accountFolder allFoldersMetadata]; + allFoldersMetadata = [NSMutableArray array]; + [self _flattenFolders: [accountFolder allFoldersMetadata] into: allFoldersMetadata parent: nil]; // Get GUIDs of folder (IMAP) // e.g. {folderINBOX = folder6b93c528176f1151c7260000aef6df92} @@ -908,7 +930,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. { // make sure that parent of main-folders is always 0 if (type == 12) - parentId = [NSString stringWithFormat: @"mail/%@", [[imapGUIDs objectForKey: [NSString stringWithFormat: @"folder%@", [[folderMetadata objectForKey: @"parent"] substringFromIndex: 1]]] substringFromIndex: 6]]; + parentId = [NSString stringWithFormat: @"mail/%@", [[imapGUIDs objectForKey: [NSString stringWithFormat: @"folder%@", [folderMetadata objectForKey: @"parent"]]] substringFromIndex: 6]]; name = [[name pathComponents] lastObject]; }