[evolution-mapi] Bug #613147 - Recipients should not be discarded
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-mapi] Bug #613147 - Recipients should not be discarded
- Date: Thu, 28 Apr 2011 16:12:40 +0000 (UTC)
commit c2134726813ee9ff02f8e35da00c280b03822ed9
Author: Milan Crha <mcrha redhat com>
Date: Thu Apr 28 18:12:12 2011 +0200
Bug #613147 - Recipients should not be discarded
src/camel/camel-mapi-folder.c | 6 +----
src/libexchangemapi/exchange-mapi-connection.c | 27 +++++++++++++++++++----
src/libexchangemapi/exchange-mapi-mail-utils.c | 12 +++-------
3 files changed, 27 insertions(+), 18 deletions(-)
---
diff --git a/src/camel/camel-mapi-folder.c b/src/camel/camel-mapi-folder.c
index 7167a21..f867c79 100644
--- a/src/camel/camel-mapi-folder.c
+++ b/src/camel/camel-mapi-folder.c
@@ -406,10 +406,6 @@ mapi_update_cache (CamelFolder *folder, GSList *list, CamelFolderChangeInfo **ch
struct SRow *aRow;
ExchangeMAPIRecipient *recip = (ExchangeMAPIRecipient *)(l->data);
- /*Can't continue when there is no email-id*/
- if (!recip->email_id)
- continue;
-
/* Build a SRow structure */
aRow = &recip->out_SRow;
@@ -421,7 +417,7 @@ mapi_update_cache (CamelFolder *folder, GSList *list, CamelFolderChangeInfo **ch
name = name ? name : (const gchar *) exchange_mapi_util_find_row_propval (aRow,
PR_7BIT_DISPLAY_NAME_UNICODE);
display_name = name ? name : recip->email_id;
- formatted_id = camel_internet_address_format_address(display_name, recip->email_id);
+ formatted_id = camel_internet_address_format_address(display_name, recip->email_id ? recip->email_id : "");
switch (*type) {
case MAPI_TO:
diff --git a/src/libexchangemapi/exchange-mapi-connection.c b/src/libexchangemapi/exchange-mapi-connection.c
index d91b876..152e073 100644
--- a/src/libexchangemapi/exchange-mapi-connection.c
+++ b/src/libexchangemapi/exchange-mapi-connection.c
@@ -1438,7 +1438,7 @@ exchange_mapi_connection_get_public_folder (ExchangeMapiConnection *conn, mapi_o
/* Returns TRUE if all recipients were read succcesfully, else returns FALSE */
static gboolean
-exchange_mapi_util_get_recipients (mapi_object_t *obj_message, GSList **recip_list, GError **perror)
+exchange_mapi_util_get_recipients (ExchangeMapiConnection *conn, mapi_object_t *obj_message, GSList **recip_list, GError **perror)
{
enum MAPISTATUS ms;
struct SPropTagArray proptags;
@@ -1463,9 +1463,26 @@ exchange_mapi_util_get_recipients (mapi_object_t *obj_message, GSList **recip_li
recipient->email_id = talloc_steal (recipient->mem_ctx, (const gchar *) exchange_mapi_util_find_row_propval (&(rows_recip.aRow[i_row_recip]), PR_SMTP_ADDRESS_UNICODE));
/* fallback */
if (!recipient->email_id) {
- const gchar *addrtype = talloc_steal (recipient->mem_ctx, (const gchar *) exchange_mapi_util_find_row_propval (&(rows_recip.aRow[i_row_recip]), PR_ADDRTYPE_UNICODE));
- if (addrtype && !g_ascii_strcasecmp(addrtype, "SMTP"))
+ uint32_t fallback_props[] = {
+ PROP_TAG (PT_UNICODE, 0x6001), /* PigTagNickname for Recipients table */
+ PR_RECIPIENT_DISPLAY_NAME_UNICODE
+ };
+ gint ii;
+ const gchar *addrtype = exchange_mapi_util_find_row_propval (&(rows_recip.aRow[i_row_recip]), PR_ADDRTYPE_UNICODE);
+
+ if (addrtype && !g_ascii_strcasecmp (addrtype, "SMTP"))
recipient->email_id = talloc_steal (recipient->mem_ctx, (const gchar *) exchange_mapi_util_find_row_propval (&(rows_recip.aRow[i_row_recip]), PR_EMAIL_ADDRESS_UNICODE));
+
+ for (ii = 0; !recipient->email_id && ii < G_N_ELEMENTS (fallback_props); ii++) {
+ recipient->email_id = talloc_steal (recipient->mem_ctx, (const gchar *) exchange_mapi_util_find_row_propval (&(rows_recip.aRow[i_row_recip]), fallback_props[ii]));
+ }
+ }
+
+ if (recipient->email_id) {
+ const gchar *addrtype = exchange_mapi_util_find_row_propval (&(rows_recip.aRow[i_row_recip]), PR_ADDRTYPE_UNICODE);
+
+ if (addrtype && g_ascii_strcasecmp (addrtype, "EX") == 0)
+ recipient->email_id = exchange_mapi_connection_ex_to_smtp (conn, recipient->email_id, NULL, NULL);
}
recipient->out_SRow.ulAdrEntryPad = rows_recip.aRow[i_row_recip].ulAdrEntryPad;
@@ -1792,7 +1809,7 @@ exchange_mapi_connection_fetch_items (ExchangeMapiConnection *conn, mapi_id_t
}
if (options & MAPI_OPTIONS_FETCH_RECIPIENTS) {
- exchange_mapi_util_get_recipients (&obj_message, &recip_list, perror);
+ exchange_mapi_util_get_recipients (conn, &obj_message, &recip_list, perror);
}
/* get the main body stream no matter what */
@@ -1948,7 +1965,7 @@ exchange_mapi_connection_fetch_object_props (ExchangeMapiConnection *conn, mapi_
/* Fetch recipients */
if (options & MAPI_OPTIONS_FETCH_RECIPIENTS) {
- exchange_mapi_util_get_recipients (obj_message, &recip_list, NULL);
+ exchange_mapi_util_get_recipients (conn, obj_message, &recip_list, NULL);
}
/* get the main body stream no matter what */
diff --git a/src/libexchangemapi/exchange-mapi-mail-utils.c b/src/libexchangemapi/exchange-mapi-mail-utils.c
index 9f0fd2c..1d27bae 100644
--- a/src/libexchangemapi/exchange-mapi-mail-utils.c
+++ b/src/libexchangemapi/exchange-mapi-mail-utils.c
@@ -355,10 +355,6 @@ mapi_mime_set_recipient_list (ExchangeMapiConnection *conn, CamelMimeMessage *ms
struct SRow *aRow;
ExchangeMAPIRecipient *recip = (ExchangeMAPIRecipient *)(l->data);
- /*Can't continue when there is no email-id*/
- if (!recip->email_id)
- continue;
-
/* Build a SRow structure */
aRow = &recip->out_SRow;
@@ -377,19 +373,19 @@ mapi_mime_set_recipient_list (ExchangeMapiConnection *conn, CamelMimeMessage *ms
type = (uint32_t *) exchange_mapi_util_find_row_propval (aRow, PR_RECIPIENT_TYPE);
- if (!display_name && name && recip->email_id && !name_is_email_user (name, recip->email_id))
+ if (!display_name && name && (!recip->email_id || !name_is_email_user (name, recip->email_id)))
display_name = g_strdup (name);
rcpt_type = (type ? *type : MAPI_TO);
switch (rcpt_type) {
case MAPI_TO:
- camel_internet_address_add (to_addr, display_name, recip->email_id);
+ camel_internet_address_add (to_addr, display_name, recip->email_id ? recip->email_id : "");
break;
case MAPI_CC:
- camel_internet_address_add (cc_addr, display_name, recip->email_id);
+ camel_internet_address_add (cc_addr, display_name, recip->email_id ? recip->email_id : "");
break;
case MAPI_BCC:
- camel_internet_address_add (bcc_addr, display_name, recip->email_id);
+ camel_internet_address_add (bcc_addr, display_name, recip->email_id ? recip->email_id : "");
break;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]