Monotone-Parent: cb5bfb62000fd7982b31d051ab2a4f4d859b9125

Monotone-Revision: 7d2a0f0461686fedc8113fa82622e1f9f934130a

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2007-08-17T02:27:35
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Wolfgang Sourdeau
2007-08-17 02:27:35 +00:00
parent c8b198b345
commit debb2b6ffa
3 changed files with 62 additions and 19 deletions

View File

@@ -1,5 +1,13 @@
2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
cache the mailbox acl.
([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
acl cache.
([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
the new method of determining the users mail accounts.
* SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
longer adds a "/" at the end of the string (the default for
folders), therefore this will be overriden in SOGoMailFolder

View File

@@ -40,6 +40,7 @@
{
NSMutableArray *filenames;
NSString *folderType;
NSDictionary *mailboxACL;
}
/* messages */

View File

@@ -85,6 +85,7 @@ static BOOL useAltNamespace = NO;
inContainer: newContainer]))
{
[self _adjustOwner];
mailboxACL = nil;
}
return self;
@@ -94,6 +95,7 @@ static BOOL useAltNamespace = NO;
{
[filenames release];
[folderType release];
[mailboxACL release];
[super dealloc];
}
@@ -104,6 +106,17 @@ static BOOL useAltNamespace = NO;
return [nameInContainer substringFromIndex: 6];
}
- (NSMutableString *) imap4URLString
{
NSMutableString *urlString;
urlString = [super imap4URLString];
[urlString appendString: @"/"];
return urlString;
}
/* listing the available folders */
- (NSArray *) toManyRelationshipKeys
@@ -179,22 +192,22 @@ static BOOL useAltNamespace = NO;
sortOrdering: (id) _so
{
/* seems to return an NSArray of NSNumber's */
return [[self imap4Connection] fetchUIDsInURL:[self imap4URL]
qualifier:_q sortOrdering:_so];
return [[self imap4Connection] fetchUIDsInURL: [self imap4URL]
qualifier: _q sortOrdering: _so];
}
- (NSArray *) fetchUIDs: (NSArray *) _uids
parts: (NSArray *) _parts
{
return [[self imap4Connection] fetchUIDs:_uids inURL:[self imap4URL]
parts:_parts];
return [[self imap4Connection] fetchUIDs: _uids inURL: [self imap4URL]
parts: _parts];
}
- (NSException *) postData: (NSData *) _data
flags: (id) _flags
{
return [[self imap4Connection] postData:_data flags:_flags
toFolderURL:[self imap4URL]];
return [[self imap4Connection] postData: _data flags: _flags
toFolderURL: [self imap4URL]];
}
- (NSException *) expunge
@@ -460,14 +473,22 @@ static BOOL useAltNamespace = NO;
return imapAcls;
}
- (void) _readMailboxACL
{
mailboxACL
= [[self imap4Connection] aclForMailboxAtURL: [self imap4URL]];
[mailboxACL retain];
}
- (NSArray *) aclUsers
{
NSArray *users;
NSDictionary *imapAcls;
imapAcls = [[self imap4Connection] aclForMailboxAtURL: [self imap4URL]];
if ([imapAcls isKindOfClass: [NSDictionary class]])
users = [imapAcls allKeys];
if (!mailboxACL)
[self _readMailboxACL];
if ([mailboxACL isKindOfClass: [NSDictionary class]])
users = [mailboxACL allKeys];
else
users = nil;
@@ -506,17 +527,19 @@ static BOOL useAltNamespace = NO;
- (NSArray *) aclsForUser: (NSString *) uid
{
NSDictionary *imapAcls;
NSMutableArray *acls;
NSString *userAcls;
acls = [self _sharesACLs];
imapAcls = [[self imap4Connection] aclForMailboxAtURL: [self imap4URL]];
if ([imapAcls isKindOfClass: [NSDictionary class]])
if (!mailboxACL)
[self _readMailboxACL];
if ([mailboxACL isKindOfClass: [NSDictionary class]])
{
userAcls = [imapAcls objectForKey: uid];
userAcls = [mailboxACL objectForKey: uid];
if (!([userAcls length] || [uid isEqualToString: defaultUserID]))
userAcls = [imapAcls objectForKey: defaultUserID];
userAcls = [mailboxACL objectForKey: defaultUserID];
if ([userAcls length])
[acls addObjectsFromArray: [self _imapAclsToSOGoAcls: userAcls]];
}
@@ -541,6 +564,8 @@ static BOOL useAltNamespace = NO;
[client deleteACL: folderName uid: currentUID];
currentUID = [uids nextObject];
}
[mailboxACL release];
mailboxACL = nil;
}
- (void) setRoles: (NSArray *) roles
@@ -551,6 +576,9 @@ static BOOL useAltNamespace = NO;
acls = [self _sogoAclsToImapAcls: roles];
folderName = [[self imap4Connection] imap4FolderNameForURL: [self imap4URL]];
[[imap4 client] setACL: folderName rights: acls uid: uid];
[mailboxACL release];
mailboxACL = nil;
}
- (NSString *) defaultUserID
@@ -592,14 +620,20 @@ static BOOL useAltNamespace = NO;
{
SOGoUser *user;
NSString *otherUsersPath, *url;
SOGoMailAccount *thisAccount;
NSDictionary *mailAccount;
user = [SOGoUser userWithLogin: uid roles: nil];
otherUsersPath = [self otherUsersPathToFolder];
if (otherUsersPath)
url = [NSString stringWithFormat: @"%@/%@%@",
[self soURLToBaseContainerForUser: uid],
[user primaryIMAP4AccountString],
otherUsersPath];
{
thisAccount = [self mailAccountFolder];
mailAccount = [[user mailAccounts] objectAtIndex: 0];
url = [NSString stringWithFormat: @"%@/%@%@",
[self soURLToBaseContainerForUser: uid],
[mailAccount objectForKey: @"name"],
otherUsersPath];
}
else
url = nil;