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
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>
* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder

View File

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

View File

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

View File

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

View File

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

View File

@ -397,6 +397,34 @@
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 */
- (BOOL) isCompatibleBrowser

View File

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

View File

@ -108,9 +108,11 @@
</var:if>
<var:if condition="shortUserNameForDisplay" const:value="anonymous"
const:negate="YES"
>var UserFolderURL = '<var:string value="userFolderPath" />';
var UserLogin = '<var:string value="shortUserNameForDisplay" />';
var UserLanguage = '<var:string value="userLanguage" />';</var:if>
>var UserFolderURL = '<var:string value="userFolderPath" const:escapeHTML="NO"/>';
var UserLogin = '<var:string value="shortUserNameForDisplay" const:escapeHTML="NO"/>';
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="productLocalizableStrings" const:escapeHTML="NO"/>
</script>

View File

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

View File

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

View File

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