From 39e6f2e9f49d70bf1beb6387c5b6dea7f17ceb71 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 4 Aug 2011 16:03:10 +0000 Subject: [PATCH] Monotone-Parent: 035a671feed8f154d8e786d8b3761b3e87ac550d Monotone-Revision: 8cd19ba9e8a20041d1dc3728821c9ff63f99c6da Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-08-04T16:03:10 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 1 + OpenChange/MAPIStoreDraftsMessage.m | 93 ++++++++++++++++++----------- OpenChange/MAPIStoreMailMessage.h | 2 + 3 files changed, 61 insertions(+), 35 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4a98d438f..976a59f79 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,7 @@ possibly have such objects as value for sogoObject. (-getPrImportance:inMemCtx:): overriden method. (-getPrReceivedByEmailAddress:inMemCtx:): overriden method. + (-getPrSenderEmailAddress:inMemCtx:): overriden method. * OpenChange/MAPIApplication.m (+isCachingEnabled): new overriden method that returns "NO" in order to avoid leaking dictionaries diff --git a/OpenChange/MAPIStoreDraftsMessage.m b/OpenChange/MAPIStoreDraftsMessage.m index 127888126..fe89c0127 100644 --- a/OpenChange/MAPIStoreDraftsMessage.m +++ b/OpenChange/MAPIStoreDraftsMessage.m @@ -41,7 +41,7 @@ #include #include -static Class NGMailAddressK, SOGoDraftObjectK; +static Class NGMailAddressK, NSArrayK, SOGoDraftObjectK; typedef void (*getMessageData_inMemCtx_) (MAPIStoreMessage *, SEL, struct mapistore_message **, @@ -52,6 +52,7 @@ typedef void (*getMessageData_inMemCtx_) (MAPIStoreMessage *, SEL, + (void) initialize { NGMailAddressK = [NGMailAddress class]; + NSArrayK = [NSArray class]; SOGoDraftObjectK = [SOGoDraftObject class]; } @@ -309,43 +310,65 @@ e) [self _saveAttachment: [attachmentKeys objectAtIndex: count]]; } +- (int) _getAddressHeader: (void **) data + addressKey: (NSString *) key + inMemCtx: (TALLOC_CTX *) memCtx +{ + NSString *stringValue, *address; + NGMailAddress *currentAddress; + NGMailAddressParser *parser; + id to; + + if (!headerSetup) + { + [sogoObject fetchInfo]; + headerSetup = YES; + } + + stringValue = @""; + + to = [[sogoObject headers] objectForKey: @"to"]; + if ([to isKindOfClass: NSArrayK]) + { + if ([to count] > 0) + address = [to objectAtIndex: 0]; + else + address = @""; + } + else + address = to; + + parser = [NGMailAddressParser mailAddressParserWithString: address]; + currentAddress = [parser parse]; + if ([currentAddress isKindOfClass: NGMailAddressK]) + { + stringValue = [currentAddress address]; + if (!stringValue) + stringValue = @""; + } + *data = [stringValue asUnicodeInMemCtx: memCtx]; + + return MAPISTORE_SUCCESS; +} + +- (int) getPrSenderEmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + return ([sogoObject isKindOfClass: SOGoDraftObjectK] + ? [self _getAddressHeader: data + addressKey: @"from" + inMemCtx: memCtx] + : [super getPrSenderEmailAddress: data inMemCtx: memCtx]); +} + - (int) getPrReceivedByEmailAddress: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { - NSString *stringValue; - NGMailAddress *currentAddress; - NGMailAddressParser *parser; - NSArray *to; - - if ([sogoObject isKindOfClass: SOGoDraftObjectK]) - { - stringValue = @""; - - if (!headerSetup) - { - [sogoObject fetchInfo]; - headerSetup = YES; - } - - to = [[sogoObject headers] objectForKey: @"to"]; - if ([to count] > 0) - { - parser = [NGMailAddressParser - mailAddressParserWithString: [to objectAtIndex: 0]]; - currentAddress = [parser parse]; - if ([currentAddress isKindOfClass: NGMailAddressK]) - { - stringValue = [currentAddress address]; - if (!stringValue) - stringValue = @""; - } - } - *data = [stringValue asUnicodeInMemCtx: memCtx]; - } - else - [super getPrReceivedByEmailAddress: data inMemCtx: memCtx]; - - return MAPISTORE_SUCCESS; + return ([sogoObject isKindOfClass: SOGoDraftObjectK] + ? [self _getAddressHeader: data + addressKey: @"to" + inMemCtx: memCtx] + : [super getPrReceivedByEmailAddress: data inMemCtx: memCtx]); } - (NSArray *) attachmentKeysMatchingQualifier: (EOQualifier *) qualifier diff --git a/OpenChange/MAPIStoreMailMessage.h b/OpenChange/MAPIStoreMailMessage.h index 98866a2d3..e94527a75 100644 --- a/OpenChange/MAPIStoreMailMessage.h +++ b/OpenChange/MAPIStoreMailMessage.h @@ -54,6 +54,8 @@ inMemCtx: (TALLOC_CTX *) memCtx; - (int) getPrReceivedByEmailAddress: (void **) data inMemCtx: (TALLOC_CTX *) memCtx; +- (int) getPrSenderEmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; @end