sogo/SoObjects/Appointments/iCalCalendar+SOGo.m

102 lines
2.6 KiB
Objective-C

/* iCalCalendar+SOGo.m - this file is part of SOGo
*
* Copyright (C) 2012-2014 Inverse inc
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#import <Foundation/NSArray.h>
#import <Foundation/NSCalendarDate.h>
#import <Foundation/NSString.h>
#import <NGCards/iCalRepeatableEntityObject.h>
#import "iCalCalendar+SOGo.h"
@implementation iCalCalendar (SOGoExtensions)
- (id) _occurrence: (NSString *) recID
inArray: (NSArray *) components
{
id occurrence;
iCalRepeatableEntityObject *component;
NSUInteger count, max, seconds, recSeconds;
occurrence = nil;
seconds = [recID intValue];
max = [components count];
/* master occurrence */
component = [components objectAtIndex: 0];
if ([component hasRecurrenceRules])
{
count = 1; // skip master event
while (!occurrence && count < max)
{
component = [components objectAtIndex: count];
recSeconds = [[component recurrenceId] timeIntervalSince1970];
if (recSeconds == seconds)
occurrence = component;
else
count++;
}
}
else
{
/* The "master" event could be that occurrence. */
recSeconds = [[component recurrenceId] timeIntervalSince1970];
if (recSeconds == seconds)
occurrence = component;
}
return occurrence;
}
- (iCalEvent *) eventWithRecurrenceID: (NSString *) recID
{
return [self _occurrence: recID inArray: [self events]];
}
- (iCalToDo *) todoWithRecurrenceID: (NSString *) recID;
{
return [self _occurrence: recID inArray: [self todos]];
}
- (NSMutableDictionary *) quickRecordForContainer: (id) theContainer
{
CardGroup *element;
NSArray *elements;
unsigned int count;
elements = [self allObjects];
count = [elements count];
if (count)
element = [elements objectAtIndex: 0];
else
{
[self logWithFormat: @"ERROR: given calendar contains no elements: %@", self];
element = nil;
}
return [element quickRecordForContainer: theContainer];
}
@end