merge of '792193186b20895dc235fa98dc63de1a0ece0a8f'

and 'bac00846545ecbaa355017083f8a425f751077c7'

Monotone-Parent: 792193186b20895dc235fa98dc63de1a0ece0a8f
Monotone-Parent: bac00846545ecbaa355017083f8a425f751077c7
Monotone-Revision: 04f60742d08acd7e35bf71da06a72013e783118c

Monotone-Author: flachapelle@inverse.ca
Monotone-Date: 2008-12-19T22:14:37
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Francis Lachapelle 2008-12-19 22:14:37 +00:00
commit a621eae38f
11 changed files with 131 additions and 43 deletions

View File

@ -8,6 +8,13 @@
-recurrenceRangesWithinCalendarDateRange:_r]): idem. Also fixed -recurrenceRangesWithinCalendarDateRange:_r]): idem. Also fixed
the handling of intervals. the handling of intervals.
2008-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/Common/UIxPageFrame.m ([UIxPageFrame -userSettings]): new
accessor method to avoid loading the user settings with an
additional json request.
([UIxPageFrame -userDefaults]): same as above for user defaults.
2008-12-17 Wolfgang Sourdeau <wsourdeau@inverse.ca> 2008-12-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder

View File

@ -46,7 +46,8 @@
*/ */
#if defined(THREADSAFE) #if defined(THREADSAFE)
static NSLock *lock; static NSLock *channelLock;
static NSLock *adaptorLock;
#endif #endif
@interface GCSChannelHandle : NSObject @interface GCSChannelHandle : NSObject
@ -89,7 +90,8 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60;
ChannelCollectionTimer = 5*60; ChannelCollectionTimer = 5*60;
#if defined(THREADSAFE) #if defined(THREADSAFE)
lock = [NSLock new]; channelLock = [NSLock new];
adaptorLock = [NSLock new];
#endif #endif
} }
@ -104,12 +106,12 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60;
static GCSChannelManager *cm = nil; static GCSChannelManager *cm = nil;
#if defined(THREADSAFE) #if defined(THREADSAFE)
[lock lock]; [channelLock lock];
#endif #endif
if (!cm) if (!cm)
cm = [self new]; cm = [self new];
#if defined(THREADSAFE) #if defined(THREADSAFE)
[lock unlock]; [channelLock unlock];
#endif #endif
return cm; return cm;
@ -125,7 +127,7 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60;
gcTimer = [[NSTimer scheduledTimerWithTimeInterval: gcTimer = [[NSTimer scheduledTimerWithTimeInterval:
ChannelCollectionTimer ChannelCollectionTimer
target: self selector: @selector (_garbageCollect: ) target: self selector: @selector (_garbageCollect:)
userInfo: nil repeats: YES] retain]; userInfo: nil repeats: YES] retain];
} }
@ -200,7 +202,7 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60;
if ((key = [self databaseKeyForURL: _url])) if ((key = [self databaseKeyForURL: _url]))
{ {
#if defined(THREADSAFE) #if defined(THREADSAFE)
[lock lock]; [adaptorLock lock];
#endif #endif
adaptor = [urlToAdaptor objectForKey: key]; adaptor = [urlToAdaptor objectForKey: key];
if (adaptor) if (adaptor)
@ -209,7 +211,7 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60;
{ {
[self debugWithFormat: @"creating new adaptor for URL: %@", _url]; [self debugWithFormat: @"creating new adaptor for URL: %@", _url];
if ([EOAdaptor respondsToSelector: @selector (adaptorForURL: )]) if ([EOAdaptor respondsToSelector: @selector (adaptorForURL:)])
adaptor = [EOAdaptor adaptorForURL: _url]; adaptor = [EOAdaptor adaptorForURL: _url];
else else
{ {
@ -234,7 +236,7 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60;
[urlToAdaptor setObject: adaptor forKey: key]; [urlToAdaptor setObject: adaptor forKey: key];
} }
#if defined(THREADSAFE) #if defined(THREADSAFE)
[lock unlock]; [adaptorLock unlock];
#endif #endif
} }
} }
@ -317,7 +319,7 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60;
/* look for cached handles */ /* look for cached handles */
#if defined(THREADSAFE) #if defined(THREADSAFE)
[lock lock]; [channelLock lock];
#endif #endif
handle = [self findAvailChannelHandleForURL: _url]; handle = [self findAvailChannelHandleForURL: _url];
if (handle) if (handle)
@ -364,7 +366,7 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60;
} }
} }
#if defined(THREADSAFE) #if defined(THREADSAFE)
[lock unlock]; [channelLock unlock];
#endif #endif
return channel; return channel;
@ -375,7 +377,7 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60;
GCSChannelHandle *handle; GCSChannelHandle *handle;
#if defined(THREADSAFE) #if defined(THREADSAFE)
[lock lock]; [channelLock lock];
#endif #endif
handle = [self findBusyChannelHandleForChannel: _channel]; handle = [self findBusyChannelHandleForChannel: _channel];
if (handle) if (handle)
@ -411,7 +413,7 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60;
[_channel release]; [_channel release];
} }
#if defined(THREADSAFE) #if defined(THREADSAFE)
[lock unlock]; [channelLock unlock];
#endif #endif
} }
@ -462,7 +464,7 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60;
GCSChannelHandle *handle; GCSChannelHandle *handle;
#if defined(THREADSAFE) #if defined(THREADSAFE)
[lock lock]; [channelLock lock];
#endif #endif
count = [availableChannels count]; count = [availableChannels count];
if (count) if (count)
@ -499,7 +501,7 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60;
[handlesToRemove release]; [handlesToRemove release];
} }
#if defined(THREADSAFE) #if defined(THREADSAFE)
[lock unlock]; [channelLock unlock];
#endif #endif
} }

