diff --git a/WPI Calendar Event Creator.xcodeproj/project.pbxproj b/WPI Calendar Event Creator.xcodeproj/project.pbxproj index 86c488118feef4f284166652147e8fd5ad253312..c75cbd93d4f1b25ccdf46a557a841c82399a3e7e 100644 --- a/WPI Calendar Event Creator.xcodeproj/project.pbxproj +++ b/WPI Calendar Event Creator.xcodeproj/project.pbxproj @@ -375,6 +375,8 @@ C74BF58618E3BB4F00856171 /* tutorial6.png in Resources */ = {isa = PBXBuildFile; fileRef = C74BF58018E3BB4F00856171 /* tutorial6.png */; }; C74BF58718E3BB4F00856171 /* tutorial7.png in Resources */ = {isa = PBXBuildFile; fileRef = C74BF58118E3BB4F00856171 /* tutorial7.png */; }; C74BF58918E3BF3B00856171 /* tutorial0.png in Resources */ = {isa = PBXBuildFile; fileRef = C74BF58818E3BF3B00856171 /* tutorial0.png */; }; + C74BF58C18E4C1FC00856171 /* WPICalendarEventCreatorAppIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = C74BF58B18E4C1FC00856171 /* WPICalendarEventCreatorAppIcon.png */; }; + C74BF58E18E4C2F000856171 /* rsz_wpicalendareventcreatorappicon.png in Resources */ = {isa = PBXBuildFile; fileRef = C74BF58D18E4C2F000856171 /* rsz_wpicalendareventcreatorappicon.png */; }; C751D4DA18AB046600CFA0FF /* camesano-formal.jpg in Resources */ = {isa = PBXBuildFile; fileRef = C751D4D918AB046600CFA0FF /* camesano-formal.jpg */; }; C751D4DC18AB04B900CFA0FF /* clark-formal.jpg in Resources */ = {isa = PBXBuildFile; fileRef = C751D4DB18AB04B900CFA0FF /* clark-formal.jpg */; }; C751D4DE18AB04F500CFA0FF /* Ravi_Recent_rdax_161x179.jpg in Resources */ = {isa = PBXBuildFile; fileRef = C751D4DD18AB04F500CFA0FF /* Ravi_Recent_rdax_161x179.jpg */; }; @@ -890,6 +892,8 @@ C74BF58018E3BB4F00856171 /* tutorial6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial6.png; sourceTree = "<group>"; }; C74BF58118E3BB4F00856171 /* tutorial7.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial7.png; sourceTree = "<group>"; }; C74BF58818E3BF3B00856171 /* tutorial0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tutorial0.png; sourceTree = "<group>"; }; + C74BF58B18E4C1FC00856171 /* WPICalendarEventCreatorAppIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = WPICalendarEventCreatorAppIcon.png; sourceTree = "<group>"; }; + C74BF58D18E4C2F000856171 /* rsz_wpicalendareventcreatorappicon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = rsz_wpicalendareventcreatorappicon.png; sourceTree = "<group>"; }; C751D4D918AB046600CFA0FF /* camesano-formal.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "camesano-formal.jpg"; sourceTree = "<group>"; }; C751D4DB18AB04B900CFA0FF /* clark-formal.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "clark-formal.jpg"; sourceTree = "<group>"; }; C751D4DD18AB04F500CFA0FF /* Ravi_Recent_rdax_161x179.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = Ravi_Recent_rdax_161x179.jpg; sourceTree = "<group>"; }; @@ -1134,6 +1138,7 @@ 2C490FD01846A99B00440D04 /* Supporting Files */ = { isa = PBXGroup; children = ( + C74BF58A18E4C1EB00856171 /* Icons and Images */, 2C49103E1847043100440D04 /* preview.html */, 2C4910111846DA3500440D04 /* Model */, 2C490FD11846A99B00440D04 /* WPI Calendar Event Creator-Info.plist */, @@ -1748,6 +1753,15 @@ name = Tutorial; sourceTree = "<group>"; }; + C74BF58A18E4C1EB00856171 /* Icons and Images */ = { + isa = PBXGroup; + children = ( + C74BF58D18E4C2F000856171 /* rsz_wpicalendareventcreatorappicon.png */, + C74BF58B18E4C1FC00856171 /* WPICalendarEventCreatorAppIcon.png */, + ); + name = "Icons and Images"; + sourceTree = "<group>"; + }; C751D4D818AB044F00CFA0FF /* Chemical Engineering */ = { isa = PBXGroup; children = ( @@ -2209,6 +2223,7 @@ C740EC2018AEB83B00C3A701 /* brian-meacham-formal_rdax_161x121.jpg in Resources */, C740ED7118AECD4600C3A701 /* Stapleton_Informal-001_rdax_161x121.jpg in Resources */, C740ED8E18AED3BA00C3A701 /* boynton_rdax_300x200.jpg in Resources */, + C74BF58C18E4C1FC00856171 /* WPICalendarEventCreatorAppIcon.png in Resources */, C740ECF018AEC31400C3A701 /* me-chierichetti-profile.jpg in Resources */, C74BF58318E3BB4F00856171 /* tutorial3.png in Resources */, C740ECFB18AEC36500C3A701 /* me-demetriou-profile.jpg in Resources */, @@ -2242,6 +2257,7 @@ C740EDC618AED73000C3A701 /* sports-and-recreation-center-complex.jpg in Resources */, C740ECA318AEC0E900C3A701 /* math-formal-farr.jpg in Resources */, 2C3BEE971859533D00BC6753 /* borderTextView.png in Resources */, + C74BF58E18E4C2F000856171 /* rsz_wpicalendareventcreatorappicon.png in Resources */, C740EC5A18AEBD3E00C3A701 /* hua-deloray-profile.jpg in Resources */, C740ED5018AEC81F00C3A701 /* johnson-large-new.jpg in Resources */, C751D56C18AB155C00CFA0FF /* cs-rich-formal.jpg in Resources */, diff --git a/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/Contents.json b/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/Contents.json index a396706db4ec4cfca4d984d38b90dc8098bded40..dc2f18f6864eb2b8abc2276e3d1d57f923d96692 100644 --- a/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,18 +1,21 @@ { "images" : [ { - "idiom" : "iphone", "size" : "29x29", + "idiom" : "iphone", + "filename" : "rsz_1rsz_1rsz_icon.png", "scale" : "2x" }, { - "idiom" : "iphone", "size" : "40x40", + "idiom" : "iphone", + "filename" : "rsz_1rsz_icon.png", "scale" : "2x" }, { - "idiom" : "iphone", "size" : "60x60", + "idiom" : "iphone", + "filename" : "rsz_icon.png", "scale" : "2x" } ], diff --git a/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_1rsz_1rsz_icon.png b/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_1rsz_1rsz_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7d6b31e54d560fd3e2ecec3c1b285cb802b7e511 Binary files /dev/null and b/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_1rsz_1rsz_icon.png differ diff --git a/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_1rsz_icon.png b/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_1rsz_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0a23bd03a89e0f86d77c4dfcdbdda634bcc5020d Binary files /dev/null and b/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_1rsz_icon.png differ diff --git a/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_icon.png b/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f5dcf87537f36d0a043aac307563dceec94d5f4f Binary files /dev/null and b/WPI Calendar Event Creator/Images.xcassets/AppIcon.appiconset/rsz_icon.png differ diff --git a/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/BackGround4.png b/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/BackGround4.png new file mode 100644 index 0000000000000000000000000000000000000000..fff55ba9ecb6ebbb9d04224ec6dc2d41b93949ad Binary files /dev/null and b/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/BackGround4.png differ diff --git a/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/BackGround5S.png b/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/BackGround5S.png new file mode 100644 index 0000000000000000000000000000000000000000..9787537cc7b189a1088fcc3b627097a493367e25 Binary files /dev/null and b/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/BackGround5S.png differ diff --git a/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/Contents.json b/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/Contents.json index c79ebd3ada1309bae694b8e6760592b1254e035c..93f97a37f432d0ba2270bb6e0061f434adef23e2 100644 --- a/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/Contents.json +++ b/WPI Calendar Event Creator/Images.xcassets/LaunchImage.launchimage/Contents.json @@ -5,14 +5,16 @@ "idiom" : "iphone", "extent" : "full-screen", "minimum-system-version" : "7.0", + "filename" : "BackGround4.png", "scale" : "2x" }, { - "orientation" : "portrait", + "extent" : "full-screen", "idiom" : "iphone", "subtype" : "retina4", - "extent" : "full-screen", + "filename" : "BackGround5S.png", "minimum-system-version" : "7.0", + "orientation" : "portrait", "scale" : "2x" } ], diff --git a/WPI Calendar Event Creator/WPICalendarEventCreatorAppIcon.png b/WPI Calendar Event Creator/WPICalendarEventCreatorAppIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..6d75ceb8e9ef30090d5724fec9220e5e543f6166 Binary files /dev/null and b/WPI Calendar Event Creator/WPICalendarEventCreatorAppIcon.png differ diff --git a/WPI Calendar Event Creator/WPIModel.m b/WPI Calendar Event Creator/WPIModel.m index 834982fd7474319a67d466021ca14866d4b90ab1..8f9e7de2b026fde4047d52fcecd1cf8c71fa5c4b 100644 --- a/WPI Calendar Event Creator/WPIModel.m +++ b/WPI Calendar Event Creator/WPIModel.m @@ -8,7 +8,6 @@ #import "WPIModel.h" - @implementation WPIModel static WPIModel *sharedDataModel = nil; @@ -309,7 +308,9 @@ static WPIModel *sharedDataModel = nil; NSError* error; - [self.eventStore saveEvent:event span:EKSpanThisEvent error:&error]; + //[self.eventStore saveEvent:event span:EKSpanThisEvent error:&error]; + + UIAlertView* alert; if (error) { @@ -328,6 +329,29 @@ static WPIModel *sharedDataModel = nil; [alert show]; } +-(NSString*)getICSFile { + NSString *title = [self getTitleForPurpose:1]; + NSDate *sDate = [self getDateForPurpose:2]; + NSDate *eDate = [self getDateForPurpose:3]; + NSString *location = [self getLocation]; + + NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear | NSCalendarUnitHour | NSCalendarUnitMinute fromDate:sDate]; + NSString *startDate = [NSString stringWithFormat:@"%4ld%2ld%2ldT%2ld%2ld00", (long)components.year, (long)components.month , (long)components.day, (long)components.hour, (long)components.minute]; + startDate = [startDate stringByReplacingOccurrencesOfString:@" " withString:@"0"]; + components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear | NSCalendarUnitHour | NSCalendarUnitMinute fromDate:eDate]; + NSString *endDate = [NSString stringWithFormat:@"%4ld%2ld%2ldT%2ld%2ld00", (long)components.year, (long)components.month, (long)components.day, (long)components.hour, (long)components.minute]; + endDate = [endDate stringByReplacingOccurrencesOfString:@" " withString:@"0"]; + + NSLog(@"Date start: %@", startDate); + + title = [title stringByReplacingOccurrencesOfString:@"," withString:@"\\,"]; + location = [location stringByReplacingOccurrencesOfString:@"," withString:@"\\,"]; + + NSString *result = [NSString stringWithFormat:@"BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:WPIEventCreatorApp\nBEGIN:VEVENT\nSUMMARY:%@\nLOCATION:%@\nDTSTART;TZID=America/New_York:%@\nDTEND;TZID=America/New_York:%@\nEND:VEVENT\nEND:VCALENDAR", title, location, startDate, endDate]; + + return result; +} + - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (buttonIndex) { if ([MFMailComposeViewController canSendMail]) { @@ -343,6 +367,9 @@ static WPIModel *sharedDataModel = nil; NSString *message = [NSString stringWithFormat:@"Dear Professor %@:\n\n I am just writing you a reminder about an appointment we set on %@. \n\n Thank you!\n\n(This is an automated email from WPI Calendar Events Creator app)\n", [prof valueForKey:@"Name"], [self getDateForPurpose:4]]; [mailViewController setMessageBody:message isHTML:NO]; + + [mailViewController addAttachmentData:[[self getICSFile] dataUsingEncoding:NSUTF8StringEncoding] mimeType:@"text/calendar" fileName:@"AppointmentFile"]; + [self.mainTable sendEmail:mailViewController]; } else { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Can't do that :(" message:@"Device is unable to send email in its current state." delegate:self cancelButtonTitle:@"Okey" otherButtonTitles: nil]; diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/entries b/WPI Calendar Event Creator/iCalObjCSDK/.svn/entries new file mode 100755 index 0000000000000000000000000000000000000000..f05fd5290f6ea241aa997be50962576c2645f969 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/entries @@ -0,0 +1,581 @@ +10 + +dir +2866 +svn://cybergarage.org:3960/project/iphone/iCalObjCSDK/iCalObjCSDK +svn://cybergarage.org:3960 + + + +2011-05-19T10:30:15.863597Z +2859 +skonno + + + + + + + + + + + + + + +b45aa7d4-fa09-0410-9ebe-fd257a136781 + + + + + + + + +() + +CGICalendarValue.h +file + + + + +2011-05-13T13:57:29.000000Z +373ece60bb39da6b589f5a61052fb7c0 +2011-05-13T13:57:59.619818Z +2849 +skonno + + + + + + + + + + + + + + + + + + + + + +1038 + +CGICalendar.h +file + + + + +2011-05-19T11:58:56.000000Z +6979973ac7015b875e63c6b5f743d468 +2011-05-19T10:30:15.863597Z +2859 +skonno + + + + + + + + + + + + + + + + + + + + + +910 + +CGICalendarParameter.h +file + + + + +2011-05-13T13:57:29.000000Z +2d055fb3742887f778f16467fa6cd124 +2011-05-13T13:57:59.619818Z +2849 +skonno + + + + + + + + + + + + + + + + + + + + + +375 + +CGICalendarValue.m +file + + + + +2011-05-13T13:57:29.000000Z +db516f2e09a816edcca3c10c13311019 +2011-05-13T13:57:59.619818Z +2849 +skonno + + + + + + + + + + + + + + + + + + + + + +1215 + +CGICalendarContentLine.h +file + + + + +2011-05-13T13:57:29.000000Z +e7b6429f016bdfea683822c475c44770 +2011-05-13T13:57:59.619818Z +2849 +skonno + + + + + + + + + + + + + + + + + + + + + +1197 + +CGICalendarProperty.h +file + + + + +2011-05-19T11:58:56.000000Z +f5e3e1f6189db1ce0c6bc054bc3cb604 +2011-05-19T10:30:15.863597Z +2859 +skonno + + + + + + + + + + + + + + + + + + + + + +3137 + +CGICalendar.m +file + + + + +2011-05-19T11:58:56.000000Z +8b06ee68e4cca712f92a8d7805aaa801 +2011-05-19T10:30:15.863597Z +2859 +skonno + + + + + + + + + + + + + + + + + + + + + +5867 + +CGICalendarParameter.m +file + + + + +2011-05-13T13:57:29.000000Z +f321a4e01af4f4391c1b583d01d82fcb +2011-05-13T13:57:59.619818Z +2849 +skonno + + + + + + + + + + + + + + + + + + + + + +869 + +CGICalendarContentLine.m +file + + + + +2011-05-13T13:57:29.000000Z +a785c9a99341910e0ce5e1976f54634d +2011-05-13T13:57:59.619818Z +2849 +skonno + + + + + + + + + + + + + + + + + + + + + +4678 + +CGICalendarProperty.m +file + + + + +2011-05-19T11:58:56.000000Z +5bfe1322698bba692c9e40d3a109800f +2011-05-19T10:30:15.863597Z +2859 +skonno + + + + + + + + + + + + + + + + + + + + + +6654 + +NSDate+CGICalendar.h +file + + + + +2011-05-19T11:58:56.000000Z +b2e88b2913f4bd32c864b1ef401e3e0d +2011-05-19T10:30:15.863597Z +2859 +skonno + + + + + + + + + + + + + + + + + + + + + +376 + +NSDate+CGICalendar.m +file + + + + +2011-05-19T11:58:56.000000Z +748a536821c18301c40360f5f683d6e2 +2011-05-19T10:30:15.863597Z +2859 +skonno + + + + + + + + + + + + + + + + + + + + + +1566 + +CGICalendarComponent.h +file + + + + +2011-05-19T11:58:56.000000Z +709e2e5672cf9091a6c18189156e5b19 +2011-05-19T10:30:15.863597Z +2859 +skonno + + + + + + + + + + + + + + + + + + + + + +4199 + +CGICalendarObject.h +file + + + + +2011-05-16T13:49:45.000000Z +5c4148d27566e93e879373c6cba47be7 +2011-05-16T13:50:01.791142Z +2853 +skonno + + + + + + + + + + + + + + + + + + + + + +968 + +CGICalendarComponent.m +file + + + + +2011-05-19T11:58:56.000000Z +a3233db14271ca948a188751bbfddf10 +2011-05-19T10:30:15.863597Z +2859 +skonno + + + + + + + + + + + + + + + + + + + + + +13150 + +CGICalendarObject.m +file + + + + +2011-05-18T15:58:43.000000Z +8bbfdc75254c207ca6cf1b1f5413802f +2011-05-18T15:37:10.257463Z +2856 +skonno + + + + + + + + + + + + + + + + + + + + + +2938 + diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendar.h.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendar.h.svn-base new file mode 100755 index 0000000000000000000000000000000000000000..f69d8c3cb2cbb83eda820b876aacbe386f23712e --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendar.h.svn-base @@ -0,0 +1,39 @@ +// +// CGICalendar.h +// +// Created by Satoshi Konno on 11/01/28. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import <Foundation/Foundation.h> + +#import "CGICalendarObject.h" +#import "NSDate+CGICalendar.h" +#import "CGICalendarComponent.h" +#import "CGICalendarProperty.h" + +#define CG_ICALENDAR_HEADER_CONTENTLINE @"BEGIN:VCALENDAR" +#define CG_ICALENDAR_FOOTER_CONTENTLINE @"END:VCALENDAR" + +@interface CGICalendar : NSObject { + +} +@property(retain) NSMutableArray *objects; + ++ (NSString *)UUID; + +- (id)init; +- (id)initWithString:(NSString *)string; +- (id)initWithPath:(NSString *)path; + +- (BOOL)parseWithString:(NSString *)string error:(NSError **)error; +- (BOOL)parseWithPath:(NSString *)path error:(NSError **)error; + +- (void)addObject:(CGICalendarObject *)object; +- (CGICalendarObject *)objectAtIndex:(NSUInteger)index; + +- (NSString *)description; + +- (BOOL)writeToFile:(NSString *)path; + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendar.m.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendar.m.svn-base new file mode 100755 index 0000000000000000000000000000000000000000..a35cd3f23cfc49c8efae5c6744af3b81ed0132c4 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendar.m.svn-base @@ -0,0 +1,221 @@ +// +// CGICalendar.m +// +// Created by Satoshi Konno on 11/01/28. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import "CGICalendar.h" +#import "CGICalendarContentLine.h" + +@interface CGICalendar() +@property(retain) NSMutableArray *parserStack; +- (id)peekParserObject; +- (id)popParserObject; +- (void)pushParserObject:(id)object; +- (void)clearParserObjects; +@end + +@implementation CGICalendar + +@synthesize objects; +@synthesize parserStack; + +#pragma mark - +#pragma mark Class Methods + ++ (NSString *)UUID +{ + CFUUIDRef uuid = CFUUIDCreate(nil); + NSString *uuidString = (NSString*)CFUUIDCreateString(nil, uuid); + CFRelease(uuid); + return [uuidString autorelease]; +} + +#pragma mark - +#pragma mark Initialize + +- (id)init +{ + if ((self = [super init])) { + [self setObjects:[NSMutableArray array]]; + } + return self; +} + +- (id)initWithString:(NSString *)aString +{ + if ((self = [self init])) { + [self parseWithString:aString error:nil]; + } + return self; +} + +- (id)initWithPath:(NSString *)aPath +{ + if ((self = [self init])) { + [self parseWithPath:aPath error:nil]; + } + return self; +} + +#pragma mark - +#pragma mark Object + +- (void)addObject:(CGICalendarObject *)object +{ + [[self objects] addObject:object]; +} + +- (CGICalendarObject *)objectAtIndex:(NSUInteger)index +{ + return [[self objects] objectAtIndex:index]; +} + +#pragma mark - +#pragma mark Parser + +- (NSError *)createErrorAt:(NSUInteger)lineNumber lineString:(NSString *)lineString +{ + return [NSError errorWithDomain:@"iCalForObjC" code:-1 userInfo: + [NSDictionary dictionaryWithObjectsAndKeys: + [NSString stringWithFormat:@"%d", lineString], @"LineNumber", + lineString, @"ContentLine", + nil]]; +} + +- (BOOL)parseWithString:(NSString *)aString error:(NSError **)error +{ + [self setObjects:[NSMutableArray array]]; + [self clearParserObjects]; + + if (aString == nil) + return NO; + + NSArray *foldingContentLines = [aString componentsSeparatedByString:CG_ICALENDAR_CONTENTLINE_TERM]; + NSMutableArray *contentLines = [NSMutableArray array]; + for (NSString *foldingContentLine in foldingContentLines) { + if (foldingContentLine == nil) + continue; + if ([CGICalendarContentLine IsFoldingLineString:foldingContentLine] == NO) { + [contentLines addObject:[NSMutableString stringWithString:foldingContentLine]]; + continue; + } + NSMutableString *lastLineString = [contentLines lastObject]; + if (lastLineString == nil) + continue; + [lastLineString appendString:[foldingContentLine substringWithRange:NSMakeRange(1, ([foldingContentLine length] - 1))]]; + } + + int contentLineNumber = 0; + for (NSString *contentLine in contentLines) { + contentLineNumber++; + + CGICalendarContentLine *icalContentLine = [[CGICalendarContentLine alloc] initWithString:contentLine]; + CGICalendarComponent *icalParentComponent = [self peekParserObject]; + + // BEGIN + if ([icalContentLine isBegin]) { + CGICalendarComponent *icalComponent; + if (icalParentComponent == nil) { + icalComponent = [[CGICalendarObject alloc] init]; + [self addObject:(CGICalendarObject *)icalComponent]; + } + else { + icalComponent = [[CGICalendarComponent alloc] init]; + [icalParentComponent addComponent:icalComponent]; + } + [icalComponent setType:[icalContentLine value]]; + [self pushParserObject:icalComponent]; + [icalComponent release]; + [icalContentLine release]; + continue; + } + + // END + if ([icalContentLine isEnd]) { + [self popParserObject]; + [icalContentLine release]; + continue; + } + + NSString *propertyName = [icalContentLine name]; + CGICalendarProperty *icalProperty = [icalParentComponent propertyForName:propertyName]; + if (icalProperty == nil) { + icalProperty = [[[CGICalendarProperty alloc] init] autorelease]; + [icalProperty setName:propertyName]; + [icalParentComponent addProperty:icalProperty]; + } + [icalProperty setValue:[icalContentLine value]]; + for (CGICalendarParameter *icalParameter in [icalContentLine parameters]) + [icalProperty setParameterValue:[icalParameter value] forName:[icalParameter name]]; + + [icalContentLine release]; + } + + return YES; +} + +- (BOOL)parseWithPath:(NSString *)path error:(NSError **)error +{ + NSData *fileData = [NSData dataWithContentsOfFile:path]; + if (fileData == nil) + return NO; + return [self parseWithString:[[[NSString alloc] initWithData:fileData encoding:NSUTF8StringEncoding] autorelease] error:error]; +} + +#pragma mark - +#pragma mark Parser Stack Methods + +- (id)peekParserObject +{ + return [[self parserStack] lastObject]; +} + +- (id)popParserObject +{ + id lastObject = [[self parserStack] lastObject]; + [[self parserStack] removeLastObject]; + return [[lastObject retain] autorelease]; +} + +- (void)pushParserObject:(id)object +{ + [[self parserStack] addObject:object]; +} + +- (void)clearParserObjects +{ + [self setParserStack:[NSMutableArray array]]; +} + +#pragma mark - +#pragma mark String + +- (NSString *)description +{ + NSMutableString *descrString = [NSMutableString string]; + + for (CGICalendarObject *icalObj in [self objects]) + [descrString appendString:[icalObj description]]; + + return descrString; +} + +#pragma mark - +#pragma mark File + +- (BOOL)writeToFile:(NSString *)path +{ + NSString *desc = [self description]; + if (desc == nil) + return NO; + + NSData *data = [desc dataUsingEncoding:NSUTF8StringEncoding]; + if (data == nil) + return NO; + + return [data writeToFile:path atomically:YES]; +} + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarComponent.h.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarComponent.h.svn-base new file mode 100755 index 0000000000000000000000000000000000000000..f000bece3d1c7e53018905f5008bd3fe7c031b60 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarComponent.h.svn-base @@ -0,0 +1,129 @@ +// +// CGICalendarComponent.h +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import <Foundation/Foundation.h> +#import "CGICalendarProperty.h" + +#define CG_ICALENDAR_COMPONENT_TYPE_EVENT @"VEVENT" +#define CG_ICALENDAR_COMPONENT_TYPE_TODO @"VTODO" +#define CG_ICALENDAR_COMPONENT_TYPE_JOURNAL @"VJOURNAL" +#define CG_ICALENDAR_COMPONENT_TYPE_FREEBUSY @"VFREEBUSY" +#define CG_ICALENDAR_COMPONENT_TYPE_TIMEZONE @"VTIMEZONE" +#define CG_ICALENDAR_COMPONENT_TYPE_ALARM @"VALARM" + +@interface CGICalendarComponent : NSObject { + +} +@property(retain) NSString *type; +@property(retain) NSMutableArray *components; +@property(retain) NSMutableArray *properties; + ++ (id)componentWithType:(NSString *)type; ++ (id)event; ++ (id)todo; ++ (id)journal; ++ (id)freebusy; ++ (id)timezone; ++ (id)alarm; + +- (id)initWithType:(NSString *)type; + +- (BOOL)isType:(NSString *)type; +- (BOOL)isEvent; +- (BOOL)isTodo; +- (BOOL)isJournal; +- (BOOL)isFreebusy; +- (BOOL)isTimezone; +- (BOOL)isAlarm; + +- (void)addComponent:(CGICalendarComponent *)component; +- (void)insertComponent:(CGICalendarComponent *)component atIndex:(NSUInteger)index; +- (CGICalendarComponent *)componentAtIndex:(NSUInteger)index; +- (NSUInteger)indexOfComponent:(CGICalendarComponent *)component; +- (void)removeComponent:(CGICalendarComponent *)component; +- (void)removeComponentAtIndex:(NSUInteger)index; + +- (BOOL)hasPropertyForName:(NSString *)name; +- (void)addProperty:(CGICalendarProperty *)property; +- (void)removePropertyForName:(NSString *)name; + +- (void)setPropertyValue:(NSString *)value forName:(NSString *)name; +- (void)setPropertyValue:(NSString *)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +- (void)setPropertyObject:(id)object forName:(NSString *)name; +- (void)setPropertyObject:(id)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +- (void)setPropertyDate:(NSDate *)object forName:(NSString *)name; +- (void)setPropertyDate:(NSDate *)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +- (void)setPropertyInteger:(int)value forName:(NSString *)name; +- (void)setPropertyInteger:(int)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +- (void)setPropertyFloat:(float)value forName:(NSString *)name; +- (void)setPropertyFloat:(float)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; + +- (NSArray *)allPropertyKeys; +- (CGICalendarProperty *)propertyAtIndex:(NSUInteger)index; +- (CGICalendarProperty *)propertyForName:(NSString *)name; + +- (NSString *)propertyValueForName:(NSString *)name; +- (NSDate *)propertyDateForName:(NSString *)name; +- (int)propertyIntegerForName:(NSString *)name; +- (float)propertyFloatForName:(NSString *)name; + +- (NSString *)description; + +// 4.2.12 Participation Status +- (void)setParticipationStatus:(int)status; +- (int)participationStatus; + +// 4.8.1.5 Description +- (void)setNotes:(NSString *)value; +- (NSString *)notes; + +// 4.8.1.9 Priority +- (void)setPriority:(NSUInteger)value; +- (NSUInteger)priority; + +// 4.8.1.12 Summary +- (void)setSummary:(NSString *)value; +- (NSString *)summary; + +// 4.8.2.1 Date/Time Completed +- (void)setCompleted:(NSDate *)value; +- (NSDate *)completed; + +// 4.8.2.2 Date/Time End +- (void)setDateTimeEnd:(NSDate *)value; +- (NSDate *)dateTimeEnd; + +// 4.8.2.3 Date/Time Due +- (void)setDue:(NSDate *)value; +- (NSDate *)due; + +// 4.8.2.4 Date/Time Start +- (void)setDateTimeStart:(NSDate *)value; +- (NSDate *)dateTimeStart; + +// 4.8.4.7 Unique Identifier +- (void)setUID:(NSString *)value; +- (NSString *)UID; + +// 4.8.7.1 Date/Time Created +- (void)setCreated:(NSDate *)value; +- (NSDate *)created; + +// 4.8.7.2 Date/Time Stamp +- (void)setDateTimeStamp:(NSDate *)value; +- (NSDate *)dateTimeStamp; + +// 4.8.7.3 Last Modified +- (void)setLastModified:(NSDate *)value; +- (NSDate *)lastModified; + +// 4.8.7.4 Sequence Number +- (void)setSequenceNumber:(NSUInteger)value; +- (NSUInteger)sequenceNumber; +- (void)incrementSequenceNumber; + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarComponent.m.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarComponent.m.svn-base new file mode 100755 index 0000000000000000000000000000000000000000..0bd5ceedccbc4b59b4b6f59d28d3d587b4093122 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarComponent.m.svn-base @@ -0,0 +1,523 @@ +// +// CGICalendarComponent.m +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import "CGICalendar.h" +#import "CGICalendarComponent.h" +#import "CGICalendarContentLine.h" +#import "NSDate+CGICalendar.h" + +#define CG_ICALENDAR_COMPONENT_SEQUENCE_DEFAULT 0 + +@implementation CGICalendarComponent + +@synthesize type; +@synthesize components; +@synthesize properties; + +#pragma mark - +#pragma mark Global methods + ++ (id)componentWithType:(NSString *)aType +{ + return [[[CGICalendarComponent alloc] initWithType:aType] autorelease]; +} + ++ (id)event +{ + CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_EVENT]; + [icalComp setUID:[CGICalendar UUID]]; + [icalComp setDateTimeStamp:[NSDate date]]; + [icalComp setSequenceNumber:CG_ICALENDAR_COMPONENT_SEQUENCE_DEFAULT]; + return icalComp; +} + ++ (id)todo +{ + CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_TODO]; + [icalComp setUID:[CGICalendar UUID]]; + [icalComp setDateTimeStamp:[NSDate date]]; + [icalComp setSequenceNumber:CG_ICALENDAR_COMPONENT_SEQUENCE_DEFAULT]; + [icalComp setCreated:[NSDate date]]; + return icalComp; +} + ++ (id)journal +{ + CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_JOURNAL]; + [icalComp setUID:[CGICalendar UUID]]; + [icalComp setDateTimeStamp:[NSDate date]]; + [icalComp setSequenceNumber:CG_ICALENDAR_COMPONENT_SEQUENCE_DEFAULT]; + return icalComp; +} + ++ (id)freebusy +{ + CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_FREEBUSY]; + [icalComp setUID:[CGICalendar UUID]]; + [icalComp setDateTimeStamp:[NSDate date]]; + return icalComp; +} + ++ (id)timezone +{ + CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_TIMEZONE]; + return icalComp; +} + ++ (id)alarm +{ + CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_ALARM]; + return icalComp; +} + +#pragma mark - +#pragma mark init + +- (id)init +{ + if ((self = [super init])) { + [self setComponents:[NSMutableArray array]]; + [self setProperties:[NSMutableArray array]]; + } + return self; +} + +- (id)initWithType:(NSString *)aType +{ + if ((self = [self init])) { + [self setType:aType]; + } + return self; +} + +#pragma mark - +#pragma mark Component + +- (void)addComponent:(CGICalendarComponent *)component +{ + [[self components] addObject:component]; +} + +- (void)insertComponent:(CGICalendarComponent *)component atIndex:(NSUInteger)index +{ + [[self components] insertObject:component atIndex:index]; +} + +- (CGICalendarComponent *)componentAtIndex:(NSUInteger)index +{ + return [[self components] objectAtIndex:index]; +} + +- (NSUInteger)indexOfComponent:(CGICalendarComponent *)component +{ + return [[self components] indexOfObject:component]; +} + +- (void)removeComponent:(CGICalendarComponent *)component +{ + [[self components] removeObject:component]; +} + +- (void)removeComponentAtIndex:(NSUInteger)index +{ + [[self components] removeObjectAtIndex:index]; +} + +#pragma mark - +#pragma mark Property + +- (BOOL)hasPropertyForName:(NSString *)name +{ + for (CGICalendarProperty *icalProp in [self properties]) { + if ([icalProp isName:name]) { + [[self properties] removeObject:icalProp]; + return YES; + } + } + return NO; +} + +- (void)addProperty:(CGICalendarProperty *)property +{ + [[self properties] addObject:property]; +} + +- (void)removePropertyForName:(NSString *)name +{ + for (CGICalendarProperty *icalProp in [self properties]) { + if ([icalProp isName:name]) { + [[self properties] removeObject:icalProp]; + return; + } + } +} + +- (void)setPropertyValue:(NSString *)value forName:(NSString *)name +{ + [self setPropertyValue:value forName:name parameterValues:[NSArray array] parameterNames:[NSArray array]]; +} + +- (void)setPropertyValue:(NSString *)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +{ + CGICalendarProperty *icalProp = [self propertyForName:name]; + if (icalProp == nil) { + icalProp = [[[CGICalendarProperty alloc] init] autorelease]; + [icalProp setName:name]; + [self addProperty:icalProp]; + } + [icalProp setValue:value]; + + if ([parameterValues count] != [parameterNames count]) + return; + + for (int n=0; n<[parameterNames count]; n++) { + NSString *name = [parameterNames objectAtIndex:n]; + id value = [parameterNames objectAtIndex:n]; + [icalProp setParameterObject:value forName:name]; + } +} + +- (void)setPropertyObject:(id)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames +{ + [self setPropertyValue:[object description] forName:name parameterValues:parameterValues parameterNames:parameterNames]; +} + +- (void)setPropertyObject:(id)object forName:(NSString *)name +{ + [self setPropertyValue:[object description] forName:name]; +} + +- (void)setPropertyDate:(NSDate *)object forName:(NSString *)name +{ + [self setPropertyValue:[object descriptionICalendar] forName:name]; +} + +- (void)setPropertyDate:(NSDate *)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames +{ + [self setPropertyValue:[object descriptionICalendar] forName:name parameterValues:parameterValues parameterNames:parameterNames]; +} + +- (void)setPropertyInteger:(int)value forName:(NSString *)name +{ + [self setPropertyValue:[[NSNumber numberWithInteger:value] stringValue] forName:name]; +} + +- (void)setPropertyInteger:(int)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames +{ + [self setPropertyValue:[[NSNumber numberWithInteger:value] stringValue] forName:name parameterValues:parameterValues parameterNames:parameterNames]; +} + +- (void)setPropertyFloat:(float)value forName:(NSString *)name +{ + [self setPropertyValue:[[NSNumber numberWithFloat:value] stringValue] forName:name]; +} + +- (void)setPropertyFloat:(float)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames +{ + [self setPropertyValue:[[NSNumber numberWithFloat:value] stringValue] forName:name parameterValues:parameterValues parameterNames:parameterNames]; +} + +- (id)propertyAtIndex:(NSUInteger)index +{ + return [[self properties] objectAtIndex:index]; +} + +- (CGICalendarProperty *)propertyForName:(NSString *)name +{ + for (CGICalendarProperty *icalProp in [self properties]) { + if ([icalProp isName:name]) + return icalProp; + } + return nil; +} + +- (NSArray *)allPropertyKeys +{ + NSMutableArray *keys = [NSMutableArray array]; + for (CGICalendarProperty *icalProp in [self properties]) + [keys addObject:[icalProp name]]; + return keys; +} + +- (NSString *)propertyValueForName:(NSString *)name +{ + for (CGICalendarProperty *icalProp in [self properties]) { + if ([icalProp isName:name]) + return [icalProp value]; + } + return nil; +} + +- (NSDate *)propertyDateForName:(NSString *)name +{ + for (CGICalendarProperty *icalProp in [self properties]) { + if ([icalProp isName:name]) + return [icalProp dateValue]; + } + return nil; +} + +- (int)propertyIntegerForName:(NSString *)name; +{ + for (CGICalendarProperty *icalProp in [self properties]) { + if ([icalProp isName:name]) + return [icalProp integerValue]; + } + return 0; +} + +- (float)propertyFloatForName:(NSString *)name; +{ + for (CGICalendarProperty *icalProp in [self properties]) { + if ([icalProp isName:name]) + return [icalProp floatValue]; + } + return 0; +} + +#pragma mark - +#pragma mark String + +- (BOOL)isType:(NSString *)aType +{ + return [aType isEqualToString:[self type]]; +} + +- (BOOL)isEvent +{ + return [self isType:CG_ICALENDAR_COMPONENT_TYPE_EVENT]; +} + +- (BOOL)isTodo +{ + return [self isType:CG_ICALENDAR_COMPONENT_TYPE_TODO]; +} + +- (BOOL)isJournal +{ + return [self isType:CG_ICALENDAR_COMPONENT_TYPE_JOURNAL]; +} + +- (BOOL)isFreebusy +{ + return [self isType:CG_ICALENDAR_COMPONENT_TYPE_FREEBUSY]; +} + +- (BOOL)isTimezone +{ + return [self isType:CG_ICALENDAR_COMPONENT_TYPE_TIMEZONE]; +} + +- (BOOL)isAlarm +{ + return [self isType:CG_ICALENDAR_COMPONENT_TYPE_ALARM]; +} + +#pragma mark - +#pragma mark String + +#define CG_ICALENDAR_CONTENTLINE_NAME_BEGIN @"BEGIN" +#define CG_ICALENDAR_CONTENTLINE_NAME_END @"END" + +- (NSString *)description +{ + NSMutableString *objectsString = [NSMutableString string]; + + [objectsString appendFormat:@"%@:%@%@",CG_ICALENDAR_CONTENTLINE_NAME_BEGIN, [self type], CG_ICALENDAR_CONTENTLINE_TERM]; + + for (CGICalendarProperty *icalProp in [self properties]) + [objectsString appendString:[icalProp description]]; + + for (CGICalendarComponent *icalComp in [self components]) + [objectsString appendString:[icalComp description]]; + + [objectsString appendFormat:@"%@:%@%@",CG_ICALENDAR_CONTENTLINE_NAME_END, [self type], CG_ICALENDAR_CONTENTLINE_TERM]; + + return objectsString; +} + +#pragma mark - +#pragma mark 4.2.12 Participation Status + +- (void)setParticipationStatus:(int)status +{ + CGICalendarProperty *icalProp = [self propertyForName:CG_ICALENDAR_PROERTY_PARTSTAT]; + if (icalProp == nil) + icalProp = [[[CGICalendarProperty alloc] init] autorelease]; + [icalProp setParticipationStatus:status]; +} + +- (int)participationStatus +{ + CGICalendarProperty *icalProp = [self propertyForName:CG_ICALENDAR_PROERTY_PARTSTAT]; + if (icalProp == nil) + return CGICalendarParticipationStatusUnkown; + return [icalProp participationStatus]; +} + +#pragma mark - +#pragma mark 4.8.1.5 Description + +- (void)setNotes:(NSString *)value +{ + [self setPropertyValue:value forName:CG_ICALENDAR_PROERTY_DESCRIPTION]; +} + +- (NSString *)notes +{ + return [self propertyValueForName:CG_ICALENDAR_PROERTY_DESCRIPTION]; +} + +#pragma mark - +#pragma mark 4.8.1.9 Priority + +- (void)setPriority:(NSUInteger)value +{ + [self setPropertyInteger:value forName:CG_ICALENDAR_PROERTY_PRIORITY]; +} + +- (NSUInteger)priority +{ + return [self propertyIntegerForName:CG_ICALENDAR_PROERTY_PRIORITY]; +} + +#pragma mark - +#pragma mark 4.8.1.12 Summary + +- (void)setSummary:(NSString *)value +{ + [self setPropertyValue:value forName:CG_ICALENDAR_PROERTY_SUMMARY]; +} + +- (NSString *)summary +{ + return [self propertyValueForName:CG_ICALENDAR_PROERTY_SUMMARY]; +} + +#pragma mark - +#pragma mark 4.8.2.1 Date/Time Completed + +- (void)setCompleted:(NSDate *)value +{ + [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_COMPLETED]; +} + +- (NSDate *)completed +{ + return [self propertyDateForName:CG_ICALENDAR_PROERTY_COMPLETED]; +} + +#pragma mark - +#pragma mark 4.8.2.2 Date/Time End + +- (void)setDateTimeEnd:(NSDate *)value +{ + [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_DTEND]; +} + +- (NSDate *)dateTimeEnd +{ + return [self propertyDateForName:CG_ICALENDAR_PROERTY_DTEND]; +} + +#pragma mark - +#pragma mark 4.8.2.3 Date/Time Due + +- (void)setDue:(NSDate *)value +{ + [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_DUE]; +} + +- (NSDate *)due +{ + return [self propertyDateForName:CG_ICALENDAR_PROERTY_DUE]; +} + +#pragma mark - +#pragma mark 4.8.2.4 Date/Time Start + +- (void)setDateTimeStart:(NSDate *)value +{ + [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_DTSTART]; +} + +- (NSDate *)dateTimeStart +{ + return [self propertyDateForName:CG_ICALENDAR_PROERTY_DTSTART]; +} + +#pragma mark - +#pragma mark 4.8.4.7 Unique Identifier + +- (void)setUID:(NSString *)value +{ + [self setPropertyValue:value forName:CG_ICALENDAR_PROERTY_UID]; +} + +- (NSString *)UID +{ + return [self propertyValueForName:CG_ICALENDAR_PROERTY_UID]; +} + +#pragma mark - +#pragma mark 4.8.7.1 Date/Time Created + +- (void)setCreated:(NSDate *)value +{ + [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_CREATED]; +} + +- (NSDate *)created +{ + return [self propertyDateForName:CG_ICALENDAR_PROERTY_CREATED]; +} + +#pragma mark - +#pragma mark 4.8.7.2 Date/Time Stamp + +- (void)setDateTimeStamp:(NSDate *)value +{ + [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_DTSTAMP]; +} + +- (NSDate *)dateTimeStamp +{ + return [self propertyDateForName:CG_ICALENDAR_PROERTY_DTSTAMP]; +} + +#pragma mark - +#pragma mark 4.8.7.3 Last Modified + +- (void)setLastModified:(NSDate *)value; +{ + [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_LASTMODIFIED]; +} + +- (NSDate *)lastModified; +{ + return [self propertyDateForName:CG_ICALENDAR_PROERTY_LASTMODIFIED]; +} + +#pragma mark - +#pragma mark 4.8.7.4 Sequence Number + +- (void)setSequenceNumber:(NSUInteger)value +{ + [self setPropertyInteger:value forName:CG_ICALENDAR_PROERTY_SEQUENCE]; +} + +- (NSUInteger)sequenceNumber +{ + return [self propertyIntegerForName:CG_ICALENDAR_PROERTY_SEQUENCE]; +} + +- (void)incrementSequenceNumber +{ + [self setSequenceNumber:([self sequenceNumber] + 1)]; +} + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarContentLine.h.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarContentLine.h.svn-base new file mode 100755 index 0000000000000000000000000000000000000000..f87ffac231712d0efc387f1db93ef07e18c09e49 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarContentLine.h.svn-base @@ -0,0 +1,41 @@ +// +// CGICalendarContentLine.h +// +// Created by Satoshi Konno on 11/01/28. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import <Foundation/Foundation.h> + +#import "CGICalendarProperty.h" + +#define CG_ICALENDAR_CONTENTLINE_TERM @"\r\n" +#define CG_ICALENDAR_CONTENTLINE_FOLDING_SPACE @" " +#define CG_ICALENDAR_CONTENTLINE_FOLDING_TAB @"\t" +#define CG_ICALENDAR_CONTENTLINE_DELIM @":" +#define CG_ICALENDAR_CONTENTLINE_NAMEPARAM_DELIM @";" + +#define CG_ICALENDAR_CONTENTLINE_NAME_BEGIN @"BEGIN" +#define CG_ICALENDAR_CONTENTLINE_NAME_END @"END" + +#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VCALENDAR @"VCALENDAR" +#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VEVENT @"VEVENT" +#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VJOURNAL @"VJOURNAL" +#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VFREEBUSY @"VFREEBUSY" +#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VTIMEZONE @"VTIMEZONE" + +@interface CGICalendarContentLine : CGICalendarProperty { + +} ++ (BOOL)IsFoldingLineString:(NSString *)aString; ++ (id)contentLineWithString:(NSString *)aString; + +- (id)init; +- (id)initWithString:(NSString *)aString; +- (void)setString:(NSString *)aString; + +- (NSString *)description; + +- (BOOL)isBegin; +- (BOOL)isEnd; +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarContentLine.m.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarContentLine.m.svn-base new file mode 100755 index 0000000000000000000000000000000000000000..138d2221ab46385fe72f44c7513db0f57deba20a --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarContentLine.m.svn-base @@ -0,0 +1,184 @@ +// +// CGICalendarContentLine.m +// +// Created by Satoshi Konno on 11/01/28. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import "CGICalendarContentLine.h" + +/* + The following notation defines the lines of content in an iCalendar + object: + + contentline = name *(";" param ) ":" value CRLF + ; This ABNF is just a general definition for an initial parsing + ; of the content line into its property name, parameter list, + ; and value string + + ; When parsing a content line, folded lines MUST first + ; be unfolded according to the unfolding procedure + ; described above. When generating a content line, lines + ; longer than 75 octets SHOULD be folded according to + ; the folding procedure described above. + + name = x-name / iana-token + + iana-token = 1*(ALPHA / DIGIT / "-") + ; iCalendar identifier registered with IANA + + x-name = "X-" [vendorid "-"] 1*(ALPHA / DIGIT / "-") + ; Reservered for experimental use. Not intended for use in + ; released products. + + vendorid = 3*(ALPHA / DIGIT) ;Vendor identification + + param = param-name "=" param-value + *("," param-value) + ; Each property defines the specific ABNF for the parameters + ; allowed on the property. Refer to specific properties for + ; precise parameter ABNF. + + param-name = iana-token / x-token + + param-value = paramtext / quoted-string + + paramtext = *SAFE-CHAR + + value = *VALUE-CHAR + + quoted-string = DQUOTE *QSAFE-CHAR DQUOTE + + NON-US-ASCII = %x80-F8 + ; Use restricted by charset parameter + ; on outer MIME object (UTF-8 preferred) + + QSAFE-CHAR = WSP / %x21 / %x23-7E / NON-US-ASCII + ; Any character except CTLs and DQUOTE + + SAFE-CHAR = WSP / %x21 / %x23-2B / %x2D-39 / %x3C-7E + / NON-US-ASCII + ; Any character except CTLs, DQUOTE, ";", ":", "," + + VALUE-CHAR = WSP / %x21-7E / NON-US-ASCII + ; Any textual character + + CR = %x0D + ; carriage return + + LF = %x0A + ; line feed + + CRLF = CR LF + ; Internet standard newline + + CTL = %x00-08 / %x0A-1F / %x7F + ; Controls + + ALPHA = %x41-5A / %x61-7A ; A-Z / a-z + + DIGIT = %x30-39 + ; 0-9 + + DQUOTE = %x22 + ; Quotation Mark + + WSP = SPACE / HTAB + + SPACE = %x20 + + HTAB = %x09 + */ + +@implementation CGICalendarContentLine + ++ (BOOL)IsFoldingLineString:(NSString *)aString +{ + if ([aString hasPrefix:CG_ICALENDAR_CONTENTLINE_FOLDING_SPACE] || [aString hasPrefix:CG_ICALENDAR_CONTENTLINE_FOLDING_TAB]) + return YES; + return NO; +} + ++ (id)contentLineWithString:(NSString *)aString +{ + CGICalendarContentLine *icalContentLine = [[CGICalendarContentLine alloc] initWithString:aString]; + return [icalContentLine autorelease]; +} + +- (id)init +{ + if ((self = [super init])) { + } + return self; +} + +- (id)initWithString:(NSString *)aString +{ + if ((self = [self init])) { + [self setString:aString]; + } + return self; +} + +- (void)setString:(NSString *)aString +{ + NSString *nowNewLineString = [aString stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]; + NSArray *values = [nowNewLineString componentsSeparatedByString:CG_ICALENDAR_CONTENTLINE_DELIM]; + int valuesCnt = [values count]; + if (valuesCnt < 2) + return; + + NSArray *nameParams = [[values objectAtIndex:0] componentsSeparatedByString:CG_ICALENDAR_CONTENTLINE_NAMEPARAM_DELIM]; + NSMutableArray *params = [NSMutableArray array]; + int nameParamsCnt = [nameParams count]; + for (int n=0; n<nameParamsCnt; n++) { + if (n == 0) { + [self setName:[nameParams objectAtIndex:0]]; + continue; + } + CGICalendarParameter *icalParam = [[CGICalendarParameter alloc] initWithString:[nameParams objectAtIndex:n]]; + [params addObject:icalParam]; + [icalParam release]; + } + [self setParameters:params]; + + NSMutableString *valueString = [NSMutableString string]; + for (int n=1; n<valuesCnt; n++) { + if (1 < n) + [valueString appendString:CG_ICALENDAR_CONTENTLINE_DELIM]; + [valueString appendString:[values objectAtIndex:n]]; + } + [self setValue:valueString]; +} + +- (NSString *)description; +{ + NSMutableString *contentLine = [NSMutableString string]; + if ([self hasName]) + [contentLine appendString:[self name]]; + + for (CGICalendarParameter *param in [self parameters]) { + [contentLine appendString:CG_ICALENDAR_CONTENTLINE_NAMEPARAM_DELIM]; + [contentLine appendString:[param string]]; + } + + [contentLine appendString:CG_ICALENDAR_CONTENTLINE_DELIM]; + if ([self hasValue]) + [contentLine appendString:[self value]]; + + [contentLine appendString:CG_ICALENDAR_CONTENTLINE_TERM]; + + return contentLine; +} + +- (BOOL)isBegin +{ + return [self isName:CG_ICALENDAR_CONTENTLINE_NAME_BEGIN]; +} + +- (BOOL)isEnd +{ + return [self isName:CG_ICALENDAR_CONTENTLINE_NAME_END]; +} + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarObject.h.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarObject.h.svn-base new file mode 100755 index 0000000000000000000000000000000000000000..7538b51fb1cf694271839acc9f81fedd2cef3648 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarObject.h.svn-base @@ -0,0 +1,42 @@ +// +// CGICalendarObject.h +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import <Foundation/Foundation.h> + +#import "CGICalendarComponent.h" +#import "CGICalendarProperty.h" + +#define CG_ICALENDAR_OBJECT_VERSION_DEFAULT @"2.0" +#define CG_ICALENDAR_OBJECT_PRODID_DEFAULT @"//CyberGarage//iCal4ObjC//EN" + +@interface CGICalendarObject : CGICalendarComponent { + +} + ++ (id)object; ++ (id)objectWithProdid:(NSString *)prodid; ++ (id)objectWithProdid:(NSString *)prodid version:(NSString *)version; + +- (id)init; +- (id)initWithProdid:(NSString *)prodid; +- (id)initWithProdid:(NSString *)prodid version:(NSString *)version; + +- (void)setVersion:(NSString *)version; +- (NSString *)version; + +- (void)setProdid:(NSString *)prodid; +- (NSString *)prodid; + +- (NSArray *)componentsWithType:(NSString *)type; +- (NSArray *)events; +- (NSArray *)todos; +- (NSArray *)journals; +- (NSArray *)freebusies; +- (NSArray *)timezones; + +@end + diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarObject.m.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarObject.m.svn-base new file mode 100755 index 0000000000000000000000000000000000000000..1ff0d54e30ed37ec3b51e5ad3ffd7b2f7a09cd81 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarObject.m.svn-base @@ -0,0 +1,129 @@ +// +// CGICalendarObject.m +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import "CGICalendarObject.h" + +#define CG_ICALENDAR_OBJECT_TYPE_DEFAULT @"VCALENDAR" +#define CG_ICALENDAR_OBJECT_VERSION_PARAM @"VERSION" +#define CG_ICALENDAR_OBJECT_PRODID_PARAM @"PRODID" + +@implementation CGICalendarObject + +#pragma mark - +#pragma mark Global + ++ (id)object +{ + return [[[CGICalendarObject alloc] init] autorelease]; +} + ++ (id)objectWithProdid:(NSString *)prodid +{ + return [[[CGICalendarObject alloc] initWithProdid:prodid] autorelease]; +} + ++ (id)objectWithProdid:(NSString *)prodid version:(NSString *)version +{ + return [[[CGICalendarObject alloc] initWithProdid:prodid version:version] autorelease]; +} + +#pragma mark - +#pragma mark Initialize + +- (id)init +{ + if ((self = [super init])) { + [self setType:CG_ICALENDAR_OBJECT_TYPE_DEFAULT]; + [self setVersion:CG_ICALENDAR_OBJECT_VERSION_DEFAULT]; + [self setProdid:CG_ICALENDAR_OBJECT_PRODID_DEFAULT]; + } + return self; +} + +- (id)initWithProdid:(NSString *)prodid version:(NSString *)version; +{ + if ((self = [super init])) { + [self setType:CG_ICALENDAR_OBJECT_TYPE_DEFAULT]; + [self setVersion:version]; + [self setProdid:prodid]; + } + return self; +} + +- (id)initWithProdid:(NSString *)prodid +{ + if ((self = [super init])) { + [self setType:CG_ICALENDAR_OBJECT_TYPE_DEFAULT]; + [self setVersion:CG_ICALENDAR_OBJECT_VERSION_DEFAULT]; + [self setProdid:prodid]; + } + return self; +} + +#pragma mark - +#pragma mark Property Utility Methods + +- (void)setVersion:(NSString *)version +{ + [self setPropertyValue:version forName:CG_ICALENDAR_OBJECT_VERSION_PARAM]; +} + +- (NSString *)version +{ + return [self propertyValueForName:CG_ICALENDAR_OBJECT_VERSION_PARAM]; +} + +- (void)setProdid:(NSString *)prodid +{ + [self setPropertyValue:prodid forName:CG_ICALENDAR_OBJECT_PRODID_PARAM]; +} + +- (NSString *)prodid +{ + return [self propertyValueForName:CG_ICALENDAR_OBJECT_PRODID_PARAM]; +} + +#pragma mark - +#pragma mark conponents + +- (NSArray *)componentsWithType:(NSString *)type +{ + NSMutableArray *typeComponents = [NSMutableArray array]; + for (CGICalendarComponent *icalComponent in [self components]) { + if ([icalComponent isType:type] == NO) + continue; + [typeComponents addObject:icalComponent]; + } + return typeComponents; +} + +- (NSArray *)events +{ + return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_EVENT]; +} + +- (NSArray *)todos +{ + return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_TODO]; +} + +- (NSArray *)journals +{ + return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_JOURNAL]; +} + +- (NSArray *)freebusies +{ + return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_FREEBUSY]; +} + +- (NSArray *)timezones +{ + return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_TIMEZONE]; +} + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarParameter.h.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarParameter.h.svn-base new file mode 100755 index 0000000000000000000000000000000000000000..ee5a54d907a8a0dd7db1f0827f00baca2eb2240f --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarParameter.h.svn-base @@ -0,0 +1,18 @@ +// +// CGICalendarParameter.h +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import <Foundation/Foundation.h> +#import "CGICalendarValue.h" + +@interface CGICalendarParameter : CGICalendarValue { + +} +- (id)init; +- (id)initWithString:(NSString *)aString; +- (void)setString:(NSString *)aString; +- (NSString *) string; +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarParameter.m.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarParameter.m.svn-base new file mode 100755 index 0000000000000000000000000000000000000000..c6044896e5c61b52f479a36b80ce65d2b51d95aa --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarParameter.m.svn-base @@ -0,0 +1,46 @@ +// +// CGICalendarParameter.m +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import "CGICalendarParameter.h" + +#define CG_ICALENDAR_PARAMETER_DELIM @"=" + +@implementation CGICalendarParameter + +- (id)init +{ + if ((self = [super init])) { + } + return self; +} + +- (id)initWithString:(NSString *)aString +{ + if ((self = [self init])) { + [self setString:aString]; + } + return self; +} + +- (void)setString:(NSString *)aString +{ + NSArray *values = [aString componentsSeparatedByString:CG_ICALENDAR_PARAMETER_DELIM]; + if ([values count] < 2) + return; + [self setName:[values objectAtIndex:0]]; + [self setValue:[values objectAtIndex:1]]; +} + +- (NSString *) string; +{ + return [NSString stringWithFormat:@"%@%@%@", + [self name] ? [self name] : @"", + CG_ICALENDAR_PARAMETER_DELIM, + [self value] ? [self value] : @""]; +} + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarProperty.h.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarProperty.h.svn-base new file mode 100755 index 0000000000000000000000000000000000000000..a2d4003cbd33a503226b670696938e1e7b520d2d --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarProperty.h.svn-base @@ -0,0 +1,78 @@ +// +// CGICalendarProperty.h +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import <Foundation/Foundation.h> +#import "CGICalendarValue.h" +#import "CGICalendarParameter.h" + +#define CG_ICALENDAR_PROERTY_PARTSTAT @"PARTSTAT" + +#define CG_ICALENDAR_PROERTY_COMPLETED @"COMPLETED" +#define CG_ICALENDAR_PROERTY_DTEND @"DTEND" +#define CG_ICALENDAR_PROERTY_DUE @"DUE" +#define CG_ICALENDAR_PROERTY_DTSTART @"DTSTART" + +// 4.8.1 Descriptive Component Properties + +#define CG_ICALENDAR_PROERTY_DESCRIPTION @"DESCRIPTION" +#define CG_ICALENDAR_PROERTY_PRIORITY @"PRIORITY" +#define CG_ICALENDAR_PROERTY_SUMMARY @"SUMMARY" + +// 4.8.4 Relationship Component Properties +#define CG_ICALENDAR_PROERTY_UID @"UID" + +// 4.8.7 Change Management Component Properties + +#define CG_ICALENDAR_PROERTY_CREATED @"CREATED" +#define CG_ICALENDAR_PROERTY_DTSTAMP @"DTSTAMP" +#define CG_ICALENDAR_PROERTY_LASTMODIFIED @"LAST-MODIFIED" +#define CG_ICALENDAR_PROERTY_SEQUENCE @"SEQUENCE" + +enum { + CGICalendarParticipationStatusUnkown = 0, + CGICalendarParticipationStatusNeedsAction, + CGICalendarParticipationStatusAccepted, + CGICalendarParticipationStatusDeclined, + CGICalendarParticipationStatusTentative, + CGICalendarParticipationStatusDelegated, + CGICalendarParticipationStatusCompleted, + CGICalendarParticipationStatusInProcess, +}; + +@interface CGICalendarProperty : CGICalendarValue { +} +@property(retain) NSMutableArray *parameters; + +- (id)init; + +- (BOOL)hasParameterForName:(NSString *)name; +- (void)addParameter:(CGICalendarParameter *)parameter; +- (void)removeParameterForName:(NSString *)name; + +- (void)setParameterValue:(NSString *)value forName:(NSString *)name; +- (void)setParameterValue:(NSString *)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +- (void)setParameterObject:(id)object forName:(NSString *)name; +- (void)setParameterObject:(id)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +- (void)setParameterDate:(NSDate *)object forName:(NSString *)name; +- (void)setParameterDate:(NSDate *)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +- (void)setParameterInteger:(int)value forName:(NSString *)name; +- (void)setParameterInteger:(int)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +- (void)setParameterFloat:(float)value forName:(NSString *)name; +- (void)setParameterFloat:(float)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; + +- (CGICalendarParameter *)parameterAtIndex:(NSUInteger)index; +- (CGICalendarParameter *)parameterForName:(NSString *)name; +- (NSArray *)allParameterKeys; +- (NSString *)parameterValueForName:(NSString *)name; +- (NSDate *)parameterDateForName:(NSString *)name; +- (int)parameterIntegerForName:(NSString *)name; +- (float)parameterFloatForName:(NSString *)name; + +- (void)setParticipationStatus:(int)value; +- (int)participationStatus; + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarProperty.m.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarProperty.m.svn-base new file mode 100755 index 0000000000000000000000000000000000000000..eadcd1351e7ff9f2b560ed5031dfb9d6c08dcb31 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarProperty.m.svn-base @@ -0,0 +1,228 @@ +// +// CGICalendarProperty.m +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import "CGICalendarProperty.h" +#import "CGICalendarContentLine.h" +#import "NSDate+CGICalendar.h" + +@implementation CGICalendarProperty + +@synthesize parameters; + +- (id)init +{ + if ((self = [super init])) { + } + return self; +} + +#pragma mark - +#pragma mark Parameter + +- (BOOL)hasParameterForName:(NSString *)name +{ + for (CGICalendarParameter *icalProp in [self parameters]) { + if ([icalProp isName:name]) { + [[self parameters] removeObject:icalProp]; + return YES; + } + } + return NO; +} + +- (void)addParameter:(CGICalendarParameter *)parameter +{ + [[self parameters] addObject:parameter]; +} + +- (void)removeParameterForName:(NSString *)name +{ + for (CGICalendarParameter *icalProp in [self parameters]) { + if ([icalProp isName:name]) { + [[self parameters] removeObject:icalProp]; + return; + } + } +} + +- (void)setParameterValue:(NSString *)value forName:(NSString *)name +{ + CGICalendarParameter *icalProp = [self parameterForName:name]; + if (icalProp == nil) { + icalProp = [[[CGICalendarParameter alloc] init] autorelease]; + [icalProp setName:name]; + [self addParameter:icalProp]; + } + [icalProp setValue:value]; +} + +- (void)setParameterValue:(NSString *)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +{ + [self setParameterValue:value forName:name parameterValues:[NSArray array] parameterNames:[NSArray array]]; +} + +- (void)setParameterObject:(id)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames +{ + [self setParameterValue:[object description] forName:name parameterValues:parameterValues parameterNames:parameterNames]; +} + +- (void)setParameterObject:(id)object forName:(NSString *)name +{ + [self setParameterValue:[object description] forName:name]; +} + +- (void)setParameterDate:(NSDate *)object forName:(NSString *)name +{ + [self setParameterValue:[object descriptionICalendar] forName:name]; +} + +- (void)setParameterDate:(NSDate *)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames +{ + [self setParameterValue:[object descriptionICalendar] forName:name parameterValues:parameterValues parameterNames:parameterNames]; +} + +- (void)setParameterInteger:(int)value forName:(NSString *)name +{ + [self setParameterValue:[[NSNumber numberWithInteger:value] stringValue] forName:name parameterValues:[NSArray array] parameterNames:[NSArray array]]; +} + +- (void)setParameterInteger:(int)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames +{ + [self setParameterValue:[[NSNumber numberWithInteger:value] stringValue] forName:name parameterValues:parameterValues parameterNames:parameterNames]; +} + +- (void)setParameterFloat:(float)value forName:(NSString *)name +{ + [self setParameterValue:[[NSNumber numberWithFloat:value] stringValue] forName:name parameterValues:[NSArray array] parameterNames:[NSArray array]]; +} + +- (void)setParameterFloat:(float)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames +{ + [self setParameterValue:[[NSNumber numberWithFloat:value] stringValue] forName:name parameterValues:parameterValues parameterNames:parameterNames]; +} + +- (id)parameterAtIndex:(NSUInteger)index +{ + return [[self parameters] objectAtIndex:index]; +} + +- (CGICalendarParameter *)parameterForName:(NSString *)name +{ + for (CGICalendarParameter *icalProp in [self parameters]) { + if ([icalProp isName:name]) + return icalProp; + } + return nil; +} + +- (NSArray *)allParameterKeys +{ + NSMutableArray *keys = [NSMutableArray array]; + for (CGICalendarParameter *icalProp in [self parameters]) + [keys addObject:[icalProp name]]; + return keys; +} + +- (NSString *)parameterValueForName:(NSString *)name +{ + for (CGICalendarParameter *icalProp in [self parameters]) { + if ([icalProp isName:name]) + return [icalProp value]; + } + return nil; +} + +- (NSDate *)parameterDateForName:(NSString *)name +{ + for (CGICalendarParameter *icalProp in [self parameters]) { + if ([icalProp isName:name]) + return [icalProp dateValue]; + } + return nil; +} + +- (int)parameterIntegerForName:(NSString *)name; +{ + for (CGICalendarParameter *icalProp in [self parameters]) { + if ([icalProp isName:name]) + return [icalProp integerValue]; + } + return 0; +} + +- (float)parameterFloatForName:(NSString *)name; +{ + for (CGICalendarParameter *icalProp in [self parameters]) { + if ([icalProp isName:name]) + return [icalProp floatValue]; + } + return 0; +} + +#pragma mark - +#pragma mark String + +- (NSString *)description +{ + NSMutableString *propertyString = [NSMutableString string]; + + [propertyString appendFormat:@"%@", [self name]]; + + for (CGICalendarParameter *icalParam in [self parameters]) + [propertyString appendFormat:@";%@", [icalParam description]]; + + [propertyString appendFormat:@"%:%@%@", ((0 < [[self value] length]) ? [self value] : @""), CG_ICALENDAR_CONTENTLINE_TERM]; + + return propertyString; +} + +#pragma mark - +#pragma mark ParticipationStatus + +- (NSArray *)participationStatusStrings +{ + static NSArray *statusStrings = nil; + + if (statusStrings == nil) { + statusStrings = [NSArray arrayWithObjects: + @"", + @"NEEDS-ACTION", + @"ACCEPTED", + @"DECLINED", + @"TENTATIVE", + @"DELEGATED", + @"COMPLETED", + @"IN-PROCESS", + nil]; + } + + return statusStrings; +} + +- (void)setParticipationStatus:(int)status +{ + NSArray *statusStrings = [self participationStatusStrings]; + if (status < 0 || ([statusStrings count]-1) < status) + return; + [self setValue:[statusStrings objectAtIndex:status]]; +} + +- (int)participationStatus +{ + if ([self value] == nil) + return CGICalendarParticipationStatusUnkown; + + NSArray *statusStrings = [self participationStatusStrings]; + for (int n=0; n<[statusStrings count]; n++) { + if ([[self value] isEqualToString:[statusStrings objectAtIndex:n]]) + return n; + } + + return CGICalendarParticipationStatusUnkown; +} + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarValue.h.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarValue.h.svn-base new file mode 100755 index 0000000000000000000000000000000000000000..d1020fa7080ba4ee08dcac24671f5fc7d43f87f0 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarValue.h.svn-base @@ -0,0 +1,50 @@ +// +// CGICalendarValue.h +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import <Foundation/Foundation.h> + +enum { + CGICalendarValueTypeUnknown = 0, + CGICalendarValueTypeBinary, + CGICalendarValueTypeBoolean, + CGICalendarValueTypeCalendarUserAddress, + CGICalendarValueTypeDate, + CGICalendarValueTypeDateTime, + CGICalendarValueTypeDuration, + CGICalendarValueTypeFloat, + CGICalendarValueTypeInteger, + CGICalendarValueTypePeriodOfTime, + CGICalendarValueTypeRecurrenceRule, + CGICalendarValueTypeText, + CGICalendarValueTypeTime, + CGICalendarValueTypeURI, + CGICalendarValueTypeUTCOffset, +}; + +@interface CGICalendarValue : NSObject { + +} +@property(assign) int type; +@property(retain) NSString *name; +@property(retain) NSString *value; + +- (id)init; + +- (BOOL)hasName; +- (BOOL)hasValue; + +- (BOOL)isName:(NSString *)aName; +- (BOOL)isValue:(NSString *)aValue; + +- (void)setObject:(id)value; +- (void)setDate:(NSDate *)value; + +- (NSDate *)dateValue; +- (int)integerValue; +- (float)floatValue; + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarValue.m.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarValue.m.svn-base new file mode 100755 index 0000000000000000000000000000000000000000..4364c11e4d5ce3a0b196d47b5102bdc8050cfead --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/CGICalendarValue.m.svn-base @@ -0,0 +1,77 @@ +// +// CGICalendarValue.m +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import "CGICalendarValue.h" +#import "NSDate+CGICalendar.h" + +@implementation CGICalendarValue + +@synthesize type; +@synthesize value; +@synthesize name; + +- (id)init +{ + if ((self = [super init])) { + } + return self; +} + +- (BOOL)hasName +{ + if ([self name] != nil && 0 < [[self name] length]) + return YES; + return NO; +} + +- (BOOL)hasValue +{ + if ([self value] != nil && 0 < [[self value] length]) + return YES; + return NO; +} + +- (BOOL)isName:(NSString *)aName +{ + if (aName == nil || [aName length] <= 0) + return NO; + return [aName isEqualToString:[self name]]; +} + +- (BOOL)isValue:(NSString *)aValue +{ + if (aValue == nil || [aValue length] <= 0) + return NO; + return [aValue isEqualToString:[self value]]; +} + +- (void)setObject:(id)aValue +{ + [self setValue:[value description]]; +} + +- (void)setDate:(NSDate *)aValue +{ + [self setValue:[aValue descriptionICalendar]]; +} + +- (NSDate *)dateValue +{ + return [NSDate dateWithICalendarString:[self value]]; +} + +- (int)integerValue +{ + return [[self value] integerValue]; +} + +- (float)floatValue +{ + return [[self value] floatValue]; +} + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/NSDate+CGICalendar.h.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/NSDate+CGICalendar.h.svn-base new file mode 100755 index 0000000000000000000000000000000000000000..3e649c81c35ecb34c4bba7a0d79ad9911da74e95 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/NSDate+CGICalendar.h.svn-base @@ -0,0 +1,16 @@ +// +// NSDate+CGICalendar.h +// +// Created by Satoshi Konno on 5/12/11. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import <Foundation/Foundation.h> + + +@interface NSDate(CGICalendar) ++ (id)dateWithICalendarString:(NSString *)aString; ++ (id)dateWithICalendarISO8601:(NSString *)aString; +- (NSString *)descriptionICalendar; +- (NSString *)descriptionISO8601; +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/NSDate+CGICalendar.m.svn-base b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/NSDate+CGICalendar.m.svn-base new file mode 100755 index 0000000000000000000000000000000000000000..18a8339431cf4011bd33447a164083d87f4a1ba9 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/.svn/text-base/NSDate+CGICalendar.m.svn-base @@ -0,0 +1,49 @@ +// +// NSDate+CGICalendar.m +// +// Created by Satoshi Konno on 5/12/11. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import "NSDate+CGICalendar.h" + +#define CGNSDATE_ICALENDAR_DATETMEFORMAT @"YYYYMMdd'T'kkmmss'Z'" +#define CGNSDATE_ISO8601_DATETMEFORMAT @"YYYY-MM-dd kk:mm:ss" + +@implementation NSDate(CGICalendar) + ++ (id)dateWithICalendarString:(NSString *)aString +{ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; + [dateFormatter setTimeZone:timeZone]; + [dateFormatter setDateFormat:CGNSDATE_ICALENDAR_DATETMEFORMAT]; + return [dateFormatter dateFromString:aString]; +} + ++ (id)dateWithICalendarISO8601:(NSString *)aString +{ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setTimeStyle:NSDateFormatterFullStyle]; + [dateFormatter setDateFormat:CGNSDATE_ISO8601_DATETMEFORMAT]; + return [dateFormatter dateFromString:aString]; +} + +- (NSString *)descriptionICalendar +{ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; + [dateFormatter setTimeZone:timeZone]; + [dateFormatter setDateFormat:CGNSDATE_ICALENDAR_DATETMEFORMAT]; + return [dateFormatter stringFromDate:self]; +} + +- (NSString *)descriptionISO8601 +{ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setLocale:[NSLocale systemLocale]]; + [dateFormatter setDateFormat:CGNSDATE_ISO8601_DATETMEFORMAT]; + return [dateFormatter stringFromDate:self]; +} + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendar.h b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendar.h new file mode 100755 index 0000000000000000000000000000000000000000..f69d8c3cb2cbb83eda820b876aacbe386f23712e --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendar.h @@ -0,0 +1,39 @@ +// +// CGICalendar.h +// +// Created by Satoshi Konno on 11/01/28. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import <Foundation/Foundation.h> + +#import "CGICalendarObject.h" +#import "NSDate+CGICalendar.h" +#import "CGICalendarComponent.h" +#import "CGICalendarProperty.h" + +#define CG_ICALENDAR_HEADER_CONTENTLINE @"BEGIN:VCALENDAR" +#define CG_ICALENDAR_FOOTER_CONTENTLINE @"END:VCALENDAR" + +@interface CGICalendar : NSObject { + +} +@property(retain) NSMutableArray *objects; + ++ (NSString *)UUID; + +- (id)init; +- (id)initWithString:(NSString *)string; +- (id)initWithPath:(NSString *)path; + +- (BOOL)parseWithString:(NSString *)string error:(NSError **)error; +- (BOOL)parseWithPath:(NSString *)path error:(NSError **)error; + +- (void)addObject:(CGICalendarObject *)object; +- (CGICalendarObject *)objectAtIndex:(NSUInteger)index; + +- (NSString *)description; + +- (BOOL)writeToFile:(NSString *)path; + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendar.m b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendar.m new file mode 100755 index 0000000000000000000000000000000000000000..9260de5b4eddba5bc3d0f60297330da848dcc324 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendar.m @@ -0,0 +1,217 @@ +// +// CGICalendar.m +// +// Created by Satoshi Konno on 11/01/28. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import "CGICalendar.h" +#import "CGICalendarContentLine.h" + +@interface CGICalendar() +@property(retain) NSMutableArray *parserStack; +- (id)peekParserObject; +- (id)popParserObject; +- (void)pushParserObject:(id)object; +- (void)clearParserObjects; +@end + +@implementation CGICalendar + +@synthesize objects; +@synthesize parserStack; + +#pragma mark - +#pragma mark Class Methods + ++ (NSString *)UUID +{ + CFUUIDRef uuid = CFUUIDCreate(nil); + NSString *uuidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(nil, uuid)); + CFRelease(uuid); + return uuidString; +} + +#pragma mark - +#pragma mark Initialize + +- (id)init +{ + if ((self = [super init])) { + [self setObjects:[NSMutableArray array]]; + } + return self; +} + +- (id)initWithString:(NSString *)aString +{ + if ((self = [self init])) { + [self parseWithString:aString error:nil]; + } + return self; +} + +- (id)initWithPath:(NSString *)aPath +{ + if ((self = [self init])) { + [self parseWithPath:aPath error:nil]; + } + return self; +} + +#pragma mark - +#pragma mark Object + +- (void)addObject:(CGICalendarObject *)object +{ + [[self objects] addObject:object]; +} + +- (CGICalendarObject *)objectAtIndex:(NSUInteger)index +{ + return [[self objects] objectAtIndex:index]; +} + +#pragma mark - +#pragma mark Parser + +- (NSError *)createErrorAt:(NSUInteger)lineNumber lineString:(NSString *)lineString +{ + return [NSError errorWithDomain:@"iCalForObjC" code:-1 userInfo: + [NSDictionary dictionaryWithObjectsAndKeys: + [NSString stringWithFormat:@"%@", lineString], @"LineNumber", + lineString, @"ContentLine", + nil]]; +} + +- (BOOL)parseWithString:(NSString *)aString error:(NSError **)error +{ + [self setObjects:[NSMutableArray array]]; + [self clearParserObjects]; + + if (aString == nil) + return NO; + + NSArray *foldingContentLines = [aString componentsSeparatedByString:CG_ICALENDAR_CONTENTLINE_TERM]; + NSMutableArray *contentLines = [NSMutableArray array]; + for (NSString *foldingContentLine in foldingContentLines) { + if (foldingContentLine == nil) + continue; + if ([CGICalendarContentLine IsFoldingLineString:foldingContentLine] == NO) { + [contentLines addObject:[NSMutableString stringWithString:foldingContentLine]]; + continue; + } + NSMutableString *lastLineString = [contentLines lastObject]; + if (lastLineString == nil) + continue; + [lastLineString appendString:[foldingContentLine substringWithRange:NSMakeRange(1, ([foldingContentLine length] - 1))]]; + } + + int contentLineNumber = 0; + for (NSString *contentLine in contentLines) { + contentLineNumber++; + + CGICalendarContentLine *icalContentLine = [[CGICalendarContentLine alloc] initWithString:contentLine]; + CGICalendarComponent *icalParentComponent = [self peekParserObject]; + + // BEGIN + if ([icalContentLine isBegin]) { + CGICalendarComponent *icalComponent; + if (icalParentComponent == nil) { + icalComponent = [[CGICalendarObject alloc] init]; + [self addObject:(CGICalendarObject *)icalComponent]; + } + else { + icalComponent = [[CGICalendarComponent alloc] init]; + [icalParentComponent addComponent:icalComponent]; + } + [icalComponent setType:[icalContentLine value]]; + [self pushParserObject:icalComponent]; + continue; + } + + // END + if ([icalContentLine isEnd]) { + [self popParserObject]; + continue; + } + + NSString *propertyName = [icalContentLine name]; + CGICalendarProperty *icalProperty = [icalParentComponent propertyForName:propertyName]; + if (icalProperty == nil) { + icalProperty = [[CGICalendarProperty alloc] init]; + [icalProperty setName:propertyName]; + [icalParentComponent addProperty:icalProperty]; + } + [icalProperty setValue:[icalContentLine value]]; + for (CGICalendarParameter *icalParameter in [icalContentLine parameters]) + [icalProperty setParameterValue:[icalParameter value] forName:[icalParameter name]]; + + } + + return YES; +} + +- (BOOL)parseWithPath:(NSString *)path error:(NSError **)error +{ + NSData *fileData = [NSData dataWithContentsOfFile:path]; + if (fileData == nil) + return NO; + return [self parseWithString:[[NSString alloc] initWithData:fileData encoding:NSUTF8StringEncoding] error:error]; +} + +#pragma mark - +#pragma mark Parser Stack Methods + +- (id)peekParserObject +{ + return [[self parserStack] lastObject]; +} + +- (id)popParserObject +{ + id lastObject = [[self parserStack] lastObject]; + [[self parserStack] removeLastObject]; + return lastObject; +} + +- (void)pushParserObject:(id)object +{ + [[self parserStack] addObject:object]; +} + +- (void)clearParserObjects +{ + [self setParserStack:[NSMutableArray array]]; +} + +#pragma mark - +#pragma mark String + +- (NSString *)description +{ + NSMutableString *descrString = [NSMutableString string]; + + for (CGICalendarObject *icalObj in [self objects]) + [descrString appendString:[icalObj description]]; + + return descrString; +} + +#pragma mark - +#pragma mark File + +- (BOOL)writeToFile:(NSString *)path +{ + NSString *desc = [self description]; + if (desc == nil) + return NO; + + NSData *data = [desc dataUsingEncoding:NSUTF8StringEncoding]; + if (data == nil) + return NO; + + return [data writeToFile:path atomically:YES]; +} + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarComponent.h b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarComponent.h new file mode 100755 index 0000000000000000000000000000000000000000..f000bece3d1c7e53018905f5008bd3fe7c031b60 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarComponent.h @@ -0,0 +1,129 @@ +// +// CGICalendarComponent.h +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import <Foundation/Foundation.h> +#import "CGICalendarProperty.h" + +#define CG_ICALENDAR_COMPONENT_TYPE_EVENT @"VEVENT" +#define CG_ICALENDAR_COMPONENT_TYPE_TODO @"VTODO" +#define CG_ICALENDAR_COMPONENT_TYPE_JOURNAL @"VJOURNAL" +#define CG_ICALENDAR_COMPONENT_TYPE_FREEBUSY @"VFREEBUSY" +#define CG_ICALENDAR_COMPONENT_TYPE_TIMEZONE @"VTIMEZONE" +#define CG_ICALENDAR_COMPONENT_TYPE_ALARM @"VALARM" + +@interface CGICalendarComponent : NSObject { + +} +@property(retain) NSString *type; +@property(retain) NSMutableArray *components; +@property(retain) NSMutableArray *properties; + ++ (id)componentWithType:(NSString *)type; ++ (id)event; ++ (id)todo; ++ (id)journal; ++ (id)freebusy; ++ (id)timezone; ++ (id)alarm; + +- (id)initWithType:(NSString *)type; + +- (BOOL)isType:(NSString *)type; +- (BOOL)isEvent; +- (BOOL)isTodo; +- (BOOL)isJournal; +- (BOOL)isFreebusy; +- (BOOL)isTimezone; +- (BOOL)isAlarm; + +- (void)addComponent:(CGICalendarComponent *)component; +- (void)insertComponent:(CGICalendarComponent *)component atIndex:(NSUInteger)index; +- (CGICalendarComponent *)componentAtIndex:(NSUInteger)index; +- (NSUInteger)indexOfComponent:(CGICalendarComponent *)component; +- (void)removeComponent:(CGICalendarComponent *)component; +- (void)removeComponentAtIndex:(NSUInteger)index; + +- (BOOL)hasPropertyForName:(NSString *)name; +- (void)addProperty:(CGICalendarProperty *)property; +- (void)removePropertyForName:(NSString *)name; + +- (void)setPropertyValue:(NSString *)value forName:(NSString *)name; +- (void)setPropertyValue:(NSString *)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +- (void)setPropertyObject:(id)object forName:(NSString *)name; +- (void)setPropertyObject:(id)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +- (void)setPropertyDate:(NSDate *)object forName:(NSString *)name; +- (void)setPropertyDate:(NSDate *)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +- (void)setPropertyInteger:(int)value forName:(NSString *)name; +- (void)setPropertyInteger:(int)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +- (void)setPropertyFloat:(float)value forName:(NSString *)name; +- (void)setPropertyFloat:(float)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; + +- (NSArray *)allPropertyKeys; +- (CGICalendarProperty *)propertyAtIndex:(NSUInteger)index; +- (CGICalendarProperty *)propertyForName:(NSString *)name; + +- (NSString *)propertyValueForName:(NSString *)name; +- (NSDate *)propertyDateForName:(NSString *)name; +- (int)propertyIntegerForName:(NSString *)name; +- (float)propertyFloatForName:(NSString *)name; + +- (NSString *)description; + +// 4.2.12 Participation Status +- (void)setParticipationStatus:(int)status; +- (int)participationStatus; + +// 4.8.1.5 Description +- (void)setNotes:(NSString *)value; +- (NSString *)notes; + +// 4.8.1.9 Priority +- (void)setPriority:(NSUInteger)value; +- (NSUInteger)priority; + +// 4.8.1.12 Summary +- (void)setSummary:(NSString *)value; +- (NSString *)summary; + +// 4.8.2.1 Date/Time Completed +- (void)setCompleted:(NSDate *)value; +- (NSDate *)completed; + +// 4.8.2.2 Date/Time End +- (void)setDateTimeEnd:(NSDate *)value; +- (NSDate *)dateTimeEnd; + +// 4.8.2.3 Date/Time Due +- (void)setDue:(NSDate *)value; +- (NSDate *)due; + +// 4.8.2.4 Date/Time Start +- (void)setDateTimeStart:(NSDate *)value; +- (NSDate *)dateTimeStart; + +// 4.8.4.7 Unique Identifier +- (void)setUID:(NSString *)value; +- (NSString *)UID; + +// 4.8.7.1 Date/Time Created +- (void)setCreated:(NSDate *)value; +- (NSDate *)created; + +// 4.8.7.2 Date/Time Stamp +- (void)setDateTimeStamp:(NSDate *)value; +- (NSDate *)dateTimeStamp; + +// 4.8.7.3 Last Modified +- (void)setLastModified:(NSDate *)value; +- (NSDate *)lastModified; + +// 4.8.7.4 Sequence Number +- (void)setSequenceNumber:(NSUInteger)value; +- (NSUInteger)sequenceNumber; +- (void)incrementSequenceNumber; + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarComponent.m b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarComponent.m new file mode 100755 index 0000000000000000000000000000000000000000..0f9b01e80b5001ced1993893ba677d3c899d322b --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarComponent.m @@ -0,0 +1,523 @@ +// +// CGICalendarComponent.m +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import "CGICalendar.h" +#import "CGICalendarComponent.h" +#import "CGICalendarContentLine.h" +#import "NSDate+CGICalendar.h" + +#define CG_ICALENDAR_COMPONENT_SEQUENCE_DEFAULT 0 + +@implementation CGICalendarComponent + +@synthesize type; +@synthesize components; +@synthesize properties; + +#pragma mark - +#pragma mark Global methods + ++ (id)componentWithType:(NSString *)aType +{ + return [[CGICalendarComponent alloc] initWithType:aType]; +} + ++ (id)event +{ + CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_EVENT]; + [icalComp setUID:[CGICalendar UUID]]; + [icalComp setDateTimeStamp:[NSDate date]]; + [icalComp setSequenceNumber:CG_ICALENDAR_COMPONENT_SEQUENCE_DEFAULT]; + return icalComp; +} + ++ (id)todo +{ + CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_TODO]; + [icalComp setUID:[CGICalendar UUID]]; + [icalComp setDateTimeStamp:[NSDate date]]; + [icalComp setSequenceNumber:CG_ICALENDAR_COMPONENT_SEQUENCE_DEFAULT]; + [icalComp setCreated:[NSDate date]]; + return icalComp; +} + ++ (id)journal +{ + CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_JOURNAL]; + [icalComp setUID:[CGICalendar UUID]]; + [icalComp setDateTimeStamp:[NSDate date]]; + [icalComp setSequenceNumber:CG_ICALENDAR_COMPONENT_SEQUENCE_DEFAULT]; + return icalComp; +} + ++ (id)freebusy +{ + CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_FREEBUSY]; + [icalComp setUID:[CGICalendar UUID]]; + [icalComp setDateTimeStamp:[NSDate date]]; + return icalComp; +} + ++ (id)timezone +{ + CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_TIMEZONE]; + return icalComp; +} + ++ (id)alarm +{ + CGICalendarComponent *icalComp = [CGICalendarComponent componentWithType:CG_ICALENDAR_COMPONENT_TYPE_ALARM]; + return icalComp; +} + +#pragma mark - +#pragma mark init + +- (id)init +{ + if ((self = [super init])) { + [self setComponents:[NSMutableArray array]]; + [self setProperties:[NSMutableArray array]]; + } + return self; +} + +- (id)initWithType:(NSString *)aType +{ + if ((self = [self init])) { + [self setType:aType]; + } + return self; +} + +#pragma mark - +#pragma mark Component + +- (void)addComponent:(CGICalendarComponent *)component +{ + [[self components] addObject:component]; +} + +- (void)insertComponent:(CGICalendarComponent *)component atIndex:(NSUInteger)index +{ + [[self components] insertObject:component atIndex:index]; +} + +- (CGICalendarComponent *)componentAtIndex:(NSUInteger)index +{ + return [[self components] objectAtIndex:index]; +} + +- (NSUInteger)indexOfComponent:(CGICalendarComponent *)component +{ + return [[self components] indexOfObject:component]; +} + +- (void)removeComponent:(CGICalendarComponent *)component +{ + [[self components] removeObject:component]; +} + +- (void)removeComponentAtIndex:(NSUInteger)index +{ + [[self components] removeObjectAtIndex:index]; +} + +#pragma mark - +#pragma mark Property + +- (BOOL)hasPropertyForName:(NSString *)name +{ + for (CGICalendarProperty *icalProp in [self properties]) { + if ([icalProp isName:name]) { + [[self properties] removeObject:icalProp]; + return YES; + } + } + return NO; +} + +- (void)addProperty:(CGICalendarProperty *)property +{ + [[self properties] addObject:property]; +} + +- (void)removePropertyForName:(NSString *)name +{ + for (CGICalendarProperty *icalProp in [self properties]) { + if ([icalProp isName:name]) { + [[self properties] removeObject:icalProp]; + return; + } + } +} + +- (void)setPropertyValue:(NSString *)value forName:(NSString *)name +{ + [self setPropertyValue:value forName:name parameterValues:[NSArray array] parameterNames:[NSArray array]]; +} + +- (void)setPropertyValue:(NSString *)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +{ + CGICalendarProperty *icalProp = [self propertyForName:name]; + if (icalProp == nil) { + icalProp = [[CGICalendarProperty alloc] init]; + [icalProp setName:name]; + [self addProperty:icalProp]; + } + [icalProp setValue:value]; + + if ([parameterValues count] != [parameterNames count]) + return; + + for (int n=0; n<[parameterNames count]; n++) { + NSString *name = [parameterNames objectAtIndex:n]; + id value = [parameterNames objectAtIndex:n]; + [icalProp setParameterObject:value forName:name]; + } +} + +- (void)setPropertyObject:(id)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames +{ + [self setPropertyValue:[object description] forName:name parameterValues:parameterValues parameterNames:parameterNames]; +} + +- (void)setPropertyObject:(id)object forName:(NSString *)name +{ + [self setPropertyValue:[object description] forName:name]; +} + +- (void)setPropertyDate:(NSDate *)object forName:(NSString *)name +{ + [self setPropertyValue:[object descriptionICalendar] forName:name]; +} + +- (void)setPropertyDate:(NSDate *)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames +{ + [self setPropertyValue:[object descriptionICalendar] forName:name parameterValues:parameterValues parameterNames:parameterNames]; +} + +- (void)setPropertyInteger:(int)value forName:(NSString *)name +{ + [self setPropertyValue:[[NSNumber numberWithInteger:value] stringValue] forName:name]; +} + +- (void)setPropertyInteger:(int)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames +{ + [self setPropertyValue:[[NSNumber numberWithInteger:value] stringValue] forName:name parameterValues:parameterValues parameterNames:parameterNames]; +} + +- (void)setPropertyFloat:(float)value forName:(NSString *)name +{ + [self setPropertyValue:[[NSNumber numberWithFloat:value] stringValue] forName:name]; +} + +- (void)setPropertyFloat:(float)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames +{ + [self setPropertyValue:[[NSNumber numberWithFloat:value] stringValue] forName:name parameterValues:parameterValues parameterNames:parameterNames]; +} + +- (id)propertyAtIndex:(NSUInteger)index +{ + return [[self properties] objectAtIndex:index]; +} + +- (CGICalendarProperty *)propertyForName:(NSString *)name +{ + for (CGICalendarProperty *icalProp in [self properties]) { + if ([icalProp isName:name]) + return icalProp; + } + return nil; +} + +- (NSArray *)allPropertyKeys +{ + NSMutableArray *keys = [NSMutableArray array]; + for (CGICalendarProperty *icalProp in [self properties]) + [keys addObject:[icalProp name]]; + return keys; +} + +- (NSString *)propertyValueForName:(NSString *)name +{ + for (CGICalendarProperty *icalProp in [self properties]) { + if ([icalProp isName:name]) + return [icalProp value]; + } + return nil; +} + +- (NSDate *)propertyDateForName:(NSString *)name +{ + for (CGICalendarProperty *icalProp in [self properties]) { + if ([icalProp isName:name]) + return [icalProp dateValue]; + } + return nil; +} + +- (int)propertyIntegerForName:(NSString *)name; +{ + for (CGICalendarProperty *icalProp in [self properties]) { + if ([icalProp isName:name]) + return [icalProp integerValue]; + } + return 0; +} + +- (float)propertyFloatForName:(NSString *)name; +{ + for (CGICalendarProperty *icalProp in [self properties]) { + if ([icalProp isName:name]) + return [icalProp floatValue]; + } + return 0; +} + +#pragma mark - +#pragma mark String + +- (BOOL)isType:(NSString *)aType +{ + return [aType isEqualToString:[self type]]; +} + +- (BOOL)isEvent +{ + return [self isType:CG_ICALENDAR_COMPONENT_TYPE_EVENT]; +} + +- (BOOL)isTodo +{ + return [self isType:CG_ICALENDAR_COMPONENT_TYPE_TODO]; +} + +- (BOOL)isJournal +{ + return [self isType:CG_ICALENDAR_COMPONENT_TYPE_JOURNAL]; +} + +- (BOOL)isFreebusy +{ + return [self isType:CG_ICALENDAR_COMPONENT_TYPE_FREEBUSY]; +} + +- (BOOL)isTimezone +{ + return [self isType:CG_ICALENDAR_COMPONENT_TYPE_TIMEZONE]; +} + +- (BOOL)isAlarm +{ + return [self isType:CG_ICALENDAR_COMPONENT_TYPE_ALARM]; +} + +#pragma mark - +#pragma mark String + +#define CG_ICALENDAR_CONTENTLINE_NAME_BEGIN @"BEGIN" +#define CG_ICALENDAR_CONTENTLINE_NAME_END @"END" + +- (NSString *)description +{ + NSMutableString *objectsString = [NSMutableString string]; + + [objectsString appendFormat:@"%@:%@%@",CG_ICALENDAR_CONTENTLINE_NAME_BEGIN, [self type], CG_ICALENDAR_CONTENTLINE_TERM]; + + for (CGICalendarProperty *icalProp in [self properties]) + [objectsString appendString:[icalProp description]]; + + for (CGICalendarComponent *icalComp in [self components]) + [objectsString appendString:[icalComp description]]; + + [objectsString appendFormat:@"%@:%@%@",CG_ICALENDAR_CONTENTLINE_NAME_END, [self type], CG_ICALENDAR_CONTENTLINE_TERM]; + + return objectsString; +} + +#pragma mark - +#pragma mark 4.2.12 Participation Status + +- (void)setParticipationStatus:(int)status +{ + CGICalendarProperty *icalProp = [self propertyForName:CG_ICALENDAR_PROERTY_PARTSTAT]; + if (icalProp == nil) + icalProp = [[CGICalendarProperty alloc] init]; + [icalProp setParticipationStatus:status]; +} + +- (int)participationStatus +{ + CGICalendarProperty *icalProp = [self propertyForName:CG_ICALENDAR_PROERTY_PARTSTAT]; + if (icalProp == nil) + return CGICalendarParticipationStatusUnkown; + return [icalProp participationStatus]; +} + +#pragma mark - +#pragma mark 4.8.1.5 Description + +- (void)setNotes:(NSString *)value +{ + [self setPropertyValue:value forName:CG_ICALENDAR_PROERTY_DESCRIPTION]; +} + +- (NSString *)notes +{ + return [self propertyValueForName:CG_ICALENDAR_PROERTY_DESCRIPTION]; +} + +#pragma mark - +#pragma mark 4.8.1.9 Priority + +- (void)setPriority:(NSUInteger)value +{ + [self setPropertyInteger:(int)value forName:CG_ICALENDAR_PROERTY_PRIORITY]; +} + +- (NSUInteger)priority +{ + return [self propertyIntegerForName:CG_ICALENDAR_PROERTY_PRIORITY]; +} + +#pragma mark - +#pragma mark 4.8.1.12 Summary + +- (void)setSummary:(NSString *)value +{ + [self setPropertyValue:value forName:CG_ICALENDAR_PROERTY_SUMMARY]; +} + +- (NSString *)summary +{ + return [self propertyValueForName:CG_ICALENDAR_PROERTY_SUMMARY]; +} + +#pragma mark - +#pragma mark 4.8.2.1 Date/Time Completed + +- (void)setCompleted:(NSDate *)value +{ + [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_COMPLETED]; +} + +- (NSDate *)completed +{ + return [self propertyDateForName:CG_ICALENDAR_PROERTY_COMPLETED]; +} + +#pragma mark - +#pragma mark 4.8.2.2 Date/Time End + +- (void)setDateTimeEnd:(NSDate *)value +{ + [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_DTEND]; +} + +- (NSDate *)dateTimeEnd +{ + return [self propertyDateForName:CG_ICALENDAR_PROERTY_DTEND]; +} + +#pragma mark - +#pragma mark 4.8.2.3 Date/Time Due + +- (void)setDue:(NSDate *)value +{ + [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_DUE]; +} + +- (NSDate *)due +{ + return [self propertyDateForName:CG_ICALENDAR_PROERTY_DUE]; +} + +#pragma mark - +#pragma mark 4.8.2.4 Date/Time Start + +- (void)setDateTimeStart:(NSDate *)value +{ + [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_DTSTART]; +} + +- (NSDate *)dateTimeStart +{ + return [self propertyDateForName:CG_ICALENDAR_PROERTY_DTSTART]; +} + +#pragma mark - +#pragma mark 4.8.4.7 Unique Identifier + +- (void)setUID:(NSString *)value +{ + [self setPropertyValue:value forName:CG_ICALENDAR_PROERTY_UID]; +} + +- (NSString *)UID +{ + return [self propertyValueForName:CG_ICALENDAR_PROERTY_UID]; +} + +#pragma mark - +#pragma mark 4.8.7.1 Date/Time Created + +- (void)setCreated:(NSDate *)value +{ + [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_CREATED]; +} + +- (NSDate *)created +{ + return [self propertyDateForName:CG_ICALENDAR_PROERTY_CREATED]; +} + +#pragma mark - +#pragma mark 4.8.7.2 Date/Time Stamp + +- (void)setDateTimeStamp:(NSDate *)value +{ + [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_DTSTAMP]; +} + +- (NSDate *)dateTimeStamp +{ + return [self propertyDateForName:CG_ICALENDAR_PROERTY_DTSTAMP]; +} + +#pragma mark - +#pragma mark 4.8.7.3 Last Modified + +- (void)setLastModified:(NSDate *)value; +{ + [self setPropertyDate:value forName:CG_ICALENDAR_PROERTY_LASTMODIFIED]; +} + +- (NSDate *)lastModified; +{ + return [self propertyDateForName:CG_ICALENDAR_PROERTY_LASTMODIFIED]; +} + +#pragma mark - +#pragma mark 4.8.7.4 Sequence Number + +- (void)setSequenceNumber:(NSUInteger)value +{ + [self setPropertyInteger:(int)value forName:CG_ICALENDAR_PROERTY_SEQUENCE]; +} + +- (NSUInteger)sequenceNumber +{ + return [self propertyIntegerForName:CG_ICALENDAR_PROERTY_SEQUENCE]; +} + +- (void)incrementSequenceNumber +{ + [self setSequenceNumber:([self sequenceNumber] + 1)]; +} + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarContentLine.h b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarContentLine.h new file mode 100755 index 0000000000000000000000000000000000000000..f87ffac231712d0efc387f1db93ef07e18c09e49 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarContentLine.h @@ -0,0 +1,41 @@ +// +// CGICalendarContentLine.h +// +// Created by Satoshi Konno on 11/01/28. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import <Foundation/Foundation.h> + +#import "CGICalendarProperty.h" + +#define CG_ICALENDAR_CONTENTLINE_TERM @"\r\n" +#define CG_ICALENDAR_CONTENTLINE_FOLDING_SPACE @" " +#define CG_ICALENDAR_CONTENTLINE_FOLDING_TAB @"\t" +#define CG_ICALENDAR_CONTENTLINE_DELIM @":" +#define CG_ICALENDAR_CONTENTLINE_NAMEPARAM_DELIM @";" + +#define CG_ICALENDAR_CONTENTLINE_NAME_BEGIN @"BEGIN" +#define CG_ICALENDAR_CONTENTLINE_NAME_END @"END" + +#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VCALENDAR @"VCALENDAR" +#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VEVENT @"VEVENT" +#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VJOURNAL @"VJOURNAL" +#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VFREEBUSY @"VFREEBUSY" +#define CG_ICALENDAR_CONTENTLINE_CONPONENT_VTIMEZONE @"VTIMEZONE" + +@interface CGICalendarContentLine : CGICalendarProperty { + +} ++ (BOOL)IsFoldingLineString:(NSString *)aString; ++ (id)contentLineWithString:(NSString *)aString; + +- (id)init; +- (id)initWithString:(NSString *)aString; +- (void)setString:(NSString *)aString; + +- (NSString *)description; + +- (BOOL)isBegin; +- (BOOL)isEnd; +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarContentLine.m b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarContentLine.m new file mode 100755 index 0000000000000000000000000000000000000000..390e9c2adae1edaaf42fafc6ef88f8c9a5595742 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarContentLine.m @@ -0,0 +1,183 @@ +// +// CGICalendarContentLine.m +// +// Created by Satoshi Konno on 11/01/28. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import "CGICalendarContentLine.h" + +/* + The following notation defines the lines of content in an iCalendar + object: + + contentline = name *(";" param ) ":" value CRLF + ; This ABNF is just a general definition for an initial parsing + ; of the content line into its property name, parameter list, + ; and value string + + ; When parsing a content line, folded lines MUST first + ; be unfolded according to the unfolding procedure + ; described above. When generating a content line, lines + ; longer than 75 octets SHOULD be folded according to + ; the folding procedure described above. + + name = x-name / iana-token + + iana-token = 1*(ALPHA / DIGIT / "-") + ; iCalendar identifier registered with IANA + + x-name = "X-" [vendorid "-"] 1*(ALPHA / DIGIT / "-") + ; Reservered for experimental use. Not intended for use in + ; released products. + + vendorid = 3*(ALPHA / DIGIT) ;Vendor identification + + param = param-name "=" param-value + *("," param-value) + ; Each property defines the specific ABNF for the parameters + ; allowed on the property. Refer to specific properties for + ; precise parameter ABNF. + + param-name = iana-token / x-token + + param-value = paramtext / quoted-string + + paramtext = *SAFE-CHAR + + value = *VALUE-CHAR + + quoted-string = DQUOTE *QSAFE-CHAR DQUOTE + + NON-US-ASCII = %x80-F8 + ; Use restricted by charset parameter + ; on outer MIME object (UTF-8 preferred) + + QSAFE-CHAR = WSP / %x21 / %x23-7E / NON-US-ASCII + ; Any character except CTLs and DQUOTE + + SAFE-CHAR = WSP / %x21 / %x23-2B / %x2D-39 / %x3C-7E + / NON-US-ASCII + ; Any character except CTLs, DQUOTE, ";", ":", "," + + VALUE-CHAR = WSP / %x21-7E / NON-US-ASCII + ; Any textual character + + CR = %x0D + ; carriage return + + LF = %x0A + ; line feed + + CRLF = CR LF + ; Internet standard newline + + CTL = %x00-08 / %x0A-1F / %x7F + ; Controls + + ALPHA = %x41-5A / %x61-7A ; A-Z / a-z + + DIGIT = %x30-39 + ; 0-9 + + DQUOTE = %x22 + ; Quotation Mark + + WSP = SPACE / HTAB + + SPACE = %x20 + + HTAB = %x09 + */ + +@implementation CGICalendarContentLine + ++ (BOOL)IsFoldingLineString:(NSString *)aString +{ + if ([aString hasPrefix:CG_ICALENDAR_CONTENTLINE_FOLDING_SPACE] || [aString hasPrefix:CG_ICALENDAR_CONTENTLINE_FOLDING_TAB]) + return YES; + return NO; +} + ++ (id)contentLineWithString:(NSString *)aString +{ + CGICalendarContentLine *icalContentLine = [[CGICalendarContentLine alloc] initWithString:aString]; + return icalContentLine; +} + +- (id)init +{ + if ((self = [super init])) { + } + return self; +} + +- (id)initWithString:(NSString *)aString +{ + if ((self = [self init])) { + [self setString:aString]; + } + return self; +} + +- (void)setString:(NSString *)aString +{ + NSString *nowNewLineString = [aString stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]; + NSArray *values = [nowNewLineString componentsSeparatedByString:CG_ICALENDAR_CONTENTLINE_DELIM]; + int valuesCnt = (int)[values count]; + if (valuesCnt < 2) + return; + + NSArray *nameParams = [[values objectAtIndex:0] componentsSeparatedByString:CG_ICALENDAR_CONTENTLINE_NAMEPARAM_DELIM]; + NSMutableArray *params = [NSMutableArray array]; + int nameParamsCnt = (int)[nameParams count]; + for (int n=0; n<nameParamsCnt; n++) { + if (n == 0) { + [self setName:[nameParams objectAtIndex:0]]; + continue; + } + CGICalendarParameter *icalParam = [[CGICalendarParameter alloc] initWithString:[nameParams objectAtIndex:n]]; + [params addObject:icalParam]; + } + [self setParameters:params]; + + NSMutableString *valueString = [NSMutableString string]; + for (int n=1; n<valuesCnt; n++) { + if (1 < n) + [valueString appendString:CG_ICALENDAR_CONTENTLINE_DELIM]; + [valueString appendString:[values objectAtIndex:n]]; + } + [self setValue:valueString]; +} + +- (NSString *)description; +{ + NSMutableString *contentLine = [NSMutableString string]; + if ([self hasName]) + [contentLine appendString:[self name]]; + + for (CGICalendarParameter *param in [self parameters]) { + [contentLine appendString:CG_ICALENDAR_CONTENTLINE_NAMEPARAM_DELIM]; + [contentLine appendString:[param string]]; + } + + [contentLine appendString:CG_ICALENDAR_CONTENTLINE_DELIM]; + if ([self hasValue]) + [contentLine appendString:[self value]]; + + [contentLine appendString:CG_ICALENDAR_CONTENTLINE_TERM]; + + return contentLine; +} + +- (BOOL)isBegin +{ + return [self isName:CG_ICALENDAR_CONTENTLINE_NAME_BEGIN]; +} + +- (BOOL)isEnd +{ + return [self isName:CG_ICALENDAR_CONTENTLINE_NAME_END]; +} + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarObject.h b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarObject.h new file mode 100755 index 0000000000000000000000000000000000000000..7538b51fb1cf694271839acc9f81fedd2cef3648 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarObject.h @@ -0,0 +1,42 @@ +// +// CGICalendarObject.h +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import <Foundation/Foundation.h> + +#import "CGICalendarComponent.h" +#import "CGICalendarProperty.h" + +#define CG_ICALENDAR_OBJECT_VERSION_DEFAULT @"2.0" +#define CG_ICALENDAR_OBJECT_PRODID_DEFAULT @"//CyberGarage//iCal4ObjC//EN" + +@interface CGICalendarObject : CGICalendarComponent { + +} + ++ (id)object; ++ (id)objectWithProdid:(NSString *)prodid; ++ (id)objectWithProdid:(NSString *)prodid version:(NSString *)version; + +- (id)init; +- (id)initWithProdid:(NSString *)prodid; +- (id)initWithProdid:(NSString *)prodid version:(NSString *)version; + +- (void)setVersion:(NSString *)version; +- (NSString *)version; + +- (void)setProdid:(NSString *)prodid; +- (NSString *)prodid; + +- (NSArray *)componentsWithType:(NSString *)type; +- (NSArray *)events; +- (NSArray *)todos; +- (NSArray *)journals; +- (NSArray *)freebusies; +- (NSArray *)timezones; + +@end + diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarObject.m b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarObject.m new file mode 100755 index 0000000000000000000000000000000000000000..7a388f19babb32ca8796ee35c9f5865dfbf87084 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarObject.m @@ -0,0 +1,129 @@ +// +// CGICalendarObject.m +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import "CGICalendarObject.h" + +#define CG_ICALENDAR_OBJECT_TYPE_DEFAULT @"VCALENDAR" +#define CG_ICALENDAR_OBJECT_VERSION_PARAM @"VERSION" +#define CG_ICALENDAR_OBJECT_PRODID_PARAM @"PRODID" + +@implementation CGICalendarObject + +#pragma mark - +#pragma mark Global + ++ (id)object +{ + return [[CGICalendarObject alloc] init]; +} + ++ (id)objectWithProdid:(NSString *)prodid +{ + return [[CGICalendarObject alloc] initWithProdid:prodid]; +} + ++ (id)objectWithProdid:(NSString *)prodid version:(NSString *)version +{ + return [[CGICalendarObject alloc] initWithProdid:prodid version:version]; +} + +#pragma mark - +#pragma mark Initialize + +- (id)init +{ + if ((self = [super init])) { + [self setType:CG_ICALENDAR_OBJECT_TYPE_DEFAULT]; + [self setVersion:CG_ICALENDAR_OBJECT_VERSION_DEFAULT]; + [self setProdid:CG_ICALENDAR_OBJECT_PRODID_DEFAULT]; + } + return self; +} + +- (id)initWithProdid:(NSString *)prodid version:(NSString *)version; +{ + if ((self = [super init])) { + [self setType:CG_ICALENDAR_OBJECT_TYPE_DEFAULT]; + [self setVersion:version]; + [self setProdid:prodid]; + } + return self; +} + +- (id)initWithProdid:(NSString *)prodid +{ + if ((self = [super init])) { + [self setType:CG_ICALENDAR_OBJECT_TYPE_DEFAULT]; + [self setVersion:CG_ICALENDAR_OBJECT_VERSION_DEFAULT]; + [self setProdid:prodid]; + } + return self; +} + +#pragma mark - +#pragma mark Property Utility Methods + +- (void)setVersion:(NSString *)version +{ + [self setPropertyValue:version forName:CG_ICALENDAR_OBJECT_VERSION_PARAM]; +} + +- (NSString *)version +{ + return [self propertyValueForName:CG_ICALENDAR_OBJECT_VERSION_PARAM]; +} + +- (void)setProdid:(NSString *)prodid +{ + [self setPropertyValue:prodid forName:CG_ICALENDAR_OBJECT_PRODID_PARAM]; +} + +- (NSString *)prodid +{ + return [self propertyValueForName:CG_ICALENDAR_OBJECT_PRODID_PARAM]; +} + +#pragma mark - +#pragma mark conponents + +- (NSArray *)componentsWithType:(NSString *)type +{ + NSMutableArray *typeComponents = [NSMutableArray array]; + for (CGICalendarComponent *icalComponent in [self components]) { + if ([icalComponent isType:type] == NO) + continue; + [typeComponents addObject:icalComponent]; + } + return typeComponents; +} + +- (NSArray *)events +{ + return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_EVENT]; +} + +- (NSArray *)todos +{ + return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_TODO]; +} + +- (NSArray *)journals +{ + return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_JOURNAL]; +} + +- (NSArray *)freebusies +{ + return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_FREEBUSY]; +} + +- (NSArray *)timezones +{ + return [self componentsWithType:CG_ICALENDAR_COMPONENT_TYPE_TIMEZONE]; +} + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarParameter.h b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarParameter.h new file mode 100755 index 0000000000000000000000000000000000000000..ee5a54d907a8a0dd7db1f0827f00baca2eb2240f --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarParameter.h @@ -0,0 +1,18 @@ +// +// CGICalendarParameter.h +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import <Foundation/Foundation.h> +#import "CGICalendarValue.h" + +@interface CGICalendarParameter : CGICalendarValue { + +} +- (id)init; +- (id)initWithString:(NSString *)aString; +- (void)setString:(NSString *)aString; +- (NSString *) string; +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarParameter.m b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarParameter.m new file mode 100755 index 0000000000000000000000000000000000000000..c6044896e5c61b52f479a36b80ce65d2b51d95aa --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarParameter.m @@ -0,0 +1,46 @@ +// +// CGICalendarParameter.m +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import "CGICalendarParameter.h" + +#define CG_ICALENDAR_PARAMETER_DELIM @"=" + +@implementation CGICalendarParameter + +- (id)init +{ + if ((self = [super init])) { + } + return self; +} + +- (id)initWithString:(NSString *)aString +{ + if ((self = [self init])) { + [self setString:aString]; + } + return self; +} + +- (void)setString:(NSString *)aString +{ + NSArray *values = [aString componentsSeparatedByString:CG_ICALENDAR_PARAMETER_DELIM]; + if ([values count] < 2) + return; + [self setName:[values objectAtIndex:0]]; + [self setValue:[values objectAtIndex:1]]; +} + +- (NSString *) string; +{ + return [NSString stringWithFormat:@"%@%@%@", + [self name] ? [self name] : @"", + CG_ICALENDAR_PARAMETER_DELIM, + [self value] ? [self value] : @""]; +} + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarProperty.h b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarProperty.h new file mode 100755 index 0000000000000000000000000000000000000000..a2d4003cbd33a503226b670696938e1e7b520d2d --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarProperty.h @@ -0,0 +1,78 @@ +// +// CGICalendarProperty.h +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import <Foundation/Foundation.h> +#import "CGICalendarValue.h" +#import "CGICalendarParameter.h" + +#define CG_ICALENDAR_PROERTY_PARTSTAT @"PARTSTAT" + +#define CG_ICALENDAR_PROERTY_COMPLETED @"COMPLETED" +#define CG_ICALENDAR_PROERTY_DTEND @"DTEND" +#define CG_ICALENDAR_PROERTY_DUE @"DUE" +#define CG_ICALENDAR_PROERTY_DTSTART @"DTSTART" + +// 4.8.1 Descriptive Component Properties + +#define CG_ICALENDAR_PROERTY_DESCRIPTION @"DESCRIPTION" +#define CG_ICALENDAR_PROERTY_PRIORITY @"PRIORITY" +#define CG_ICALENDAR_PROERTY_SUMMARY @"SUMMARY" + +// 4.8.4 Relationship Component Properties +#define CG_ICALENDAR_PROERTY_UID @"UID" + +// 4.8.7 Change Management Component Properties + +#define CG_ICALENDAR_PROERTY_CREATED @"CREATED" +#define CG_ICALENDAR_PROERTY_DTSTAMP @"DTSTAMP" +#define CG_ICALENDAR_PROERTY_LASTMODIFIED @"LAST-MODIFIED" +#define CG_ICALENDAR_PROERTY_SEQUENCE @"SEQUENCE" + +enum { + CGICalendarParticipationStatusUnkown = 0, + CGICalendarParticipationStatusNeedsAction, + CGICalendarParticipationStatusAccepted, + CGICalendarParticipationStatusDeclined, + CGICalendarParticipationStatusTentative, + CGICalendarParticipationStatusDelegated, + CGICalendarParticipationStatusCompleted, + CGICalendarParticipationStatusInProcess, +}; + +@interface CGICalendarProperty : CGICalendarValue { +} +@property(retain) NSMutableArray *parameters; + +- (id)init; + +- (BOOL)hasParameterForName:(NSString *)name; +- (void)addParameter:(CGICalendarParameter *)parameter; +- (void)removeParameterForName:(NSString *)name; + +- (void)setParameterValue:(NSString *)value forName:(NSString *)name; +- (void)setParameterValue:(NSString *)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +- (void)setParameterObject:(id)object forName:(NSString *)name; +- (void)setParameterObject:(id)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +- (void)setParameterDate:(NSDate *)object forName:(NSString *)name; +- (void)setParameterDate:(NSDate *)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +- (void)setParameterInteger:(int)value forName:(NSString *)name; +- (void)setParameterInteger:(int)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +- (void)setParameterFloat:(float)value forName:(NSString *)name; +- (void)setParameterFloat:(float)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; + +- (CGICalendarParameter *)parameterAtIndex:(NSUInteger)index; +- (CGICalendarParameter *)parameterForName:(NSString *)name; +- (NSArray *)allParameterKeys; +- (NSString *)parameterValueForName:(NSString *)name; +- (NSDate *)parameterDateForName:(NSString *)name; +- (int)parameterIntegerForName:(NSString *)name; +- (float)parameterFloatForName:(NSString *)name; + +- (void)setParticipationStatus:(int)value; +- (int)participationStatus; + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarProperty.m b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarProperty.m new file mode 100755 index 0000000000000000000000000000000000000000..86b38df45f0943db885c67f5294882a9fa95f2bc --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarProperty.m @@ -0,0 +1,228 @@ +// +// CGICalendarProperty.m +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import "CGICalendarProperty.h" +#import "CGICalendarContentLine.h" +#import "NSDate+CGICalendar.h" + +@implementation CGICalendarProperty + +@synthesize parameters; + +- (id)init +{ + if ((self = [super init])) { + } + return self; +} + +#pragma mark - +#pragma mark Parameter + +- (BOOL)hasParameterForName:(NSString *)name +{ + for (CGICalendarParameter *icalProp in [self parameters]) { + if ([icalProp isName:name]) { + [[self parameters] removeObject:icalProp]; + return YES; + } + } + return NO; +} + +- (void)addParameter:(CGICalendarParameter *)parameter +{ + [[self parameters] addObject:parameter]; +} + +- (void)removeParameterForName:(NSString *)name +{ + for (CGICalendarParameter *icalProp in [self parameters]) { + if ([icalProp isName:name]) { + [[self parameters] removeObject:icalProp]; + return; + } + } +} + +- (void)setParameterValue:(NSString *)value forName:(NSString *)name +{ + CGICalendarParameter *icalProp = [self parameterForName:name]; + if (icalProp == nil) { + icalProp = [[CGICalendarParameter alloc] init]; + [icalProp setName:name]; + [self addParameter:icalProp]; + } + [icalProp setValue:value]; +} + +- (void)setParameterValue:(NSString *)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames; +{ + [self setParameterValue:value forName:name parameterValues:[NSArray array] parameterNames:[NSArray array]]; +} + +- (void)setParameterObject:(id)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames +{ + [self setParameterValue:[object description] forName:name parameterValues:parameterValues parameterNames:parameterNames]; +} + +- (void)setParameterObject:(id)object forName:(NSString *)name +{ + [self setParameterValue:[object description] forName:name]; +} + +- (void)setParameterDate:(NSDate *)object forName:(NSString *)name +{ + [self setParameterValue:[object descriptionICalendar] forName:name]; +} + +- (void)setParameterDate:(NSDate *)object forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames +{ + [self setParameterValue:[object descriptionICalendar] forName:name parameterValues:parameterValues parameterNames:parameterNames]; +} + +- (void)setParameterInteger:(int)value forName:(NSString *)name +{ + [self setParameterValue:[[NSNumber numberWithInteger:value] stringValue] forName:name parameterValues:[NSArray array] parameterNames:[NSArray array]]; +} + +- (void)setParameterInteger:(int)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames +{ + [self setParameterValue:[[NSNumber numberWithInteger:value] stringValue] forName:name parameterValues:parameterValues parameterNames:parameterNames]; +} + +- (void)setParameterFloat:(float)value forName:(NSString *)name +{ + [self setParameterValue:[[NSNumber numberWithFloat:value] stringValue] forName:name parameterValues:[NSArray array] parameterNames:[NSArray array]]; +} + +- (void)setParameterFloat:(float)value forName:(NSString *)name parameterValues:(NSArray *)parameterValues parameterNames:(NSArray *)parameterNames +{ + [self setParameterValue:[[NSNumber numberWithFloat:value] stringValue] forName:name parameterValues:parameterValues parameterNames:parameterNames]; +} + +- (id)parameterAtIndex:(NSUInteger)index +{ + return [[self parameters] objectAtIndex:index]; +} + +- (CGICalendarParameter *)parameterForName:(NSString *)name +{ + for (CGICalendarParameter *icalProp in [self parameters]) { + if ([icalProp isName:name]) + return icalProp; + } + return nil; +} + +- (NSArray *)allParameterKeys +{ + NSMutableArray *keys = [NSMutableArray array]; + for (CGICalendarParameter *icalProp in [self parameters]) + [keys addObject:[icalProp name]]; + return keys; +} + +- (NSString *)parameterValueForName:(NSString *)name +{ + for (CGICalendarParameter *icalProp in [self parameters]) { + if ([icalProp isName:name]) + return [icalProp value]; + } + return nil; +} + +- (NSDate *)parameterDateForName:(NSString *)name +{ + for (CGICalendarParameter *icalProp in [self parameters]) { + if ([icalProp isName:name]) + return [icalProp dateValue]; + } + return nil; +} + +- (int)parameterIntegerForName:(NSString *)name; +{ + for (CGICalendarParameter *icalProp in [self parameters]) { + if ([icalProp isName:name]) + return [icalProp integerValue]; + } + return 0; +} + +- (float)parameterFloatForName:(NSString *)name; +{ + for (CGICalendarParameter *icalProp in [self parameters]) { + if ([icalProp isName:name]) + return [icalProp floatValue]; + } + return 0; +} + +#pragma mark - +#pragma mark String + +- (NSString *)description +{ + NSMutableString *propertyString = [NSMutableString string]; + + [propertyString appendFormat:@"%@", [self name]]; + + for (CGICalendarParameter *icalParam in [self parameters]) + [propertyString appendFormat:@";%@", [icalParam description]]; + + [propertyString appendFormat:@"%:%@%@", ((0 < [[self value] length]) ? [self value] : @""), CG_ICALENDAR_CONTENTLINE_TERM]; + + return propertyString; +} + +#pragma mark - +#pragma mark ParticipationStatus + +- (NSArray *)participationStatusStrings +{ + static NSArray *statusStrings = nil; + + if (statusStrings == nil) { + statusStrings = [NSArray arrayWithObjects: + @"", + @"NEEDS-ACTION", + @"ACCEPTED", + @"DECLINED", + @"TENTATIVE", + @"DELEGATED", + @"COMPLETED", + @"IN-PROCESS", + nil]; + } + + return statusStrings; +} + +- (void)setParticipationStatus:(int)status +{ + NSArray *statusStrings = [self participationStatusStrings]; + if (status < 0 || ([statusStrings count]-1) < status) + return; + [self setValue:[statusStrings objectAtIndex:status]]; +} + +- (int)participationStatus +{ + if ([self value] == nil) + return CGICalendarParticipationStatusUnkown; + + NSArray *statusStrings = [self participationStatusStrings]; + for (int n=0; n<[statusStrings count]; n++) { + if ([[self value] isEqualToString:[statusStrings objectAtIndex:n]]) + return n; + } + + return CGICalendarParticipationStatusUnkown; +} + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarValue.h b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarValue.h new file mode 100755 index 0000000000000000000000000000000000000000..d1020fa7080ba4ee08dcac24671f5fc7d43f87f0 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarValue.h @@ -0,0 +1,50 @@ +// +// CGICalendarValue.h +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import <Foundation/Foundation.h> + +enum { + CGICalendarValueTypeUnknown = 0, + CGICalendarValueTypeBinary, + CGICalendarValueTypeBoolean, + CGICalendarValueTypeCalendarUserAddress, + CGICalendarValueTypeDate, + CGICalendarValueTypeDateTime, + CGICalendarValueTypeDuration, + CGICalendarValueTypeFloat, + CGICalendarValueTypeInteger, + CGICalendarValueTypePeriodOfTime, + CGICalendarValueTypeRecurrenceRule, + CGICalendarValueTypeText, + CGICalendarValueTypeTime, + CGICalendarValueTypeURI, + CGICalendarValueTypeUTCOffset, +}; + +@interface CGICalendarValue : NSObject { + +} +@property(assign) int type; +@property(retain) NSString *name; +@property(retain) NSString *value; + +- (id)init; + +- (BOOL)hasName; +- (BOOL)hasValue; + +- (BOOL)isName:(NSString *)aName; +- (BOOL)isValue:(NSString *)aValue; + +- (void)setObject:(id)value; +- (void)setDate:(NSDate *)value; + +- (NSDate *)dateValue; +- (int)integerValue; +- (float)floatValue; + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarValue.m b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarValue.m new file mode 100755 index 0000000000000000000000000000000000000000..4364c11e4d5ce3a0b196d47b5102bdc8050cfead --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/CGICalendarValue.m @@ -0,0 +1,77 @@ +// +// CGICalendarValue.m +// +// Created by Satoshi Konno on 11/01/27. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import "CGICalendarValue.h" +#import "NSDate+CGICalendar.h" + +@implementation CGICalendarValue + +@synthesize type; +@synthesize value; +@synthesize name; + +- (id)init +{ + if ((self = [super init])) { + } + return self; +} + +- (BOOL)hasName +{ + if ([self name] != nil && 0 < [[self name] length]) + return YES; + return NO; +} + +- (BOOL)hasValue +{ + if ([self value] != nil && 0 < [[self value] length]) + return YES; + return NO; +} + +- (BOOL)isName:(NSString *)aName +{ + if (aName == nil || [aName length] <= 0) + return NO; + return [aName isEqualToString:[self name]]; +} + +- (BOOL)isValue:(NSString *)aValue +{ + if (aValue == nil || [aValue length] <= 0) + return NO; + return [aValue isEqualToString:[self value]]; +} + +- (void)setObject:(id)aValue +{ + [self setValue:[value description]]; +} + +- (void)setDate:(NSDate *)aValue +{ + [self setValue:[aValue descriptionICalendar]]; +} + +- (NSDate *)dateValue +{ + return [NSDate dateWithICalendarString:[self value]]; +} + +- (int)integerValue +{ + return [[self value] integerValue]; +} + +- (float)floatValue +{ + return [[self value] floatValue]; +} + +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/NSDate+CGICalendar.h b/WPI Calendar Event Creator/iCalObjCSDK/NSDate+CGICalendar.h new file mode 100755 index 0000000000000000000000000000000000000000..3e649c81c35ecb34c4bba7a0d79ad9911da74e95 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/NSDate+CGICalendar.h @@ -0,0 +1,16 @@ +// +// NSDate+CGICalendar.h +// +// Created by Satoshi Konno on 5/12/11. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import <Foundation/Foundation.h> + + +@interface NSDate(CGICalendar) ++ (id)dateWithICalendarString:(NSString *)aString; ++ (id)dateWithICalendarISO8601:(NSString *)aString; +- (NSString *)descriptionICalendar; +- (NSString *)descriptionISO8601; +@end diff --git a/WPI Calendar Event Creator/iCalObjCSDK/NSDate+CGICalendar.m b/WPI Calendar Event Creator/iCalObjCSDK/NSDate+CGICalendar.m new file mode 100755 index 0000000000000000000000000000000000000000..18a8339431cf4011bd33447a164083d87f4a1ba9 --- /dev/null +++ b/WPI Calendar Event Creator/iCalObjCSDK/NSDate+CGICalendar.m @@ -0,0 +1,49 @@ +// +// NSDate+CGICalendar.m +// +// Created by Satoshi Konno on 5/12/11. +// Copyright 2011 Satoshi Konno. All rights reserved. +// + +#import "NSDate+CGICalendar.h" + +#define CGNSDATE_ICALENDAR_DATETMEFORMAT @"YYYYMMdd'T'kkmmss'Z'" +#define CGNSDATE_ISO8601_DATETMEFORMAT @"YYYY-MM-dd kk:mm:ss" + +@implementation NSDate(CGICalendar) + ++ (id)dateWithICalendarString:(NSString *)aString +{ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; + [dateFormatter setTimeZone:timeZone]; + [dateFormatter setDateFormat:CGNSDATE_ICALENDAR_DATETMEFORMAT]; + return [dateFormatter dateFromString:aString]; +} + ++ (id)dateWithICalendarISO8601:(NSString *)aString +{ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setTimeStyle:NSDateFormatterFullStyle]; + [dateFormatter setDateFormat:CGNSDATE_ISO8601_DATETMEFORMAT]; + return [dateFormatter dateFromString:aString]; +} + +- (NSString *)descriptionICalendar +{ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; + [dateFormatter setTimeZone:timeZone]; + [dateFormatter setDateFormat:CGNSDATE_ICALENDAR_DATETMEFORMAT]; + return [dateFormatter stringFromDate:self]; +} + +- (NSString *)descriptionISO8601 +{ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setLocale:[NSLocale systemLocale]]; + [dateFormatter setDateFormat:CGNSDATE_ISO8601_DATETMEFORMAT]; + return [dateFormatter stringFromDate:self]; +} + +@end diff --git a/WPI Calendar Event Creator/rsz_wpicalendareventcreatorappicon.png b/WPI Calendar Event Creator/rsz_wpicalendareventcreatorappicon.png new file mode 100644 index 0000000000000000000000000000000000000000..888958d0407726e394a770211cf87d547e1aad2d Binary files /dev/null and b/WPI Calendar Event Creator/rsz_wpicalendareventcreatorappicon.png differ