@implementation SOGoMailAccount
-static NSArray *rootFolderNames = nil;
-static NSString *inboxFolderName = @"INBOX";
-static NSString *draftsFolderName = @"Drafts";
-static NSString *sieveFolderName = @"Filters";
-static BOOL useAltNamespace = NO;
+static NSArray *rootFolderNames = nil;
+static NSString *inboxFolderName = @"INBOX";
+static NSString *draftsFolderName = @"Drafts";
+static NSString *sieveFolderName = @"Filters";
+static NSString *sharedFolderName = @""; // TODO: add English default
+static NSString *otherUsersFolderName = @""; // TODO: add English default
+static BOOL useAltNamespace = NO;
+
++ (int)version {
+ return [super version] + 0 /* v1 */;
+}
+ (void)initialize {
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
+
+ NSAssert2([super version] == 1,
+ @"invalid superclass (%@) version %i !",
+ NSStringFromClass([self superclass]), [super version]);
useAltNamespace = [ud boolForKey:@"SOGoSpecialFoldersInRoot"];
+ sharedFolderName = [ud stringForKey:@"SOGoSharedFolderName"];
+ otherUsersFolderName = [ud stringForKey:@"SOGoOtherUsersFolderName"];
+
+ NSLog(@"Note: using shared-folders name: '%@'", sharedFolderName);
+ NSLog(@"Note: using other-users-folders name: '%@'", otherUsersFolderName);
+
if ([ud boolForKey:@"SOGoEnableSieveFolder"]) {
rootFolderNames = [[NSArray alloc] initWithObjects:
draftsFolderName,
}
}
+/* shared accounts */
+
+- (BOOL)isSharedAccount {
+ NSString *s;
+ NSRange r;
+
+ s = [self nameInContainer];
+ r = [s rangeOfString:@"@"];
+ if (r.length == 0) /* regular HTTP logins are never a shared mailbox */
+ return NO;
+
+ s = [s substringToIndex:r.location];
+ return [s rangeOfString:@".-."].length > 0 ? YES : NO;
+}
+
+- (NSString *)sharedAccountName {
+ return nil;
+}
+
/* listing the available folders */
+- (NSArray *)additionalRootFolderNames {
+ return rootFolderNames;
+}
+
- (NSArray *)toManyRelationshipKeys {
NSArray *a, *b;
-
- a = rootFolderNames;
- b = [[self mailManager] subfoldersForURL:[self imap4URL]
- password:[self imap4Password]];
+ a = [self additionalRootFolderNames];
+ b = [[self imap4Connection] subfoldersForURL:[self imap4URL]];
return [b count] > 0 ? [b arrayByAddingObjectsFromArray:a] : a;
}
- (NSArray *)allFolderPathes {
NSArray *pathes;
- pathes = [[self mailManager] allFoldersForURL:[self imap4URL]
- password:[self imap4Password]];
+ pathes = [[self imap4Connection] allFoldersForURL:[self imap4URL] ];
pathes = [pathes sortedArrayUsingSelector:@selector(compare:)];
return pathes;
}
return [creds objectAtIndex:0]; /* the user */
}
-- (NSURL *)imap4URL {
- /* imap://agenortest@mail.opengroupware.org/INBOX/withsubdirs/subdir1 */
+- (NSString *)imap4URLString {
+ /* private, overridden by SOGoSharedMailAccount */
NSString *s;
NSRange r;
- if (self->imap4URL != nil)
- return self->imap4URL;
-
s = [self nameInContainer];
r = [s rangeOfString:@"@"];
if (r.length == 0) {
s = [([self useSSL] ? @"imaps://" : @"imap://") stringByAppendingString:s];
s = [s stringByAppendingString:@"/"];
+ return s;
+}
+
+- (NSURL *)imap4URL {
+ /* imap://agenortest@mail.opengroupware.org/ */
+ NSString *s;
+
+ if (self->imap4URL != nil)
+ return self->imap4URL;
+
+ if ((s = [self imap4URLString]) == nil)
+ return nil;
self->imap4URL = [[NSURL alloc] initWithString:s];
return self->imap4URL;
ud = [NSUserDefaults standardUserDefaults];
s = [[ud stringForKey:@"SOGoSentFolderName"] copy];
if ([s length] == 0) s = @"Sent";
- NSLog(@"Note: using SOGoSentFolderName: '%@'", s);
+ [self logWithFormat:@"Note: using SOGoSentFolderName: '%@'", s];
}
return s;
}
}
- (NSException *)davCreateCollection:(NSString *)_name inContext:(id)_ctx {
- return [[self mailManager] createMailbox:_name atURL:[self imap4URL]
- password:[self imap4Password]];
+ return [[self imap4Connection] createMailbox:_name atURL:[self imap4URL]];
}
- (NSString *)shortTitle {