View File

@ -22,6 +22,7 @@
#import <Foundation/NSArray.h> #import <Foundation/NSArray.h>
#import <Foundation/NSDictionary.h> #import <Foundation/NSDictionary.h>
#import <Foundation/NSLock.h>
#import <Foundation/NSString.h> #import <Foundation/NSString.h>
#import <Foundation/NSUserDefaults.h> #import <Foundation/NSUserDefaults.h>
@ -41,6 +42,10 @@ static NSString *LDAPContactInfoAttribute = nil;
static int timeLimit; static int timeLimit;
static int sizeLimit; static int sizeLimit;
#if defined(THREADSAFE)
static NSLock *lock;
#endif
@implementation LDAPSource @implementation LDAPSource
+ (void) initialize + (void) initialize
@ -126,6 +131,10 @@ static int sizeLimit;
@"calFBURL", @"proxyAddresses", @"calFBURL", @"proxyAddresses",
nil]; nil];
[commonSearchFields retain]; [commonSearchFields retain];
#if defined(THREADSAFE)
lock = [NSLock new];
#endif
} }
} }
@ -312,6 +321,10 @@ static int sizeLimit;
NSString *userDN; NSString *userDN;
NGLdapConnection *bindConnection; NGLdapConnection *bindConnection;
#if defined(THREADSAFE)
[lock lock];
#endif
didBind = NO; didBind = NO;
if ([loginToCheck length] > 0) if ([loginToCheck length] > 0)
@ -337,6 +350,10 @@ static int sizeLimit;
[bindConnection release]; [bindConnection release];
} }
#if defined(THREADSAFE)
[lock unlock];
#endif
return didBind; return didBind;
} }
@ -431,6 +448,10 @@ static int sizeLimit;
NGLdapEntry *currentEntry; NGLdapEntry *currentEntry;
NSString *value; NSString *value;
#if defined(THREADSAFE)
[lock lock];
#endif
ids = [NSMutableArray array]; ids = [NSMutableArray array];
if ([self _initLDAPConnection]) if ([self _initLDAPConnection])
@ -455,6 +476,10 @@ static int sizeLimit;
[ldapConnection autorelease]; [ldapConnection autorelease];
#if defined(THREADSAFE)
[lock unlock];
#endif
return ids; return ids;
} }
@ -552,6 +577,10 @@ static int sizeLimit;
NGLdapEntry *currentEntry; NGLdapEntry *currentEntry;
NSEnumerator *entries; NSEnumerator *entries;
#if defined(THREADSAFE)
[lock lock];
#endif
contacts = [NSMutableArray array]; contacts = [NSMutableArray array];
if ([match length] > 0) if ([match length] > 0)
@ -571,6 +600,10 @@ static int sizeLimit;
[ldapConnection release]; [ldapConnection release];
} }
#if defined(THREADSAFE)
[lock unlock];
#endif
return contacts; return contacts;
} }
@ -579,6 +612,10 @@ static int sizeLimit;
NSDictionary *contactEntry; NSDictionary *contactEntry;
NGLdapEntry *ldapEntry; NGLdapEntry *ldapEntry;
#if defined(THREADSAFE)
[lock lock];
#endif
contactEntry = nil; contactEntry = nil;
if ([entryID length] > 0) if ([entryID length] > 0)
@ -597,6 +634,10 @@ static int sizeLimit;
[ldapConnection autorelease]; [ldapConnection autorelease];
} }
#if defined(THREADSAFE)
[lock unlock];
#endif
return contactEntry; return contactEntry;
} }
@ -607,6 +648,10 @@ static int sizeLimit;
NSEnumerator *entries; NSEnumerator *entries;
EOQualifier *qualifier; EOQualifier *qualifier;
#if defined(THREADSAFE)
[lock lock];
#endif
contactEntry = nil; contactEntry = nil;
if ([uid length] > 0) if ([uid length] > 0)
@ -628,6 +673,10 @@ static int sizeLimit;
[ldapConnection release]; [ldapConnection release];
} }
#if defined(THREADSAFE)
[lock unlock];
#endif
return contactEntry; return contactEntry;
} }

