From ebe9c0f4532f0b0fae6d13df66fda9814b7e4d89 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 3 Jul 2009 19:46:01 +0000 Subject: [PATCH] Monotone-Parent: 300b960b99af9d890f03b4a72f3a63164c19b44c Monotone-Revision: eba51f48761a50897d61f4fffe1e4122f78c7a2d Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2009-07-03T19:46:01 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 4 + NEWS | 3 + UI/Scheduler/UIxCalListingActions.m | 110 +++++++++++++++++----------- 3 files changed, 74 insertions(+), 43 deletions(-) diff --git a/ChangeLog b/ChangeLog index 20f93e2b9..65f8b33d5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2009-07-03 Wolfgang Sourdeau + * UI/Scheduler/UIxCalListingActions.m (-eventsBlocksAction): added + sanity checks to avoid crashes when quick fields were wrongly + parsed. + * SoObjects/SOGo/LDAPUserManager.m (_fillContactMailRecords:): if the user uid contains a "@", we set it directly as system email rather than suffixing it with the default mail domain. diff --git a/NEWS b/NEWS index 4cf93f666..7667b6807 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,9 @@ - improved the attendees modification dialog by implementing slots management and zooming - added the capability to display the size of messages in the mail module - added the capability of limiting the number of returned events from DAV requests +- added support for Cyrus Daboo's Webdav sync draft spec in the calendar and addressbook collections +- added unicode support in the IMAP folder names +- fixed some issues with the conversion of folder names in modified UTF-7 1.0-20090605 (1.0.2) -------------------- diff --git a/UI/Scheduler/UIxCalListingActions.m b/UI/Scheduler/UIxCalListingActions.m index 006dee5dd..5ab6d1cf5 100644 --- a/UI/Scheduler/UIxCalListingActions.m +++ b/UI/Scheduler/UIxCalListingActions.m @@ -37,6 +37,7 @@ #import #import +#import #import #import @@ -591,59 +592,82 @@ _userStateInEvent (NSArray *event) withEvent: (NSArray *) event withNumber: (NSNumber *) number { - unsigned int currentDayStart, startSecs, endsSecs, currentStart, eventStart, + int currentDayStart, startSecs, endsSecs, currentStart, eventStart, eventEnd, offset, recurrenceTime; NSMutableArray *currentDay; NSMutableDictionary *eventBlock; iCalPersonPartStat userState; - startSecs = (unsigned int) [startDate timeIntervalSince1970]; - endsSecs = (unsigned int) [endDate timeIntervalSince1970]; - eventStart = [[event objectAtIndex: 4] unsignedIntValue]; - eventEnd = [[event objectAtIndex: 5] unsignedIntValue]; - - if ([[event objectAtIndex: 12] boolValue]) // c_iscycle - recurrenceTime = [[event objectAtIndex: 14] unsignedIntValue]; // c_recurrence_id + eventStart = [[event objectAtIndex: 4] intValue]; + if (eventStart < 0) + [self errorWithFormat: @"event '%@' has negative start: %d (skipped)", + [event objectAtIndex: 0], eventStart]; else - recurrenceTime = 0; - - currentStart = eventStart; - if (currentStart < startSecs) { - currentStart = startSecs; - offset = 0; - } - else - offset = ((currentStart - startSecs) - / dayLength); - currentDay = [blocks objectAtIndex: offset]; - currentDayStart = startSecs + dayLength * offset; + eventEnd = [[event objectAtIndex: 5] intValue]; + if (eventEnd < 0) + [self errorWithFormat: @"event '%@' has negative end: %d (skipped)", + [event objectAtIndex: 0], eventEnd]; + else + { + if (eventEnd < eventStart) + [self warnWithFormat: @"event '%@' has end < start: %d < %d", + [event objectAtIndex: 0], eventEnd, eventStart]; - if (eventEnd > endsSecs) - eventEnd = endsSecs; + startSecs = (unsigned int) [startDate timeIntervalSince1970]; + endsSecs = (unsigned int) [endDate timeIntervalSince1970]; - userState = _userStateInEvent (event); - while (currentDayStart + dayLength < eventEnd) - { - eventBlock = [self _eventBlockWithStart: currentStart - end: currentDayStart + dayLength - 1 - number: number - onDay: currentDayStart - recurrenceTime: recurrenceTime - userState: userState]; - [currentDay addObject: eventBlock]; - currentDayStart += dayLength; - currentStart = currentDayStart; - offset++; - currentDay = [blocks objectAtIndex: offset]; + if ([[event objectAtIndex: 12] boolValue]) // c_iscycle + recurrenceTime = [[event objectAtIndex: 14] unsignedIntValue]; // c_recurrence_id + else + recurrenceTime = 0; + + currentStart = eventStart; + if (currentStart < startSecs) + { + currentStart = startSecs; + offset = 0; + } + else + offset = ((currentStart - startSecs) + / dayLength); + if (offset >= [blocks count]) + [self errorWithFormat: "event '%@' has a computed offset that" + @" overflows the amount of blocks (skipped)", + [event objectAtIndex: 0]]; + else + { + currentDay = [blocks objectAtIndex: offset]; + currentDayStart = startSecs + dayLength * offset; + + if (eventEnd > endsSecs) + eventEnd = endsSecs; + + userState = _userStateInEvent (event); + while (currentDayStart + dayLength < eventEnd) + { + eventBlock = [self _eventBlockWithStart: currentStart + end: currentDayStart + dayLength - 1 + number: number + onDay: currentDayStart + recurrenceTime: recurrenceTime + userState: userState]; + [currentDay addObject: eventBlock]; + currentDayStart += dayLength; + currentStart = currentDayStart; + offset++; + currentDay = [blocks objectAtIndex: offset]; + } + eventBlock = [self _eventBlockWithStart: currentStart + end: eventEnd + number: number + onDay: currentDayStart + recurrenceTime: recurrenceTime + userState: userState]; + [currentDay addObject: eventBlock]; + } + } } - eventBlock = [self _eventBlockWithStart: currentStart - end: eventEnd - number: number - onDay: currentDayStart - recurrenceTime: recurrenceTime - userState: userState]; - [currentDay addObject: eventBlock]; } - (void) _prepareEventBlocks: (NSMutableArray **) blocks