From 7c7cabe4329207a124dac3e4fcdafacb42f3dcf9 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Mon, 13 Jan 2014 16:25:14 -0500 Subject: [PATCH] First pass at organizer/attendees support --- ActiveSync/iCalEvent+ActiveSync.m | 57 +++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/ActiveSync/iCalEvent+ActiveSync.m b/ActiveSync/iCalEvent+ActiveSync.m index a090c42fb..0db3f1cf5 100644 --- a/ActiveSync/iCalEvent+ActiveSync.m +++ b/ActiveSync/iCalEvent+ActiveSync.m @@ -30,6 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #import "iCalEvent+ActiveSync.h" +#import #import #import #import @@ -38,6 +39,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #import #import +#import #include "iCalTimeZone+ActiveSync.h" #include "NSDate+ActiveSync.h" @@ -48,6 +50,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - (NSString *) activeSyncRepresentation { NSMutableString *s; + NSArray *attendees; + + iCalPerson *organizer, *attendee; iCalTimeZone *tz; s = [NSMutableString string]; @@ -74,7 +79,56 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. [s appendFormat: @"%@", [[tz activeSyncRepresentation] stringByReplacingString: @"\n" withString: @""]];; + // Organizer and attendees + if ((organizer = [self organizer])) + { + [s appendFormat: @"%@", [organizer rfc822Email]]; + [s appendFormat: @"%@", [organizer cn]]; + } + attendees = [self attendees]; + + if ([attendees count]) + { + int i, attendee_type, attendee_status; + + [s appendString: @""]; + + for (i = 0; i < [attendees count]; i++) + { + [s appendString: @""]; + + attendee = [attendees objectAtIndex: i]; + [s appendFormat: @"%@", [attendee rfc822Email]]; + [s appendFormat: @"%@", [attendee cn]]; + + + attendee_status = 5; + if ([[attendee partStat] caseInsensitiveCompare: @"ACCEPTED"] == NSOrderedSame) + attendee_status = 3; + else if ([[attendee partStat] caseInsensitiveCompare: @"DECLINED"] == NSOrderedSame) + attendee_status = 4; + else if ([[attendee partStat] caseInsensitiveCompare: @"TENTATIVE"] == NSOrderedSame) + attendee_status = 2; + + [s appendFormat: @"%d", attendee_status]; + + // FIXME: handle resource + if ([[attendee role] caseInsensitiveCompare: @"REQ-PARTICIPANT"] == NSOrderedSame) + attendee_type = 1; + else + attendee_type = 2; + + + [s appendFormat: @"%d", attendee_type]; + + [s appendString: @""]; + + } + + [s appendString: @""]; + } + // Subject -- http://msdn.microsoft.com/en-us/library/ee157192(v=exchg.80).aspx if ([[self summary] length]) [s appendFormat: @"%@", [self summary]]; @@ -95,7 +149,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. } // +// To understand meeting requests/responses, see: // +// http://blogs.msdn.com/b/exchangedev/archive/2011/07/22/working-with-meeting-requests-in-exchange-activesync.aspx +// http://blogs.msdn.com/b/exchangedev/archive/2011/07/29/working-with-meeting-responses-in-exchange-activesync.aspx // - (void) takeActiveSyncValues: (NSDictionary *) theValues {