]> err.no Git - scalable-opengroupware.org/blobdiff - SOGo/SoObjects/Mailer/SOGoMailAccount.m
improved special mail folders
[scalable-opengroupware.org] / SOGo / SoObjects / Mailer / SOGoMailAccount.m
index 658af71eb89a299d6ace190fd0bd9d7f375962f0..68c6ca8e348125137f3394eab2fbd86f95e0ca04 100644 (file)
 
 @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];
@@ -159,6 +159,44 @@ static NSArray  *rootFolderNames  = nil;
 
 /* 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;
@@ -166,7 +204,8 @@ static NSArray  *rootFolderNames  = nil;
   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]));
@@ -182,7 +221,8 @@ static NSArray  *rootFolderNames  = nil;
   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]) {
@@ -203,7 +243,8 @@ static NSArray  *rootFolderNames  = nil;
   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]) {