merge of '266b8dcd5d7d2b3c6b6169c2f706feae1b725e7b'

and 'a1fec97888a28b21f11c4743a65a09fe028bf771'

Monotone-Parent: 266b8dcd5d7d2b3c6b6169c2f706feae1b725e7b
Monotone-Parent: a1fec97888a28b21f11c4743a65a09fe028bf771
Monotone-Revision: ab2ff65d5c716a5cd610c720b705af5e768a77c0

Monotone-Author: flachapelle@inverse.ca
Monotone-Date: 2009-07-07T21:15:56
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Francis Lachapelle
2009-07-07 21:15:56 +00:00
3 changed files with 79 additions and 40 deletions
+12
View File
@@ -1,3 +1,15 @@
2009-07-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/Appointments/SOGoAppointmentFolder.m
(-additionalWebdavSyncFilters): overriden method for returning a
clause that takes the DAV time limit into account.
* SoObjects/SOGo/SOGoGCSFolder.m (-davSyncCollection:): added the
ability to specify additional filters for elements that must be
returned.
(-additionalWebdavSyncFilters): new method that returns a
parametrable where clause for reset queries.
2009-07-07 Cyril Robert <crobert@inverse.ca>
* UI/WebServerResources/MailerUI.js: Fixed Drag&Drop issue (header was
+47 -33
View File
@@ -80,12 +80,14 @@
static NGLogger *logger = nil;
static NSNumber *sharedYes = nil;
static int davCalendarStartTimeLimit = 0;
+ (void) initialize
{
NGLoggerManager *lm;
static BOOL didInit = NO;
static BOOL didInit = NO;
NSUserDefaults *ud;
if (!didInit)
{
didInit = YES;
@@ -100,6 +102,10 @@ static NSNumber *sharedYes = nil;
logger = [lm loggerForDefaultKey: @"SOGoAppointmentFolderDebugEnabled"];
sharedYes = [[NSNumber numberWithBool: YES] retain];
ud = [NSUserDefaults standardUserDefaults];
davCalendarStartTimeLimit
= [ud integerForKey: @"SOGoDAVCalendarStartTimeLimit"];
}
}
@@ -1219,28 +1225,17 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir
[r appendString: @"</D:href><D:status>HTTP/1.1 404 Not Found</D:status></D:response>"];
}
- (int) _getStartTimeLimit
{
NSUserDefaults *ud;
int interval;
ud = [NSUserDefaults standardUserDefaults];
interval = [ud integerForKey: @"SOGoDAVCalendarStartTimeLimit"];
return interval;
}
- (NSCalendarDate *) _getMaxStartDate
{
NSCalendarDate *tmp, *rc = NULL;
int interval;
interval = [self _getStartTimeLimit];
if (interval > 0)
NSCalendarDate *tmp, *rc;
if (davCalendarStartTimeLimit > 0)
{
tmp = [NSCalendarDate date];
rc = [tmp addTimeInterval: interval * -86400];
rc = [tmp addTimeInterval: davCalendarStartTimeLimit * -86400];
}
else
rc = nil;
return rc;
}
@@ -1248,40 +1243,39 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir
- (void) _enforceTimeLimitOnFilter: (NSMutableDictionary *) filter
{
NSCalendarDate *start, *end, *now;
int limit, interval, intervalStart, intervalEnd;
int interval, intervalStart, intervalEnd;
start = [filter objectForKey: @"start"];
end = [filter objectForKey: @"end"];
now = [NSCalendarDate date];
limit = [self _getStartTimeLimit];
interval = ([end timeIntervalSinceDate: start] / 86400);
if (limit > 0 && interval > limit)
if (davCalendarStartTimeLimit > 0 && interval > davCalendarStartTimeLimit)
{
if ([now compare: start] == NSOrderedDescending
&& [now compare: end] == NSOrderedAscending)
{
intervalStart = [now timeIntervalSinceDate: start] / 86400;
intervalEnd = [end timeIntervalSinceDate: now] / 86400;
if (intervalStart > limit / 2)
if (intervalStart > davCalendarStartTimeLimit / 2)
{
start = [now addTimeInterval: (limit / 2) * -86400];
start = [now addTimeInterval: (davCalendarStartTimeLimit / 2) * -86400];
[filter setObject: start forKey: @"start"];
}
if (intervalEnd > limit / 2)
if (intervalEnd > davCalendarStartTimeLimit / 2)
{
end = [now addTimeInterval: (limit / 2) * 86400];
end = [now addTimeInterval: (davCalendarStartTimeLimit / 2) * 86400];
[filter setObject: end forKey: @"end"];
}
}
else if ([now compare: end] == NSOrderedDescending)
{
start = [end addTimeInterval: limit * -86400];
start = [end addTimeInterval: davCalendarStartTimeLimit * -86400];
[filter setObject: start forKey: @"start"];
}
else if ([now compare: start] == NSOrderedAscending)
{
end = [start addTimeInterval: limit * 86400];
end = [start addTimeInterval: davCalendarStartTimeLimit * 86400];
[filter setObject: end forKey: @"end"];
}
}
@@ -1307,14 +1301,13 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir
- (void) _addDateRangeLimitToFilter: (NSMutableDictionary *) filter
{
NSCalendarDate *now;
int limit;
NSTimeInterval rangeLimit;
now = [NSCalendarDate date];
limit = [self _getStartTimeLimit];
[filter setObject: [now addTimeInterval: (limit / 2) * -86400]
rangeLimit = (davCalendarStartTimeLimit / 2) * -86400;
[filter setObject: [now addTimeInterval: rangeLimit]
forKey: @"start"];
[filter setObject: [now addTimeInterval: (limit / 2) * 86400]
[filter setObject: [now addTimeInterval: rangeLimit * -1]
forKey: @"end"];
}
@@ -1882,6 +1875,27 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir
return r;
}
- (NSString *) additionalWebdavSyncFilters
{
NSCalendarDate *startDate;
NSString *filter;
int startDateSecs;
startDate = [self _getMaxStartDate];
if (startDate)
{
startDateSecs = (int) [startDate timeIntervalSince1970];
filter = [NSString stringWithFormat: @"c_enddate = NULL"
@" OR (c_enddate >= %d AND c_iscycle = 0)"
@" OR (c_cycleenddate >= %d AND c_iscycle = 1)",
startDateSecs, startDateSecs];
}
else
filter = @"";
return filter;
}
- (Class) objectClassForContent: (NSString *) content
{
iCalCalendar *calendar;
+20 -7
View File
@@ -698,7 +698,7 @@ static NSArray *childRecordFields = nil;
tmpA = [moduleSettings objectForKey: @"InactiveFolders"];
if (tmpA)
[tmpA removeObject: [self nameInContainer]];
[tmpA removeObject: nameInContainer];
tmpD = [moduleSettings objectForKey: @"FolderSyncTags"];
if (tmpD)
@@ -881,6 +881,11 @@ static NSArray *childRecordFields = nil;
ignoreDeleted: ignoreDeleted];
}
- (NSString *) additionalWebdavSyncFilters
{
return @"";
}
- (NSArray *) _fetchSyncTokenFields: (NSDictionary *) properties
matchingSyncToken: (int) syncToken
{
@@ -893,7 +898,7 @@ static NSArray *childRecordFields = nil;
NSArray *records;
EOQualifier *qualifier;
NSEnumerator *addFields;
NSString *currentField;
NSString *currentField, *filter;
fields = [NSMutableArray arrayWithObjects: @"c_name", @"c_component",
@"c_creationdate", @"c_lastmodified", nil];
@@ -910,8 +915,8 @@ static NSArray *childRecordFields = nil;
withQualifier: qualifier
ignoreDeleted: YES]];
qualifier = [EOQualifier qualifierWithQualifierFormat:
@"c_lastmodified > %d and c_deleted == 1",
syncToken];
@"c_lastmodified > %d and c_deleted == 1",
syncToken];
fields = [NSMutableArray arrayWithObjects: @"c_name", @"c_deleted", nil];
[mRecords addObjectsFromArray: [self _fetchFields: fields
withQualifier: qualifier
@@ -919,8 +924,15 @@ static NSArray *childRecordFields = nil;
records = mRecords;
}
else
records = [self _fetchFields: fields withQualifier: nil
ignoreDeleted: YES];
{
filter = [self additionalWebdavSyncFilters];
if ([filter length])
qualifier = [EOQualifier qualifierWithQualifierFormat: filter];
else
qualifier = nil;
records = [self _fetchFields: fields withQualifier: qualifier
ignoreDeleted: YES];
}
return records;
}
@@ -1115,6 +1127,7 @@ static NSArray *childRecordFields = nil;
documentElement = (DOMElement *) [document documentElement];
syncToken = [[documentElement firstElementWithTag: @"sync-token"
inNamespace: XMLNS_WEBDAV] textValue];
propElement = [documentElement firstElementWithTag: @"prop"
inNamespace: XMLNS_WEBDAV];
@@ -1333,7 +1346,7 @@ static NSArray *childRecordFields = nil;
@" VALUES ('/%@', '%@', '%@')",
[folder aclTableName],
objectPath, uid, currentRole];
[channel evaluateExpressionX: SQL];
[channel evaluateExpressionX: SQL];
}
[[channel adaptorContext] commitTransaction];