From c474f96e8bc89d9d60dd18617c384f0634c2dbc3 Mon Sep 17 00:00:00 2001 From: Hivert Quentin Date: Wed, 9 Aug 2023 16:30:33 +0200 Subject: [PATCH] fix(mail): Templates namespace is correctly returned --- SoObjects/Mailer/SOGoMailAccount.m | 51 +++++++++---------- SoObjects/Mailer/SOGoMailFolder.m | 73 ++++++++++++---------------- SoObjects/Mailer/SOGoMailNamespace.m | 14 +++--- 3 files changed, 59 insertions(+), 79 deletions(-) diff --git a/SoObjects/Mailer/SOGoMailAccount.m b/SoObjects/Mailer/SOGoMailAccount.m index eaa02025d..927a8fa10 100644 --- a/SoObjects/Mailer/SOGoMailAccount.m +++ b/SoObjects/Mailer/SOGoMailAccount.m @@ -1011,33 +1011,27 @@ static NSString *inboxFolderName = @"INBOX"; [[[self imap4Connection] client] namespace]; if ([_key hasPrefix: @"folder"]) - { - folderName = [[_key substringFromIndex: 6] fromCSSIdentifier]; + { + folderName = [[_key substringFromIndex: 6] fromCSSIdentifier]; - namespaces = [NSMutableArray array]; - [self _appendNamespaces: namespaces]; - if ([namespaces containsObject: folderName]) - klazz = [SOGoMailNamespace class]; - else if ([folderName - isEqualToString: [self draftsFolderNameInContext: _ctx]]) - klazz = [SOGoDraftsFolder class]; - else if ([folderName - isEqualToString: [self sentFolderNameInContext: _ctx]]) - klazz = [SOGoSentFolder class]; - else if ([folderName - isEqualToString: [self trashFolderNameInContext: _ctx]]) - klazz = [SOGoTrashFolder class]; - else if ([folderName - isEqualToString: [self junkFolderNameInContext: _ctx]]) - klazz = [SOGoJunkFolder class]; - else if ([folderName - isEqualToString: [self templatesFolderNameInContext: _ctx]]) - klazz = [SOGoTemplatesFolder class]; - else - klazz = [SOGoMailFolder class]; - - obj = [klazz objectWithName: _key inContainer: self]; - } + namespaces = [NSMutableArray array]; + [self _appendNamespaces: namespaces]; + if ([namespaces containsObject: folderName]) + klazz = [SOGoMailNamespace class]; + else if ([folderName isEqualToString: [self draftsFolderNameInContext: _ctx]]) + klazz = [SOGoDraftsFolder class]; + else if ([folderName isEqualToString: [self sentFolderNameInContext: _ctx]]) + klazz = [SOGoSentFolder class]; + else if ([folderName isEqualToString: [self trashFolderNameInContext: _ctx]]) + klazz = [SOGoTrashFolder class]; + else if ([folderName isEqualToString: [self junkFolderNameInContext: _ctx]]) + klazz = [SOGoJunkFolder class]; + else if ([folderName isEqualToString: [self templatesFolderNameInContext: _ctx]]) + klazz = [SOGoTemplatesFolder class]; + else + klazz = [SOGoMailFolder class]; + obj = [klazz objectWithName: _key inContainer: self]; + } else obj = [super lookupName: _key inContext: _ctx acquire: NO]; @@ -1222,9 +1216,8 @@ static NSString *inboxFolderName = @"INBOX"; { if (!templatesFolder) { - templatesFolder - = [self folderWithTraversal: [self templatesFolderNameInContext: _ctx] - andClassName: @"SOGoTemplatesFolder"]; + templatesFolder = [self folderWithTraversal: [self templatesFolderNameInContext: _ctx] + andClassName: @"SOGoTemplatesFolder"]; [templatesFolder retain]; } diff --git a/SoObjects/Mailer/SOGoMailFolder.m b/SoObjects/Mailer/SOGoMailFolder.m index e140eaa33..b3cace27f 100644 --- a/SoObjects/Mailer/SOGoMailFolder.m +++ b/SoObjects/Mailer/SOGoMailFolder.m @@ -1149,51 +1149,40 @@ static NSInteger _compareFetchResultsByUID (id entry1, id entry2, NSDictionary * obj = [super lookupName: _key inContext: _ctx acquire: NO]; if (!obj) + { + if ([_key hasPrefix: @"folder"]) { - if ([_key hasPrefix: @"folder"]) - { - mailAccount = [self mailAccountFolder]; - folderName = [[_key substringFromIndex: 6] fromCSSIdentifier]; - fullFolderName = [NSString stringWithFormat: @"%@/%@", - [self traversalFromMailAccount], folderName]; - if ([fullFolderName - isEqualToString: - [mailAccount draftsFolderNameInContext: _ctx]]) - className = @"SOGoDraftsFolder"; - else if ([fullFolderName - isEqualToString: - [mailAccount sentFolderNameInContext: _ctx]]) - className = @"SOGoSentFolder"; - else if ([fullFolderName - isEqualToString: - [mailAccount trashFolderNameInContext: _ctx]]) - className = @"SOGoTrashFolder"; - else if ([fullFolderName - isEqualToString: - [mailAccount junkFolderNameInContext: _ctx]]) - className = @"SOGoJunkFolder"; - else if ([fullFolderName - isEqualToString: - [mailAccount templatesFolderNameInContext: _ctx]]) - className = @"SOGoTemplatesFolder"; - /* else if ([folderName isEqualToString: - [mailAccount sieveFolderNameInContext: _ctx]]) - obj = [self lookupFiltersFolder: _key inContext: _ctx]; */ - else - className = @"SOGoMailFolder"; + mailAccount = [self mailAccountFolder]; + folderName = [[_key substringFromIndex: 6] fromCSSIdentifier]; + fullFolderName = [NSString stringWithFormat: @"%@/%@", + [self traversalFromMailAccount], folderName]; + if ([fullFolderName isEqualToString: [mailAccount draftsFolderNameInContext: _ctx]]) + className = @"SOGoDraftsFolder"; + else if ([fullFolderName isEqualToString: [mailAccount sentFolderNameInContext: _ctx]]) + className = @"SOGoSentFolder"; + else if ([fullFolderName isEqualToString: [mailAccount trashFolderNameInContext: _ctx]]) + className = @"SOGoTrashFolder"; + else if ([fullFolderName isEqualToString: [mailAccount junkFolderNameInContext: _ctx]]) + className = @"SOGoJunkFolder"; + else if ([fullFolderName isEqualToString: [mailAccount templatesFolderNameInContext: _ctx]]) + className = @"SOGoTemplatesFolder"; + /* else if ([folderName isEqualToString: + [mailAccount sieveFolderNameInContext: _ctx]]) + obj = [self lookupFiltersFolder: _key inContext: _ctx]; */ + else + className = @"SOGoMailFolder"; - obj = [NSClassFromString (className) objectWithName: _key - inContainer: self]; - } - else if (isdigit ([_key characterAtIndex: 0]) - && [self exists]) - { - obj = [SOGoMailObject objectWithName: _key inContainer: self]; - if ([_key hasSuffix: @".eml"]) - _key = [_key substringToIndex: [_key length] - 4]; - [obj setCoreInfos: [prefetchedInfos objectForKey: _key]]; - } + obj = [NSClassFromString (className) objectWithName: _key + inContainer: self]; } + else if (isdigit ([_key characterAtIndex: 0]) && [self exists]) + { + obj = [SOGoMailObject objectWithName: _key inContainer: self]; + if ([_key hasSuffix: @".eml"]) + _key = [_key substringToIndex: [_key length] - 4]; + [obj setCoreInfos: [prefetchedInfos objectForKey: _key]]; + } + } if (!obj && _acquire) obj = [NSException exceptionWithHTTPStatus: 404 /* Not Found */]; diff --git a/SoObjects/Mailer/SOGoMailNamespace.m b/SoObjects/Mailer/SOGoMailNamespace.m index 419c7446d..bb4fedeef 100644 --- a/SoObjects/Mailer/SOGoMailNamespace.m +++ b/SoObjects/Mailer/SOGoMailNamespace.m @@ -40,18 +40,16 @@ folderName = [[_key substringFromIndex: 6] fromCSSIdentifier]; fullFolderName = [NSString stringWithFormat: @"%@/%@", [self traversalFromMailAccount], folderName]; - if ([fullFolderName - isEqualToString: [mailAccount sentFolderNameInContext: _ctx]]) + if ([fullFolderName isEqualToString: [mailAccount sentFolderNameInContext: _ctx]]) className = @"SOGoSentFolder"; - else if ([fullFolderName isEqualToString: - [mailAccount draftsFolderNameInContext: _ctx]]) + else if ([fullFolderName isEqualToString: [mailAccount draftsFolderNameInContext: _ctx]]) className = @"SOGoDraftsFolder"; - else if ([fullFolderName isEqualToString: - [mailAccount trashFolderNameInContext: _ctx]]) + else if ([fullFolderName isEqualToString: [mailAccount trashFolderNameInContext: _ctx]]) className = @"SOGoTrashFolder"; - else if ([fullFolderName isEqualToString: - [mailAccount junkFolderNameInContext: _ctx]]) + else if ([fullFolderName isEqualToString: [mailAccount junkFolderNameInContext: _ctx]]) className = @"SOGoJunkFolder"; + else if ([fullFolderName isEqualToString: [mailAccount templatesFolderNameInContext: _ctx]]) + className = @"SOGoTemplatesFolder"; /* else if ([folderName isEqualToString: [mailAccount sieveFolderNameInContext: _ctx]]) obj = [self lookupFiltersFolder: _key inContext: _ctx]; */