diff --git a/ChangeLog b/ChangeLog index d6832731b..1c975a692 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-03-22 Wolfgang Sourdeau + + * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): cache the + language in an ivar again, that is reset when the user settings or + defaults have been loaded successfully. + ([SOGoUser -userDefaults]): invoke "fetchProfile" on the defaults + instance, in order to validate the DB connection. + 2009-03-21 Wolfgang Sourdeau * SoObjects/SOGo/SOGoUser.m ([SOGoUser diff --git a/SoObjects/SOGo/SOGoUser.h b/SoObjects/SOGo/SOGoUser.h index 384c4d478..5ee7088e4 100644 --- a/SoObjects/SOGo/SOGoUser.h +++ b/SoObjects/SOGo/SOGoUser.h @@ -64,7 +64,9 @@ extern NSString *SOGoWeekStartFirstFullWeek; @interface SOGoUser : SoUser { + SOGoUserFolder *homeFolder; NSString *currentPassword; + NSString *language; NSArray *allEmails; NSString *cn; } diff --git a/SoObjects/SOGo/SOGoUser.m b/SoObjects/SOGo/SOGoUser.m index 1abd7acf7..c1bbc03e9 100644 --- a/SoObjects/SOGo/SOGoUser.m +++ b/SoObjects/SOGo/SOGoUser.m @@ -459,20 +459,25 @@ _timeValue (NSString *key) defaults = [self primaryUserDefaults]; if (defaults) { - // Required parameters for the Web interface. This will trigger the - // preferences to load so it's important to leave those calls here. - if (![[defaults stringForKey: @"ReplyPlacement"] length]) - [defaults setObject: defaultReplyPlacement forKey: @"ReplyPlacement"]; - if (![[defaults stringForKey: @"SignaturePlacement"] length]) - [defaults setObject: defaultSignaturePlacement forKey: @"SignaturePlacement"]; - if (![[defaults stringForKey: @"MessageForwarding"] length]) - [defaults setObject: defaultMessageForwarding forKey: @"MessageForwarding"]; - if (![[defaults stringForKey: @"MessageCheck"] length]) - [defaults setObject: defaultMessageCheck forKey: @"MessageCheck"]; - + [defaults fetchProfile]; values = [defaults values]; + if (values) { + /* see explanation in -language */ + [language release]; + language = nil; + // Required parameters for the Web interface. This will trigger the + // preferences to load so it's important to leave those calls here. + if (![[defaults stringForKey: @"ReplyPlacement"] length]) + [defaults setObject: defaultReplyPlacement forKey: @"ReplyPlacement"]; + if (![[defaults stringForKey: @"SignaturePlacement"] length]) + [defaults setObject: defaultSignaturePlacement forKey: @"SignaturePlacement"]; + if (![[defaults stringForKey: @"MessageForwarding"] length]) + [defaults setObject: defaultMessageForwarding forKey: @"MessageForwarding"]; + if (![[defaults stringForKey: @"MessageCheck"] length]) + [defaults setObject: defaultMessageCheck forKey: @"MessageCheck"]; + // We propagate the loaded user defaults to other sogod instances // which will cache them in SOGoCache (including for the instance // that actually posts the notification) @@ -516,6 +521,9 @@ _timeValue (NSString *key) values = [settings values]; if (values) { + /* see explanation in -language */ + [language release]; + language = nil; // We propagate the loaded user settings to other sogod instances // which will cache them in SOGoCache (including for the instance // that actually posts the notification) @@ -542,11 +550,16 @@ _timeValue (NSString *key) - (NSString *) language { - NSString *language; - - language = [[self userDefaults] stringForKey: @"Language"]; if (![language length]) - language = [SOGoUser language]; + { + language = [[self userDefaults] stringForKey: @"Language"]; + if (![language length]) + language = [SOGoUser language]; + /* This is a hack until we handle the connection errors to the db a + better way. It enables us to avoid retrieving the userDefaults 5000 + times when the DB is down, causing a huge delay. */ + [language retain]; + } return language; } diff --git a/SoObjects/SOGo/SOGoUserDefaults.m b/SoObjects/SOGo/SOGoUserDefaults.m index 5008636d0..d7f916d2d 100644 --- a/SoObjects/SOGo/SOGoUserDefaults.m +++ b/SoObjects/SOGo/SOGoUserDefaults.m @@ -318,7 +318,7 @@ static NSString *uidColumnName = @"c_uid"; - (BOOL) fetchProfile { - return (values || [self primaryFetchProfile]); + return (values || [self primaryFetchProfile]); } - (NSString *) jsonRepresentation