View File

@ -40,7 +40,7 @@ static BOOL defaultMailDomainIsConfigured = NO;
static BOOL forceImapLoginWithEmail = NO; static BOOL forceImapLoginWithEmail = NO;
#if defined(THREADSAFE) #if defined(THREADSAFE)
static NSLock *lock; static NSLock *lock = nil;
#endif #endif
@implementation LDAPUserManager @implementation LDAPUserManager
@ -134,13 +134,14 @@ static NSLock *lock;
udSources = [ud arrayForKey: @"SOGoLDAPSources"]; udSources = [ud arrayForKey: @"SOGoLDAPSources"];
if (udSources && [udSources isKindOfClass: [NSArray class]]) { if (udSources && [udSources isKindOfClass: [NSArray class]])
max = [udSources count]; {
for (count = 0; count < max; count++) max = [udSources count];
[self _registerSource: [udSources objectAtIndex: count]]; for (count = 0; count < max; count++)
} else { [self _registerSource: [udSources objectAtIndex: count]];
}
else
[self errorWithFormat: @"SOGoLDAPSources is not defined or it is not an array. Check your defaults."]; [self errorWithFormat: @"SOGoLDAPSources is not defined or it is not an array. Check your defaults."];
}
} }
- (id) init - (id) init

View File

@ -244,9 +244,7 @@ _timeValue (NSString *key)
LDAPUserManager *um; LDAPUserManager *um;
NSString *realUID; NSString *realUID;
if (// acceptAnyUser if ([newLogin isEqualToString: @"anonymous"]
// ||
[newLogin isEqualToString: @"anonymous"]
|| [newLogin isEqualToString: @"freebusy"]) || [newLogin isEqualToString: @"freebusy"])
realUID = newLogin; realUID = newLogin;
else else

View File

@ -397,6 +397,34 @@
return language; return language;
} }
- (NSString *) userSettings
{
NSUserDefaults *userSettings;
NSString *jsonResult;
userSettings = [[context activeUser] userSettings];
if (userSettings)
jsonResult = [userSettings jsonRepresentation];
else
jsonResult = @"{}";
return jsonResult;
}
- (NSString *) userDefaults
{
NSUserDefaults *userDefaults;
NSString *jsonResult;
userDefaults = [[context activeUser] userDefaults];
if (userDefaults)
jsonResult = [userDefaults jsonRepresentation];
else
jsonResult = @"{}";
return jsonResult;
}
/* browser/os identification */ /* browser/os identification */
- (BOOL) isCompatibleBrowser - (BOOL) isCompatibleBrowser

View File

