[evolution-mapi] Bug #668825 - Read-receipt info set event when not requested
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-mapi] Bug #668825 - Read-receipt info set event when not requested
- Date: Tue, 31 Jan 2012 12:42:06 +0000 (UTC)
commit 82dc492906e72146bf495bd5fe2deb093bdafc40
Author: Milan Crha <mcrha redhat com>
Date: Tue Jan 31 13:41:32 2012 +0100
Bug #668825 - Read-receipt info set event when not requested
src/camel/camel-mapi-folder.c | 204 +++++++++++++------------------
src/libexchangemapi/e-mapi-cal-utils.c | 4 +-
src/libexchangemapi/e-mapi-connection.c | 12 +-
src/libexchangemapi/e-mapi-debug.c | 2 +-
src/libexchangemapi/e-mapi-mail-utils.c | 12 +-
5 files changed, 100 insertions(+), 134 deletions(-)
---
diff --git a/src/camel/camel-mapi-folder.c b/src/camel/camel-mapi-folder.c
index 9c9f042..819475c 100644
--- a/src/camel/camel-mapi-folder.c
+++ b/src/camel/camel-mapi-folder.c
@@ -352,6 +352,76 @@ gather_changed_objects_to_slist (EMapiConnection *conn,
return TRUE;
}
+static void
+update_message_info (CamelMessageInfo *info,
+ /* const */ EMapiObject *object,
+ gboolean is_new,
+ gboolean is_public_folder,
+ gboolean user_has_read)
+{
+ CamelMapiMessageInfo *minfo = (CamelMapiMessageInfo *) info;
+ guint32 flags = 0, mask = CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_ATTACHMENTS | CAMEL_MESSAGE_ANSWERED | CAMEL_MESSAGE_FORWARDED | CAMEL_MAPI_MESSAGE_WITH_READ_RECEIPT;
+ const uint32_t *pmsg_flags, *picon_index;
+ const struct FILETIME *last_modified;
+ const uint8_t *pread_receipt;
+ const gchar *msg_class;
+ uint32_t msg_flags;
+
+ g_return_if_fail (info != NULL);
+ g_return_if_fail (object != NULL);
+
+ pmsg_flags = e_mapi_util_find_array_propval (&object->properties, PidTagMessageFlags);
+ last_modified = e_mapi_util_find_array_propval (&object->properties, PidTagLastModificationTime);
+ picon_index = e_mapi_util_find_array_propval (&object->properties, PidTagIconIndex);
+ pread_receipt = e_mapi_util_find_array_propval (&object->properties, PidTagReadReceiptRequested);
+ msg_class = e_mapi_util_find_array_propval (&object->properties, PidTagMessageClass);
+
+ if (msg_class && g_str_has_prefix (msg_class, "REPORT.IPM.Note.IPNRN"))
+ pread_receipt = NULL;
+
+ msg_flags = pmsg_flags ? *pmsg_flags : 0;
+
+ if (!is_new && is_public_folder) {
+ /* do not change unread state for known messages in public folders */
+ if ((user_has_read ? 1 : 0) != ((msg_flags & MSGFLAG_READ) ? 1 : 0))
+ msg_flags = (msg_flags & (~MSGFLAG_READ)) | (user_has_read ? MSGFLAG_READ : 0);
+ }
+
+ if (last_modified) {
+ minfo->last_modified = e_mapi_util_filetime_to_time_t (last_modified);
+ } else {
+ minfo->last_modified = 0;
+ }
+
+ if ((msg_flags & MSGFLAG_READ) != 0)
+ flags |= CAMEL_MESSAGE_SEEN;
+ if ((msg_flags & MSGFLAG_HASATTACH) != 0)
+ flags |= CAMEL_MESSAGE_ATTACHMENTS;
+ if (picon_index) {
+ if (*picon_index == 0x105)
+ flags |= CAMEL_MESSAGE_ANSWERED;
+ if (*picon_index == 0x106)
+ flags |= CAMEL_MESSAGE_FORWARDED;
+ }
+
+ if (pread_receipt && *pread_receipt)
+ flags |= CAMEL_MAPI_MESSAGE_WITH_READ_RECEIPT;
+
+ if (pread_receipt && *pread_receipt && (msg_flags & MSGFLAG_RN_PENDING) == 0)
+ camel_message_info_set_user_flag (info, "receipt-handled", TRUE);
+
+ if ((camel_message_info_flags (info) & mask) != flags) {
+ if (is_new)
+ minfo->info.flags = flags;
+ else
+ camel_message_info_set_flags (info, mask, flags);
+ minfo->server_flags = camel_message_info_flags (info);
+ }
+
+ minfo->info.dirty = TRUE;
+ camel_folder_summary_touch (minfo->info.summary);
+}
+
struct GatherObjectSummaryData
{
CamelFolder *folder;
@@ -394,32 +464,20 @@ gather_object_offline_cb (EMapiConnection *conn,
if (msg) {
gchar *uid_str;
const mapi_id_t *pmid;
- const uint32_t *pmsg_flags, *picon_index;
- const struct FILETIME *last_modified;
- const bool *pread_receipt;
- const gchar *msg_class;
- uint32_t msg_flags;
CamelMessageInfo *info;
gboolean is_new;
+ gboolean user_has_read = FALSE;
- pmid = e_mapi_util_find_array_propval (&object->properties, PR_MID);
- pmsg_flags = e_mapi_util_find_array_propval (&object->properties, PR_MESSAGE_FLAGS);
- last_modified = e_mapi_util_find_array_propval (&object->properties, PR_LAST_MODIFICATION_TIME);
- picon_index = e_mapi_util_find_array_propval (&object->properties, PidTagIconIndex);
- pread_receipt = e_mapi_util_find_array_propval (&object->properties, PidTagReadReceiptRequested);
- msg_class = e_mapi_util_find_array_propval (&object->properties, PidTagMessageClass);
-
- if (msg_class && g_str_has_prefix (msg_class, "REPORT.IPM.Note.IPNRN"))
- pread_receipt = NULL;
+ pmid = e_mapi_util_find_array_propval (&object->properties, PidTagMid);
if (!pmid) {
- g_debug ("%s: Received message [%d/%d] without PR_MID", G_STRFUNC, obj_index, obj_total);
+ g_debug ("%s: Received message [%d/%d] without PidTagMid", G_STRFUNC, obj_index, obj_total);
e_mapi_debug_dump_object (object, TRUE, 3);
return TRUE;
}
- if (!last_modified) {
- g_debug ("%s: Received message [%d/%d] without PR_LAST_MODIFICATION_TIME", G_STRFUNC, obj_index, obj_total);
+ if (!e_mapi_util_find_array_propval (&object->properties, PidTagLastModificationTime)) {
+ g_debug ("%s: Received message [%d/%d] without PidTagLastModificationTime", G_STRFUNC, obj_index, obj_total);
e_mapi_debug_dump_object (object, TRUE, 3);
}
@@ -427,20 +485,13 @@ gather_object_offline_cb (EMapiConnection *conn,
if (!uid_str)
return FALSE;
- msg_flags = pmsg_flags ? *pmsg_flags : 0;
-
is_new = !camel_folder_summary_check_uid (gos->folder->summary, uid_str);
if (!is_new) {
/* keep local read/unread flag on messages from public folders */
if (gos->is_public_folder) {
- gboolean user_has_read;
-
info = camel_folder_summary_get (gos->folder->summary, uid_str);
if (info) {
user_has_read = (camel_message_info_flags (info) & CAMEL_MESSAGE_SEEN) != 0;
- if ((user_has_read ? 1 : 0) != ((msg_flags & MSGFLAG_READ) ? 1 : 0))
- msg_flags = (msg_flags & (~MSGFLAG_READ)) | (user_has_read ? MSGFLAG_READ : 0);
-
camel_message_info_free (info);
}
}
@@ -451,50 +502,17 @@ gather_object_offline_cb (EMapiConnection *conn,
info = camel_folder_summary_info_new_from_message (gos->folder->summary, msg, NULL);
if (info) {
CamelMapiMessageInfo *minfo = (CamelMapiMessageInfo *) info;
- guint32 flags = 0, mask = CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_ATTACHMENTS | CAMEL_MESSAGE_ANSWERED | CAMEL_MESSAGE_FORWARDED | CAMEL_MAPI_MESSAGE_WITH_READ_RECEIPT;
minfo->info.uid = camel_pstring_strdup (uid_str);
- if (last_modified) {
- minfo->last_modified = e_mapi_util_filetime_to_time_t (last_modified);
- } else {
- minfo->last_modified = 0;
- }
-
- if ((msg_flags & MSGFLAG_READ) != 0)
- flags |= CAMEL_MESSAGE_SEEN;
- if ((msg_flags & MSGFLAG_HASATTACH) != 0)
- flags |= CAMEL_MESSAGE_ATTACHMENTS;
- if (picon_index) {
- if (*picon_index == 0x105)
- flags |= CAMEL_MESSAGE_ANSWERED;
- if (*picon_index == 0x106)
- flags |= CAMEL_MESSAGE_FORWARDED;
- }
-
- if ((camel_message_info_flags (info) & mask) != flags) {
- if (is_new)
- minfo->info.flags = flags;
- else
- camel_message_info_set_flags (info, mask, flags);
- minfo->server_flags = camel_message_info_flags (info);
- }
-
- if (pread_receipt)
- flags |= CAMEL_MAPI_MESSAGE_WITH_READ_RECEIPT;
-
- if (pread_receipt && (msg_flags & MSGFLAG_RN_PENDING) == 0)
- camel_message_info_set_user_flag (info, "receipt-handled", TRUE);
+ update_message_info (info, object, is_new, gos->is_public_folder, user_has_read);
- minfo->info.dirty = TRUE;
- camel_folder_summary_touch (gos->folder->summary);
+ camel_folder_summary_add (gos->folder->summary, info);
+ camel_message_info_ref (info);
if (is_new) {
- camel_folder_summary_add (gos->folder->summary, info);
camel_folder_change_info_add_uid (gos->changes, camel_message_info_uid (info));
camel_folder_change_info_recent_uid (gos->changes, camel_message_info_uid (info));
-
- camel_message_info_ref (info);
} else {
camel_folder_change_info_change_uid (gos->changes, camel_message_info_uid (info));
}
@@ -531,12 +549,7 @@ gather_object_summary_cb (EMapiConnection *conn,
struct GatherObjectSummaryData *gos = user_data;
gchar *uid_str;
const mapi_id_t *pmid;
- const uint32_t *pmsg_flags, *picon_index;
- const struct FILETIME *last_modified;
const gchar *transport_headers;
- const bool *pread_receipt;
- const gchar *msg_class;
- uint32_t msg_flags;
CamelMessageInfo *info;
gboolean is_new = FALSE;
@@ -544,25 +557,17 @@ gather_object_summary_cb (EMapiConnection *conn,
g_return_val_if_fail (gos->folder != NULL, FALSE);
g_return_val_if_fail (object != NULL, FALSE);
- pmid = e_mapi_util_find_array_propval (&object->properties, PR_MID);
- pmsg_flags = e_mapi_util_find_array_propval (&object->properties, PR_MESSAGE_FLAGS);
- last_modified = e_mapi_util_find_array_propval (&object->properties, PR_LAST_MODIFICATION_TIME);
- transport_headers = e_mapi_util_find_array_propval (&object->properties, PR_TRANSPORT_MESSAGE_HEADERS_UNICODE);
- picon_index = e_mapi_util_find_array_propval (&object->properties, PidTagIconIndex);
- pread_receipt = e_mapi_util_find_array_propval (&object->properties, PidTagReadReceiptRequested);
- msg_class = e_mapi_util_find_array_propval (&object->properties, PidTagMessageClass);
-
- if (msg_class && g_str_has_prefix (msg_class, "REPORT.IPM.Note.IPNRN"))
- pread_receipt = NULL;
+ pmid = e_mapi_util_find_array_propval (&object->properties, PidTagMid);
+ transport_headers = e_mapi_util_find_array_propval (&object->properties, PidTagTransportMessageHeaders);
if (!pmid) {
- g_debug ("%s: Received message [%d/%d] without PR_MID", G_STRFUNC, obj_index, obj_total);
+ g_debug ("%s: Received message [%d/%d] without PidTagMid", G_STRFUNC, obj_index, obj_total);
e_mapi_debug_dump_object (object, TRUE, 3);
return TRUE;
}
- if (!last_modified) {
- g_debug ("%s: Received message [%d/%d] without PR_LAST_MODIFICATION_TIME", G_STRFUNC, obj_index, obj_total);
+ if (!e_mapi_util_find_array_propval (&object->properties, PidTagLastModificationTime)) {
+ g_debug ("%s: Received message [%d/%d] without PidTagLastModificationTime", G_STRFUNC, obj_index, obj_total);
e_mapi_debug_dump_object (object, TRUE, 3);
}
@@ -570,8 +575,6 @@ gather_object_summary_cb (EMapiConnection *conn,
if (!uid_str)
return FALSE;
- msg_flags = pmsg_flags ? *pmsg_flags : 0;
-
info = camel_folder_summary_get (gos->folder->summary, uid_str);
if (!info) {
CamelMapiMessageInfo *minfo;
@@ -697,46 +700,9 @@ gather_object_summary_cb (EMapiConnection *conn,
}
if (info) {
- CamelMapiMessageInfo *minfo = (CamelMapiMessageInfo *) info;
- guint32 flags = 0, mask = CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_ATTACHMENTS | CAMEL_MESSAGE_ANSWERED | CAMEL_MESSAGE_FORWARDED | CAMEL_MAPI_MESSAGE_WITH_READ_RECEIPT;
-
- if (last_modified) {
- minfo->last_modified = e_mapi_util_filetime_to_time_t (last_modified);
- } else {
- minfo->last_modified = 0;
- }
-
- /* do not change unread state for known messages in public folders */
- if (gos->is_public_folder && !is_new)
- mask &= ~CAMEL_MESSAGE_SEEN;
-
- if ((msg_flags & MSGFLAG_READ) != 0)
- flags |= CAMEL_MESSAGE_SEEN;
- if ((msg_flags & MSGFLAG_HASATTACH) != 0)
- flags |= CAMEL_MESSAGE_ATTACHMENTS;
- if (picon_index) {
- if (*picon_index == 0x105)
- flags |= CAMEL_MESSAGE_ANSWERED;
- if (*picon_index == 0x106)
- flags |= CAMEL_MESSAGE_FORWARDED;
- }
-
- if (pread_receipt)
- flags |= CAMEL_MAPI_MESSAGE_WITH_READ_RECEIPT;
-
- if (pread_receipt && (msg_flags & MSGFLAG_RN_PENDING) == 0)
- camel_message_info_set_user_flag (info, "receipt-handled", TRUE);
-
- if ((camel_message_info_flags (info) & mask) != flags) {
- if (is_new)
- minfo->info.flags = flags;
- else
- camel_message_info_set_flags (info, mask, flags);
- minfo->server_flags = camel_message_info_flags (info);
- }
+ gboolean user_has_read = (camel_message_info_flags (info) & CAMEL_MESSAGE_SEEN) != 0;
- minfo->info.dirty = TRUE;
- camel_folder_summary_touch (gos->folder->summary);
+ update_message_info (info, object, is_new, gos->is_public_folder, user_has_read);
if (is_new) {
camel_folder_summary_add (gos->folder->summary, info);
diff --git a/src/libexchangemapi/e-mapi-cal-utils.c b/src/libexchangemapi/e-mapi-cal-utils.c
index 7df766b..a2eb8f3 100644
--- a/src/libexchangemapi/e-mapi-cal-utils.c
+++ b/src/libexchangemapi/e-mapi-cal-utils.c
@@ -850,7 +850,7 @@ e_mapi_cal_util_object_to_comp (EMapiConnection *conn,
const struct mapi_SLPSTRArrayW *categories_array;
const struct SBinary_short *bin;
const uint32_t *ui32;
- const bool *b;
+ const uint8_t *b;
icalcomponent *ical_comp;
icalproperty *prop = NULL;
icalparameter *param = NULL;
@@ -1539,7 +1539,7 @@ e_mapi_cal_utils_comp_to_object (EMapiConnection *conn,
icalcomponent *ical_comp;
icalcomponent_kind kind;
uint32_t flag32;
- bool b;
+ uint8_t b;
icalproperty *prop;
struct icaltimetype dtstart, dtend, utc_dtstart, utc_dtend, all_day_dtstart = {0}, all_day_dtend = {0};
const icaltimezone *utc_zone;
diff --git a/src/libexchangemapi/e-mapi-connection.c b/src/libexchangemapi/e-mapi-connection.c
index 0d4b1a0..3063e53 100644
--- a/src/libexchangemapi/e-mapi-connection.c
+++ b/src/libexchangemapi/e-mapi-connection.c
@@ -2397,7 +2397,7 @@ e_mapi_connection_fetch_object_internal (EMapiConnection *conn,
uint16_t ui16, uj16, np_count = 0, *np_propID = NULL;
uint32_t ui32;
struct MAPINAMEID *np_nameid = NULL;
- const bool *has_attachments;
+ const uint8_t *has_attachments;
struct SPropTagArray recipient_proptags;
struct SRowSet recipient_rows;
mapi_object_t attach_table;
@@ -5019,7 +5019,7 @@ e_mapi_connection_resolve_named_props (EMapiConnection *conn,
}
if (prop_count > 0) {
- ms = nspi_GetIDsFromNames (priv->session->nspi->ctx, mem_ctx, false, prop_count, names, &gal_tags);
+ ms = nspi_GetIDsFromNames (priv->session->nspi->ctx, mem_ctx, 0, prop_count, names, &gal_tags);
if (ms == MAPI_E_SUCCESS && gal_tags) {
if (gal_tags->cValues != prop_count)
g_warning ("%s: Requested (%d) and returned (%d) property names don't match", G_STRFUNC, prop_count, gal_tags->cValues);
@@ -5643,7 +5643,7 @@ set_default_folders (TALLOC_CTX *mem_ctx,
g_free (key_fid);
if (default_type != 0 || IsMailboxFolder (obj_store,folder->folder_id, &default_type)) {
- folder->is_default = true; /* TODO : Clean up. Redundant.*/
+ folder->is_default = TRUE; /* TODO : Clean up. Redundant.*/
folder->default_type = default_type;
}
@@ -5752,7 +5752,7 @@ e_mapi_connection_get_folders_list (EMapiConnection *conn,
/* FIXME: May have to get the child folders count? Do we need/use it? */
folder = e_mapi_folder_new (mailbox_name, IPF_NOTE,
E_MAPI_FOLDER_CATEGORY_PERSONAL, mailbox_id, 0, 0, 0 ,0);
- folder->is_default = true;
+ folder->is_default = TRUE;
folder->default_type = olFolderTopInformationStore; /*Is this correct ?*/
folder->size = mailbox_size ? *mailbox_size : 0;
@@ -5822,7 +5822,7 @@ e_mapi_connection_get_pf_folders_list (EMapiConnection *conn,
}
folder = e_mapi_folder_new (_("All Public Folders"), IPF_NOTE, 0, mailbox_id, 0, 0, 0, 0);
- folder->is_default = true;
+ folder->is_default = TRUE;
folder->default_type = olPublicFoldersAllPublicFolders;
*mapi_folders = g_slist_prepend (*mapi_folders, folder);
result = get_child_folders (conn, mem_ctx, E_MAPI_FOLDER_CATEGORY_PUBLIC, &priv->public_store, mailbox_id, mapi_folders, cb, cb_user_data, cancellable, perror);
@@ -6297,7 +6297,7 @@ test_server_availability (struct mapi_context *mapi_ctx,
binding_str = talloc_asprintf (mem_ctx, "ncacn_ip_tcp:%s[", profile->server);
/* If seal option is enabled in the profile */
- if (profile->seal == true) {
+ if (profile->seal != 0) {
binding_str = talloc_strdup_append (binding_str, "seal,");
}
diff --git a/src/libexchangemapi/e-mapi-debug.c b/src/libexchangemapi/e-mapi-debug.c
index b9cb8ad..4bb0414 100644
--- a/src/libexchangemapi/e-mapi-debug.c
+++ b/src/libexchangemapi/e-mapi-debug.c
@@ -749,7 +749,7 @@ e_mapi_debug_dump_properties (struct mapi_SPropValue_array *properties,
g_print (" PT_NULL");
break;
case PT_BOOLEAN:
- g_print (" (bool) - %d", (bool) lpProp->value.b);
+ g_print (" (bool) - %d", lpProp->value.b);
break;
case PT_I2:
g_print (" (uint16_t) - %d", lpProp->value.i);
diff --git a/src/libexchangemapi/e-mapi-mail-utils.c b/src/libexchangemapi/e-mapi-mail-utils.c
index ba2ec83..b931247 100644
--- a/src/libexchangemapi/e-mapi-mail-utils.c
+++ b/src/libexchangemapi/e-mapi-mail-utils.c
@@ -728,7 +728,7 @@ e_mapi_mail_utils_object_to_message (EMapiConnection *conn, /* const */ EMapiObj
} else {
CamelInternetAddress *to_addr, *cc_addr, *bcc_addr;
const struct FILETIME *msg_date;
- const bool *read_receipt;
+ const uint8_t *read_receipt;
const uint32_t *priority;
gchar *name, *email;
@@ -930,7 +930,7 @@ e_mapi_mail_add_recipients (EMapiObject *object,
for (ii = 0; addresses && camel_internet_address_get (addresses, ii, &name, &email); ii++) {
EMapiRecipient *recipient;
uint32_t ui32 = 0;
- bool bl;
+ uint8_t bl;
recipient = e_mapi_recipient_new (object);
e_mapi_object_add_recipient (object, recipient);
@@ -970,7 +970,7 @@ e_mapi_mail_add_recipients (EMapiObject *object,
ui32 = MAPI_MAILUSER;
set_value (PidTagObjectType, &ui32);
- bl = false;
+ bl = 0;
set_value (PidTagSendRichInfo, &bl);
#undef set_value
@@ -1399,7 +1399,7 @@ e_mapi_mail_utils_message_to_object (struct _CamelMimeMessage *message,
gchar *pid_name_content_type = NULL;
gint ii = 0;
uint32_t ui32;
- bool bl;
+ uint8_t bl;
g_return_val_if_fail (message != NULL, FALSE);
g_return_val_if_fail (pobject != NULL, FALSE);
@@ -1454,7 +1454,7 @@ e_mapi_mail_utils_message_to_object (struct _CamelMimeMessage *message,
}
set_value (PidTagMessageFlags, &ui32);
- bl = false;
+ bl = 0;
set_value (PidTagSendRichInfo, &bl);
/* PidTagConversationTopic and PidTagNormalizedSubject, together with PidTagSubjectPrefix
@@ -1555,7 +1555,7 @@ e_mapi_mail_utils_message_to_object (struct _CamelMimeMessage *message,
set_value (PidTagReadReceiptAddressType, "SMTP");
if ((create_flags & E_MAPI_CREATE_FLAG_SUBMIT) != 0) {
- bl = true;
+ bl = 1;
set_value (PidTagReadReceiptRequested, &bl);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]