diff --git a/ChangeLog b/ChangeLog index dd334e70b..ece013a23 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2011-03-08 Wolfgang Sourdeau + + * OpenChange/MAPIStoreCalendarMessage.m (-save): accept entries + with an "x500dn" record since they are now properly converted. + + * OpenChange/MAPIStoreContext.m (_convertRecipientFromRow:): + properly find out the coordinates of internal users. + 2011-03-07 Wolfgang Sourdeau * OpenChange/MAPIStoreFSFolder.m (-createMessage): fixed typo that diff --git a/OpenChange/MAPIStoreCalendarMessage.m b/OpenChange/MAPIStoreCalendarMessage.m index 057d4079d..e499022e0 100644 --- a/OpenChange/MAPIStoreCalendarMessage.m +++ b/OpenChange/MAPIStoreCalendarMessage.m @@ -308,8 +308,7 @@ [person setRole: @"REQ-PARTICIPANT"]; // FIXME: We must NOT always rely on this - if (![dict objectForKey: @"x500dn"] - && ![vEvent isAttendee: [person rfc822Email]]) + if (![vEvent isAttendee: [person rfc822Email]]) [vEvent addToAttendees: person]; [person release]; diff --git a/OpenChange/MAPIStoreContext.m b/OpenChange/MAPIStoreContext.m index d413361cc..4b4fee2a2 100644 --- a/OpenChange/MAPIStoreContext.m +++ b/OpenChange/MAPIStoreContext.m @@ -31,6 +31,8 @@ #import +#import + #import "SOGoMAPIFSFolder.h" #import "SOGoMAPIFSMessage.h" @@ -1071,6 +1073,7 @@ _prepareContextClass (struct mapistore_context *newMemCtx, { NSMutableDictionary *recipient; NSString *value; + SOGoUser *recipientUser; recipient = [NSMutableDictionary dictionaryWithCapacity: 5]; @@ -1078,37 +1081,50 @@ _prepareContextClass (struct mapistore_context *newMemCtx, { value = [NSString stringWithUTF8String: row->X500DN.recipient_x500name]; [recipient setObject: value forKey: @"x500dn"]; - } - switch ((row->RecipientFlags & 0x208)) - { - case 0x08: - // TODO: we cheat - value = [NSString stringWithUTF8String: row->EmailAddress.lpszA]; - break; - case 0x208: - value = [NSString stringWithUTF8String: row->EmailAddress.lpszW]; - break; - default: - value = nil; + recipientUser = [SOGoUser userWithLogin: [value lowercaseString]]; + if (recipientUser) + { + value = [recipientUser cn]; + if ([value length] > 0) + [recipient setObject: value forKey: @"fullName"]; + value = [[recipientUser allEmails] objectAtIndex: 0]; + if ([value length] > 0) + [recipient setObject: value forKey: @"email"]; + } } - if (value) - [recipient setObject: value forKey: @"email"]; - - switch ((row->RecipientFlags & 0x210)) + else { - case 0x10: - // TODO: we cheat - value = [NSString stringWithUTF8String: row->DisplayName.lpszA]; - break; - case 0x210: - value = [NSString stringWithUTF8String: row->DisplayName.lpszW]; - break; - default: - value = nil; + switch ((row->RecipientFlags & 0x208)) + { + case 0x08: + // TODO: we cheat + value = [NSString stringWithUTF8String: row->EmailAddress.lpszA]; + break; + case 0x208: + value = [NSString stringWithUTF8String: row->EmailAddress.lpszW]; + break; + default: + value = nil; + } + if (value) + [recipient setObject: value forKey: @"email"]; + + switch ((row->RecipientFlags & 0x210)) + { + case 0x10: + // TODO: we cheat + value = [NSString stringWithUTF8String: row->DisplayName.lpszA]; + break; + case 0x210: + value = [NSString stringWithUTF8String: row->DisplayName.lpszW]; + break; + default: + value = nil; + } + if (value) + [recipient setObject: value forKey: @"fullName"]; } - if (value) - [recipient setObject: value forKey: @"fullName"]; return recipient; }