@ -88,6 +88,12 @@
categories = { categories = {
SOGo = { // TODO: move decls to class SOGo = { // TODO: move decls to class
slots = {
toolbar = {
value = "none"; // keep this in order to avoid lookups on username
// "toolbar"
};
};
methods = { methods = {
view = { view = {
protectedBy = "<public>"; protectedBy = "<public>";

View File

@ -108,9 +108,11 @@
</var:if> </var:if>
<var:if condition="shortUserNameForDisplay" const:value="anonymous" <var:if condition="shortUserNameForDisplay" const:value="anonymous"
const:negate="YES" const:negate="YES"
>var UserFolderURL = '<var:string value="userFolderPath" />'; >var UserFolderURL = '<var:string value="userFolderPath" const:escapeHTML="NO"/>';
var UserLogin = '<var:string value="shortUserNameForDisplay" />'; var UserLogin = '<var:string value="shortUserNameForDisplay" const:escapeHTML="NO"/>';
var UserLanguage = '<var:string value="userLanguage" />';</var:if> var UserLanguage = '<var:string value="userLanguage" const:escapeHTML="NO"/>';
var UserSettings = <var:string value="userSettings" const:escapeHTML="NO"/>;
var UserDefaults = <var:string value="userDefaults" const:escapeHTML="NO"/>;</var:if>
<var:string value="commonLocalizableStrings" const:escapeHTML="NO"/> <var:string value="commonLocalizableStrings" const:escapeHTML="NO"/>
<var:string value="productLocalizableStrings" const:escapeHTML="NO"/> <var:string value="productLocalizableStrings" const:escapeHTML="NO"/>
</script> </script>

View File

@ -583,7 +583,7 @@ function messageListCallback(http) {
var div = $('mailboxContent'); var div = $('mailboxContent');
var table = $('messageList'); var table = $('messageList');
var columnsOrder = userSettings["SOGoMailListViewColumnsOrder"]; var columnsOrder = UserSettings["SOGoMailListViewColumnsOrder"];
if ( typeof(columnsOrder) == "undefined" ) { if ( typeof(columnsOrder) == "undefined" ) {
columnsOrder = defaultColumnsOrder; columnsOrder = defaultColumnsOrder;
} }
@ -1363,7 +1363,7 @@ function configureMessageListBodyEvents(table) {
// 4 => Unread // 4 => Unread
// 5 => Date // 5 => Date
// 6 => Priority // 6 => Priority
var columnsOrder = userSettings["SOGoMailListViewColumnsOrder"]; var columnsOrder = UserSettings["SOGoMailListViewColumnsOrder"];
if ( typeof(columnsOrder) == "undefined" ) { if ( typeof(columnsOrder) == "undefined" ) {
columnsOrder = defaultColumnsOrder; columnsOrder = defaultColumnsOrder;
} }
@ -1474,7 +1474,7 @@ function initMailer(event) {
} }
function initMessageCheckTimer() { function initMessageCheckTimer() {
var messageCheck = userDefaults["MessageCheck"]; var messageCheck = UserDefaults["MessageCheck"];
if (messageCheck && messageCheck != "manually") { if (messageCheck && messageCheck != "manually") {
var interval; var interval;
if (messageCheck == "once_per_hour") if (messageCheck == "once_per_hour")

View File

@ -312,7 +312,7 @@ function onTextIEUpdateCursorPos(event) {
function onTextFirstFocus() { function onTextFirstFocus() {
var content = this.getValue(); var content = this.getValue();
var replyPlacement = userDefaults["ReplyPlacement"]; var replyPlacement = UserDefaults["ReplyPlacement"];
if (replyPlacement == "above") { if (replyPlacement == "above") {
this.insertBefore(document.createTextNode("\r\r"), this.lastChild); this.insertBefore(document.createTextNode("\r\r"), this.lastChild);
@ -547,7 +547,7 @@ function initMailEditor() {
if (sigLimit > -1) if (sigLimit > -1)
MailEditor.signatureLength = (textContent.length - sigLimit); MailEditor.signatureLength = (textContent.length - sigLimit);
} }
if (userDefaults["ReplyPlacement"] != "above") { if (UserDefaults["ReplyPlacement"] != "above") {
textarea.scrollTop = textarea.scrollHeight; textarea.scrollTop = textarea.scrollHeight;
} }
textarea.observe("focus", onTextFirstFocus); textarea.observe("focus", onTextFirstFocus);
@ -655,7 +655,7 @@ function lineBreakCount(str){
function hasSignature() { function hasSignature() {
try { try {
return(userDefaults.MailAccounts[0].identities[0].signature.length > 0); return(UserDefaults.MailAccounts[0].identities[0].signature.length > 0);
} catch(e) { } catch(e) {
return false; return false;
} }

View File

@ -38,9 +38,6 @@ var lastClickedRow = -1;
// logArea = null; // logArea = null;
var allDocumentElements = null; var allDocumentElements = null;
var userDefaults = null;
var userSettings = null;
// Ajax requests counts // Ajax requests counts
var activeAjaxRequests = 0; var activeAjaxRequests = 0;
var removeFolderRequestCount = 0; var removeFolderRequestCount = 0;
@ -1402,7 +1399,7 @@ function indexColor(number) {
return color; return color;
} }
function loadPreferences() { function reloadPreferences() {
var url = UserFolderURL + "jsonDefaults"; var url = UserFolderURL + "jsonDefaults";
var http = createHTTPClient(); var http = createHTTPClient();
http.open("GET", url, false); http.open("GET", url, false);
@ -1410,9 +1407,9 @@ function loadPreferences() {
if (http.status == 200) { if (http.status == 200) {
if (http.responseText.length > 0) if (http.responseText.length > 0)
userDefaults = http.responseText.evalJSON(true); UserDefaults = http.responseText.evalJSON(true);
else else
userDefaults = {}; UserDefaults = {};
} }
url = UserFolderURL + "jsonSettings"; url = UserFolderURL + "jsonSettings";
@ -1420,15 +1417,13 @@ function loadPreferences() {
http.send(""); http.send("");
if (http.status == 200) { if (http.status == 200) {
if (http.responseText.length > 0) if (http.responseText.length > 0)
userSettings = http.responseText.evalJSON(true); UserSettings = http.responseText.evalJSON(true);
else else
userSettings = {}; UserSettings = {};
} }
} }
function onLoadHandler(event) { function onLoadHandler(event) {
if (typeof UserLogin != "undefined" && UserLogin != "wrongusernamepassword")
loadPreferences();
queryParameters = parseQueryParameters('' + window.location); queryParameters = parseQueryParameters('' + window.location);
if (!$(document.body).hasClassName("popup")) { if (!$(document.body).hasClassName("popup")) {
initLogConsole(); initLogConsole();