Monotone-Parent: f3830c65328146810871090fdfd037458b8d87af

Monotone-Revision: 37f12ad4f4daf31d2b81f43a8d21b5c4a53f4a1d

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2010-04-02T18:50:21
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2010-04-02 18:50:21 +00:00
parent 1a5a5fe13d
commit 95cdd86021
2 changed files with 36 additions and 31 deletions

View File

@ -1,3 +1,10 @@
2010-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/Scheduler/UIxCalListingActions.m
(_fillFreeBusy:forUid:fromDate:): fixed a crash occuring when the
length of an event would happen after the period covered by the
freebusy.
2010-04-02 Francis Lachapelle <flachapelle@inverse.ca>
* UI/WebServerResources/SchedulerUI.js (onClickableCellsDblClick):

View File

@ -64,13 +64,14 @@ static NSArray *eventsFields = nil;
static NSArray *tasksFields = nil;
#define dayLength 86400
#define quarterLength 900
#define intervalSeconds 900 // number of seconds in 15 minutes
#define offsetHours 24 * 5 // number of hours in invitation window
#define offsetSeconds offsetHours * 60 * 60 // number of seconds in invitation window
#define offsetBlocks offsetHours * 4 // number of 15-minute blocks in invitation window
#define maxBlocks offsetBlocks * 2 // maximum number of blocks to search for a free slot (10 days)
#define quarterLength 900 // number of seconds in 15 minutes
#define offsetHours (24 * 5) // number of hours in invitation window
#define offsetSeconds (offsetHours * 60 * 60) // number of seconds in
// invitation window
/* 1 block = 15 minutes */
#define offsetBlocks (offsetHours * 4) // number of 15-minute blocks in invitation window
#define maxBlocks (offsetBlocks * 2) // maximum number of blocks to search
// for a free slot (10 days)
@implementation UIxCalListingActions
@ -1076,24 +1077,20 @@ _computeBlocksPosition (NSArray *blocks)
SOGoUser *user;
SOGoFreeBusyObject *fbObject;
NSCalendarDate *end;
NSTimeInterval interval;
NSArray *records;
NSDictionary *record;
NSArray *emails, *partstates;
NSCalendarDate *currentDate;
unsigned int intervals, recordCount, recordMax;
unsigned int recordCount, recordMax;
int count, startInterval, endInterval, i, type;
int itemCount = (offsetBlocks + maxBlocks) * 15 * 60;
int itemCount = (offsetBlocks + maxBlocks);
user = [SOGoUser userWithLogin: uid roles: nil];
fbObject = [[user homeFolderInContext: context]
freeBusyObject: @"freebusy.ifb"
inContext: context];
user = [SOGoUser userWithLogin: uid];
fbObject
= [[user homeFolderInContext: context] freeBusyObject: @"freebusy.ifb"
inContext: context];
end = [start addTimeInterval: itemCount];
interval = [end timeIntervalSinceDate: start];// + 60;
intervals = interval / intervalSeconds; /* slices of 15 minutes */
end = [start addTimeInterval: (itemCount * quarterLength)];
records = [fbObject fetchFreeBusyInfosFrom: start to: end];
recordMax = [records count];
@ -1140,14 +1137,14 @@ _computeBlocksPosition (NSArray *blocks)
startInterval = 0;
else
startInterval = ([currentDate timeIntervalSinceDate: start]
/ intervalSeconds);
/ quarterLength);
currentDate = [record objectForKey: @"endDate"];
if ([currentDate earlierDate: end] == end)
endInterval = itemCount - 1;
else
endInterval = ([currentDate timeIntervalSinceDate: start]
/ intervalSeconds);
/ quarterLength);
if (type == 1)
for (count = startInterval; count < endInterval; count++)
@ -1160,15 +1157,16 @@ _computeBlocksPosition (NSArray *blocks)
- (unsigned int **) _loadFreeBusyForUsers: (NSArray *) uids
fromDate: (NSCalendarDate *) start
{
unsigned int **fbData, **node, count;
unsigned int **fbData, **node;
int count, max;
fbData = calloc ([uids count], sizeof (unsigned int *));
for (count = 0; count < [uids count]; count++)
max = [uids count];
fbData = calloc (max, sizeof (unsigned int *));
for (count = 0; count < max; count++)
{
fbData[count] = calloc (offsetBlocks + maxBlocks, sizeof (unsigned int *));
node = fbData + count;
[self _fillFreeBusy: *node
forUid: [uids objectAtIndex: count]
*node = calloc (offsetBlocks + maxBlocks, sizeof (unsigned int *));
[self _fillFreeBusy: *node forUid: [uids objectAtIndex: count]
fromDate: start];
}
@ -1349,11 +1347,11 @@ _computeBlocksPosition (NSArray *blocks)
nStart = [[self _parseDateField: @"startDate"
timeField: @"startTime"]
addTimeInterval: intervalSeconds * step];
addTimeInterval: quarterLength * step];
nEnd = [[self _parseDateField: @"endDate"
timeField: @"endTime"]
addTimeInterval: intervalSeconds * step];
blockDuration = [nEnd timeIntervalSinceDate: nStart] / intervalSeconds;
addTimeInterval: quarterLength * step];
blockDuration = [nEnd timeIntervalSinceDate: nStart] / quarterLength;
fbData = [self _loadFreeBusyForUsers: uids
fromDate: [nStart addTimeInterval: -offsetSeconds]];
@ -1380,8 +1378,8 @@ _computeBlocksPosition (NSArray *blocks)
break;
}
}
nStart = [nStart addTimeInterval: intervalSeconds * step];
nEnd = [nEnd addTimeInterval: intervalSeconds * step];
nStart = [nStart addTimeInterval: quarterLength * step];
nEnd = [nEnd addTimeInterval: quarterLength * step];
}
for (count = 0; count < [uids count]; count++)