From 53a2c5538a4f74fb6babdc0898be907b1592fd50 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 7 Feb 2011 23:19:02 +0000 Subject: [PATCH] Monotone-Parent: bb660a831898726081ef797a1c2e73f2306dc626 Monotone-Revision: 2ba6874cdb3084059ed1f87ba96e55335c0a6a64 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-02-07T23:19:02 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 11 +++++++ OpenChange/MAPIStoreCalendarMessageTable.m | 2 -- OpenChange/MAPIStoreContactsMessageTable.m | 4 +-- OpenChange/MAPIStoreMailMessageTable.m | 37 +++++++++++++++++++--- OpenChange/MAPIStoreMessageTable.m | 20 +++++++++--- OpenChange/MAPIStoreTasksMessageTable.m | 2 -- 6 files changed, 61 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index d88087c3b..9a62bcb42 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2011-02-07 Wolfgang Sourdeau + * OpenChange/MAPIStoreMailMessageTable.m + (-getChildProperty:forKey:withTag:): return a proper value for + PR_SUBJECT_PREFIX_UNICODE and PR_NORMALIZED_SUBJECT_UNICODE. + + * OpenChange/MAPIStoreMessageTable.m + (-getChildProperty:forKey:withTag:): now return standard values + (checked against doc) for PR_ORIGINAL_SUBJECT_UNICODE, + PR_CONVERSATION_TOPIC_UNICODE, PR_SUBJECT_PREFIX_UNICODE and + PR_NORMALIZED_SUBJECT_UNICODE, the two latter being common to all + modules except MAPIStoreMailMessageTable. + * OpenChange/MAPIStoreContext.m (-openMessage:forKey:inTable:): only return PR_SUBJECT_PREFIX_UNICODE, PR_NORMALIZED_SUBJECT_UNICODE as those are the only fields diff --git a/OpenChange/MAPIStoreCalendarMessageTable.m b/OpenChange/MAPIStoreCalendarMessageTable.m index f02a0daf4..23382fdcd 100644 --- a/OpenChange/MAPIStoreCalendarMessageTable.m +++ b/OpenChange/MAPIStoreCalendarMessageTable.m @@ -102,8 +102,6 @@ // *data = MAPILongValue (memCtx, 0); // break; case PR_SUBJECT_UNICODE: // SUMMARY - case PR_NORMALIZED_SUBJECT_UNICODE: - case PR_CONVERSATION_TOPIC_UNICODE: event = [[self lookupChild: childKey] component: NO secure: NO]; *data = [[event summary] asUnicodeInMemCtx: memCtx]; break; diff --git a/OpenChange/MAPIStoreContactsMessageTable.m b/OpenChange/MAPIStoreContactsMessageTable.m index 16f265c9d..d3f2d14ee 100644 --- a/OpenChange/MAPIStoreContactsMessageTable.m +++ b/OpenChange/MAPIStoreContactsMessageTable.m @@ -145,8 +145,8 @@ case PR_DISPLAY_NAME_UNICODE: // Full Name case PidLidFileUnder: // contact block title name rc = [super getChildProperty: data - forKey: childKey - withTag: PR_DISPLAY_NAME_UNICODE]; + forKey: childKey + withTag: PR_DISPLAY_NAME_UNICODE]; break; case PidLidEmail1OriginalDisplayName: // E-mail child = [self lookupChild: childKey]; diff --git a/OpenChange/MAPIStoreMailMessageTable.m b/OpenChange/MAPIStoreMailMessageTable.m index 14149b5e0..cb8c148be 100644 --- a/OpenChange/MAPIStoreMailMessageTable.m +++ b/OpenChange/MAPIStoreMailMessageTable.m @@ -118,7 +118,8 @@ static EOQualifier *nonDeletedQualifier = nil; withTag: (enum MAPITAGS) propTag { SOGoMailObject *child; - NSString *childURL, *stringValue; + NSString *childURL, *subject, *stringValue; + NSInteger colIdx; enum MAPISTATUS rc; rc = MAPI_E_SUCCESS; @@ -128,9 +129,6 @@ static EOQualifier *nonDeletedQualifier = nil; /* read mail, see http://msdn.microsoft.com/en-us/library/cc815472.aspx */ *data = MAPILongValue (memCtx, 0x00000100); break; - case PR_CONVERSATION_TOPIC: - case PR_CONVERSATION_TOPIC_UNICODE: - case PR_SUBJECT: case PR_SUBJECT_UNICODE: child = [self lookupChild: childKey]; stringValue = [child decodedSubject]; @@ -138,6 +136,33 @@ static EOQualifier *nonDeletedQualifier = nil; stringValue = @""; *data = [stringValue asUnicodeInMemCtx: memCtx]; break; + case PR_SUBJECT_PREFIX_UNICODE: + child = [self lookupChild: childKey]; + subject = [child decodedSubject]; + colIdx = [subject rangeOfString: @":"].location; + if (colIdx != NSNotFound && colIdx < 4) + stringValue = [NSString stringWithFormat: @"%@: ", + [subject substringToIndex: colIdx]]; + else + stringValue = @""; + [self logWithFormat: @"subject prefix: %@", stringValue]; + *data = [stringValue asUnicodeInMemCtx: memCtx]; + break; + case PR_NORMALIZED_SUBJECT_UNICODE: + child = [self lookupChild: childKey]; + subject = [child decodedSubject]; + colIdx = [subject rangeOfString: @":"].location; + if (colIdx != NSNotFound && colIdx < 4) + stringValue = [[subject substringFromIndex: colIdx + 1] + stringByTrimmingLeadSpaces]; + else + stringValue = subject; + if (!stringValue) + stringValue = @""; + [self logWithFormat: @"normalized subject: %@", stringValue]; + *data = [stringValue asUnicodeInMemCtx: memCtx]; + break; + case PR_MESSAGE_CLASS_UNICODE: case PR_ORIG_MESSAGE_CLASS_UNICODE: *data = talloc_strdup (memCtx, "IPM.Note"); @@ -246,6 +271,9 @@ static EOQualifier *nonDeletedQualifier = nil; /* TODO: the following are supposed to be display names, separated by a semicolumn */ case PR_RECEIVED_BY_NAME: + case PR_RECEIVED_BY_NAME_UNICODE: + case PR_RCVD_REPRESENTING_NAME: + case PR_RCVD_REPRESENTING_NAME_UNICODE: case PR_DISPLAY_TO: case PR_DISPLAY_TO_UNICODE: case PR_ORIGINAL_DISPLAY_TO_UNICODE: @@ -414,6 +442,7 @@ static EOQualifier *nonDeletedQualifier = nil; *data = [[child messageId] asUnicodeInMemCtx: memCtx]; break; case PR_READ_RECEIPT_REQUESTED: // TODO + case PR_DELETE_AFTER_SUBMIT: // TODO *data = MAPIBoolValue (memCtx, NO); break; case PidLidPrivate: diff --git a/OpenChange/MAPIStoreMessageTable.m b/OpenChange/MAPIStoreMessageTable.m index b85a202d4..554b3e13e 100644 --- a/OpenChange/MAPIStoreMessageTable.m +++ b/OpenChange/MAPIStoreMessageTable.m @@ -156,9 +156,6 @@ static MAPIStoreMapping *mapping; case PR_MSG_STATUS: // TODO *data = MAPILongValue (memCtx, 0); break; - case PR_SUBJECT_PREFIX_UNICODE: // TODO - *data = [@"" asUnicodeInMemCtx: memCtx]; - break; case PR_IMPORTANCE: // TODO -> subclass? *data = MAPILongValue (memCtx, 1); break; @@ -186,9 +183,22 @@ static MAPIStoreMapping *mapping; asShortBinaryInMemCtx: memCtx]; break; - case PR_SUBJECT_UNICODE: rc = [self getChildProperty: data forKey: childKey - withTag: PR_NORMALIZED_SUBJECT_UNICODE]; + withTag: PR_SUBJECT_UNICODE]; + break; + + case PR_ORIGINAL_SUBJECT_UNICODE: + case PR_CONVERSATION_TOPIC_UNICODE: + rc = [self getChildProperty: data forKey: childKey + withTag: PR_NORMALIZED_SUBJECT_UNICODE]; + break; + + case PR_SUBJECT_PREFIX_UNICODE: + *data = [@"" asUnicodeInMemCtx: memCtx]; + break; + case PR_NORMALIZED_SUBJECT_UNICODE: + rc = [self getChildProperty: data forKey: childKey + withTag: PR_SUBJECT_UNICODE]; break; case PR_DISPLAY_TO_UNICODE: diff --git a/OpenChange/MAPIStoreTasksMessageTable.m b/OpenChange/MAPIStoreTasksMessageTable.m index d0ef67353..baa855f2b 100644 --- a/OpenChange/MAPIStoreTasksMessageTable.m +++ b/OpenChange/MAPIStoreTasksMessageTable.m @@ -68,8 +68,6 @@ *data = talloc_strdup(memCtx, "IPM.Task"); break; case PR_SUBJECT_UNICODE: // SUMMARY - case PR_NORMALIZED_SUBJECT_UNICODE: - case PR_CONVERSATION_TOPIC_UNICODE: task = [[self lookupChild: childKey] component: NO secure: NO]; *data = [[task summary] asUnicodeInMemCtx: memCtx]; break;