Monotone-Parent: fc73a7910531c479a442d9feae0af3acaaebaa52

Monotone-Revision: a74b906d58327f02724a366df126c83b4bdcc4c9

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2008-09-02T02:48:18
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Wolfgang Sourdeau 2008-09-02 02:48:18 +00:00
parent 95643f0e3a
commit 95ec0e4a19

View file

@ -87,7 +87,8 @@ static BOOL forceImapLoginWithEmail = NO;
if (sourceID)
[sources setObject: ldapSource forKey: sourceID];
else
NSLog(@"LDAPUserManager.m: WARNING: id field missing in a LDAP source, check the SOGoLDAPSources default");
[self errorWithFormat: @"id field missing in a LDAP source,"
@" check the SOGoLDAPSources defaults"];
metadata = [NSMutableDictionary dictionary];
value = [udSource objectForKey: @"canAuthenticate"];
if (value)
@ -121,6 +122,7 @@ static BOOL forceImapLoginWithEmail = NO;
- (id) init
{
NSUserDefaults *ud;
NSString *cleanupSetting;
if ((self = [super init]))
{
@ -129,14 +131,24 @@ static BOOL forceImapLoginWithEmail = NO;
sources = nil;
sourcesMetadata = nil;
users = [NSMutableDictionary new];
cleanupInterval
= [ud integerForKey: @"SOGoLDAPUserManagerCleanupInterval"];
if (cleanupInterval)
cleanupTimer = [NSTimer scheduledTimerWithTimeInterval: cleanupInterval
target: self
selector: @selector(cleanupSources)
userInfo: nil
repeats: YES];
cleanupSetting
= [ud objectForKey: @"SOGoLDAPUserManagerCleanupInterval"];
if (cleanupSetting)
cleanupInterval = [cleanupSetting doubleValue];
else
cleanupInterval = 0.0;
if (cleanupInterval > 0.0)
{
cleanupTimer = [NSTimer scheduledTimerWithTimeInterval: cleanupInterval
target: self
selector: @selector (_cleanupSources)
userInfo: nil
repeats: YES];
[self logWithFormat: @"cleanup interval set every %f seconds",
cleanupInterval];
}
else
[self logWithFormat: @"no cleanup interval set: memory usage will grow"];
[self _prepareLDAPSourcesWithDefaults: ud];
}
@ -384,12 +396,8 @@ static BOOL forceImapLoginWithEmail = NO;
if (key)
[users setObject: newUser forKey: key];
emails = [[newUser objectForKey: @"emails"] objectEnumerator];
key = [emails nextObject];
while (key)
{
[users setObject: newUser forKey: key];
key = [emails nextObject];
}
while ((key = [emails nextObject]))
[users setObject: newUser forKey: key];
}
- (NSDictionary *) contactInfosForUserWithUIDorEmail: (NSString *) uid
@ -532,22 +540,32 @@ static BOOL forceImapLoginWithEmail = NO;
matching: filter];
}
- (void) cleanupSources
- (void) _cleanupSources
{
NSEnumerator *userIDs;
NSString *currentID;
NSDictionary *currentUser;
NSDate *now;
unsigned int count;
now = [NSDate date];
count = 0;
userIDs = [[users allKeys] objectEnumerator];
while ((currentID = [userIDs nextObject]))
{
currentUser = [users objectForKey: currentID];
if ([now earlierDate:
[currentUser objectForKey: @"cleanupDate"]] == now)
[users removeObjectForKey: currentID];
{
[users removeObjectForKey: currentID];
count++;
}
}
if (count)
[self logWithFormat: @"cleaned %d users records from cache", count];
}
@end