diff --git a/ChangeLog b/ChangeLog index 58652abbf..901c7d36f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2011-10-12 Wolfgang Sourdeau + + * OpenChange/MAPIStoreAppointmentWrapper.m + (-initWithICalEvent:andUser:andSenderEmail:inTimeZone:): take a + new "senderEmail" parameter in order to help the process of + deducting the attendee in an invitation message not including a + "METHOD". + (-_setupITIPContextFromAttendees): fixed method to set the method + as "REPLY" when the user is organizer rather than the other way + around. + 2011-10-11 Wolfgang Sourdeau * OpenChange/MAPIStoreAppointmentWrapper.m (-_setupITIPContext): diff --git a/OpenChange/MAPIStoreAppointmentWrapper.h b/OpenChange/MAPIStoreAppointmentWrapper.h index 8a76c9ca3..7f14c5401 100644 --- a/OpenChange/MAPIStoreAppointmentWrapper.h +++ b/OpenChange/MAPIStoreAppointmentWrapper.h @@ -42,9 +42,10 @@ extern NSTimeZone *utcTZ; iCalCalendar *calendar; iCalEvent *event; NSTimeZone *timeZone; + SOGoUser *user; + NSString *senderEmail; NSData *globalObjectId; NSData *cleanGlobalObjectId; - SOGoUser *user; BOOL alarmSet; iCalAlarm *alarm; BOOL itipSetup; @@ -54,9 +55,11 @@ extern NSTimeZone *utcTZ; + (id) wrapperWithICalEvent: (iCalEvent *) newEvent andUser: (SOGoUser *) newUser + andSenderEmail: (NSString *) newSenderEmail inTimeZone: (NSTimeZone *) newTimeZone; - (id) initWithICalEvent: (iCalEvent *) newEvent andUser: (SOGoUser *) newUser + andSenderEmail: (NSString *) newSenderEmail inTimeZone: (NSTimeZone *) newTimeZone; /* getters */ diff --git a/OpenChange/MAPIStoreAppointmentWrapper.m b/OpenChange/MAPIStoreAppointmentWrapper.m index dfd64fe3d..0a2d974fc 100644 --- a/OpenChange/MAPIStoreAppointmentWrapper.m +++ b/OpenChange/MAPIStoreAppointmentWrapper.m @@ -77,12 +77,14 @@ static NSCharacterSet *hexCharacterSet = nil; + (id) wrapperWithICalEvent: (iCalEvent *) newEvent andUser: (SOGoUser *) newUser + andSenderEmail: (NSString *) newSenderEmail inTimeZone: (NSTimeZone *) newTimeZone { MAPIStoreAppointmentWrapper *wrapper; wrapper = [[self alloc] initWithICalEvent: newEvent andUser: newUser + andSenderEmail: newSenderEmail inTimeZone: newTimeZone]; [wrapper autorelease]; @@ -96,6 +98,7 @@ static NSCharacterSet *hexCharacterSet = nil; calendar = nil; event = nil; timeZone = nil; + senderEmail = nil; globalObjectId = nil; cleanGlobalObjectId = nil; user = nil; @@ -110,16 +113,33 @@ static NSCharacterSet *hexCharacterSet = nil; - (void) _setupITIPContextFromAttendees { - iCalPerson *attendee; + iCalPerson *attendee = nil; + NSArray *attendees; attendee = [event userAsAttendee: user]; if (attendee) - { - method = @"REPLY"; - partstat = [attendee participationStatus]; - } - else if ([event userIsOrganizer: user]) method = @"REQUEST"; + else if ([event userIsOrganizer: user]) + { + if (senderEmail) + attendee = [event findAttendeeWithEmail: senderEmail]; + if (!attendee) + { + attendees = [event attendees]; + if ([attendees count] == 1) + attendee = [attendees objectAtIndex: 0]; + } + if (attendee) + { + method = @"REPLY"; + partstat = [attendee participationStatus]; + } + else + { + [self logWithFormat: @"no attendee matching sender found"]; + method = nil; + } + } else method = nil; @@ -155,6 +175,7 @@ static NSCharacterSet *hexCharacterSet = nil; - (id) initWithICalEvent: (iCalEvent *) newEvent andUser: (SOGoUser *) newUser + andSenderEmail: (NSString *) newSenderEmail inTimeZone: (NSTimeZone *) newTimeZone { if ((self = [self init])) @@ -163,6 +184,7 @@ static NSCharacterSet *hexCharacterSet = nil; ASSIGN (calendar, [event parent]); ASSIGN (timeZone, newTimeZone); ASSIGN (user, newUser); + ASSIGN (senderEmail, newSenderEmail); [self _setupITIPContext]; } @@ -174,9 +196,10 @@ static NSCharacterSet *hexCharacterSet = nil; [calendar release]; [event release]; [timeZone release]; + [user release]; + [senderEmail release]; [globalObjectId release]; [cleanGlobalObjectId release]; - [user release]; [alarm release]; [method release]; [super dealloc]; diff --git a/OpenChange/MAPIStoreCalendarMessage.m b/OpenChange/MAPIStoreCalendarMessage.m index 9bb87e88e..679935989 100644 --- a/OpenChange/MAPIStoreCalendarMessage.m +++ b/OpenChange/MAPIStoreCalendarMessage.m @@ -109,6 +109,7 @@ ASSIGN (appointmentWrapper, [MAPIStoreAppointmentWrapper wrapperWithICalEvent: event andUser: [[self context] activeUser] + andSenderEmail: nil inTimeZone: [self ownerTimeZone]]); } diff --git a/OpenChange/MAPIStoreMailMessage.m b/OpenChange/MAPIStoreMailMessage.m index 21ea28084..318de559b 100644 --- a/OpenChange/MAPIStoreMailMessage.m +++ b/OpenChange/MAPIStoreMailMessage.m @@ -251,10 +251,10 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) - (MAPIStoreAppointmentWrapper *) _appointmentWrapper { - NSArray *events; + NSArray *events, *from; iCalCalendar *calendar; iCalEvent *event; - NSString *stringValue; + NSString *stringValue, *senderEmail; if (!appointmentWrapper) { @@ -267,9 +267,15 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) if ([events count] > 0) { event = [events objectAtIndex: 0]; + from = [sogoObject fromEnvelopeAddresses]; + if ([from count] > 0) + senderEmail = [[from objectAtIndex: 0] email]; + else + senderEmail = nil; appointmentWrapper = [MAPIStoreAppointmentWrapper wrapperWithICalEvent: event andUser: [[self context] activeUser] + andSenderEmail: senderEmail inTimeZone: [self ownerTimeZone]]; [appointmentWrapper retain]; }