(fix) properly handle mail subfolders for EAS

pull/186/head
Ludovic Marcotte 2016-01-08 10:29:14 -05:00
parent f8d71966b9
commit 96588aef6a
1 changed files with 26 additions and 4 deletions

View File

@ -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"]];
}
}
//
// <?xml version="1.0"?>
// <!DOCTYPE ActiveSync PUBLIC "-//MICROSOFT//DTD ActiveSync//EN" "http://www.microsoft.com/">
@ -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];
}