fix(mail): Templates namespace is correctly returned

This commit is contained in:
Hivert Quentin
2023-08-09 16:30:33 +02:00
parent ba83ffda71
commit c474f96e8b
3 changed files with 59 additions and 79 deletions
+22 -29
View File
@@ -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];
}
+31 -42
View File
@@ -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 */];
+6 -8
View File
@@ -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]; */