@implementation SOGoMailAccount
+static NSArray *rootFolderNames = nil;
static NSString *inboxFolderName = @"INBOX";
static NSString *draftsFolderName = @"Drafts";
static NSString *sieveFolderName = @"Filters";
-static NSArray *rootFolderNames = nil;
+ (void)initialize {
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
/* special folders */
+- (NSString *)inboxFolderNameInContext:(id)_ctx {
+ return inboxFolderName; /* cannot be changed in Cyrus ? */
+}
+- (NSString *)draftsFolderNameInContext:(id)_ctx {
+ return draftsFolderName; /* SOGo managed folder */
+}
+- (NSString *)sieveFolderNameInContext:(id)_ctx {
+ return sieveFolderName; /* SOGo managed folder */
+}
+- (NSString *)sentFolderNameInContext:(id)_ctx {
+ /* OGo issue #1225 */
+ static NSString *s = nil;
+
+ if (s == nil) {
+ NSUserDefaults *ud;
+
+ ud = [NSUserDefaults standardUserDefaults];
+ s = [[ud stringForKey:@"SOGoSentFolderName"] copy];
+ if ([s length] == 0) s = @"Sent";
+ NSLog(@"Note: using SOGoSentFolderName: '%@'", s);
+ }
+ return s;
+}
+- (NSString *)trashFolderNameInContext:(id)_ctx {
+ /* OGo issue #1225 */
+ static NSString *s = nil;
+
+ if (s == nil) {
+ NSUserDefaults *ud;
+
+ ud = [NSUserDefaults standardUserDefaults];
+ s = [[ud stringForKey:@"SOGoTrashFolderName"] copy];
+ if ([s length] == 0) s = @"Trash";
+ NSLog(@"Note: using SOGoTrashFolderName: '%@'", s);
+ }
+ return s;
+}
+
- (SOGoMailFolder *)inboxFolderInContext:(id)_ctx {
// TODO: use some profile to determine real location, use a -traverse lookup
SOGoMailFolder *folder;
if (self->inboxFolder != nil)
return self->inboxFolder;
- folder = [self lookupName:inboxFolderName inContext:_ctx acquire:NO];
+ folder = [self lookupName:[self inboxFolderNameInContext:_ctx]
+ inContext:_ctx acquire:NO];
if ([folder isKindOfClass:[NSException class]]) return folder;
return ((self->inboxFolder = [folder retain]));
folder = [self inboxFolderInContext:_ctx];
if ([folder isKindOfClass:[NSException class]]) return folder;
- folder = [folder lookupName:@"Sent" inContext:_ctx acquire:NO];
+ folder = [folder lookupName:[self sentFolderNameInContext:_ctx]
+ inContext:_ctx acquire:NO];
if ([folder isKindOfClass:[NSException class]]) return folder;
if (![folder isNotNull]) {
folder = [self inboxFolderInContext:_ctx];
if ([folder isKindOfClass:[NSException class]]) return folder;
- folder = [folder lookupName:@"Trash" inContext:_ctx acquire:NO];
+ folder = [folder lookupName:[self trashFolderNameInContext:_ctx]
+ inContext:_ctx acquire:NO];
if ([folder isKindOfClass:[NSException class]]) return folder;
if (![folder isNotNull]) {
#include "SOGoMailFolder.h"
#include "SOGoMailObject.h"
+#include "SOGoMailAccount.h"
#include "SOGoMailManager.h"
#include "common.h"
@implementation SOGoMailFolder
- (void)dealloc {
- [self->filenames release];
+ [self->filenames release];
+ [self->folderType release];
[super dealloc];
}
- (NSString *)outlookFolderClass {
// TODO: detect Trash/Sent/Drafts folders
- return @"IPF.Folder";
+ SOGoMailAccount *account;
+ NSString *n;
+
+ if (self->folderType != nil)
+ return self->folderType;
+
+ account = [self mailAccountFolder];
+ n = [self nameInContainer];
+
+ if ([n isEqualToString:[account trashFolderNameInContext:nil]])
+ self->folderType = @"IPF.Trash";
+ else if ([n isEqualToString:[account inboxFolderNameInContext:nil]])
+ self->folderType = @"IPF.Inbox";
+ else if ([n isEqualToString:[account sentFolderNameInContext:nil]])
+ self->folderType = @"IPF.Sent";
+ else
+ self->folderType = @"IPF.Folder";
+
+ return self->folderType;
}
/* operations */