[evolution-mapi] Bug #604755 - Only shows a small part of all available messages
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-mapi] Bug #604755 - Only shows a small part of all available messages
- Date: Fri, 26 Feb 2010 10:31:16 +0000 (UTC)
commit 321defbd408c2fb4b8c6d7a2b76f5dd451201ea0
Author: Milan Crha <mcrha redhat com>
Date: Fri Feb 26 11:30:24 2010 +0100
Bug #604755 - Only shows a small part of all available messages
src/camel/camel-mapi-folder.c | 27 ++++++++++++++++++++++++---
1 files changed, 24 insertions(+), 3 deletions(-)
---
diff --git a/src/camel/camel-mapi-folder.c b/src/camel/camel-mapi-folder.c
index bc173c6..15b73d1 100644
--- a/src/camel/camel-mapi-folder.c
+++ b/src/camel/camel-mapi-folder.c
@@ -676,6 +676,7 @@ struct mapi_update_deleted_msg {
CamelFolder *folder;
mapi_id_t folder_id;
+ gboolean need_refresh;
};
static gboolean
@@ -749,8 +750,8 @@ mapi_sync_deleted (CamelSession *session, CamelSessionThreadMsg *msg)
for (index = 0; index < count; index++) {
GSList *tmp_list_item = NULL;
- /*FIXME :Any other list available ???*/
- info = camel_folder_summary_index (m->folder->summary, index);
+ /* Iterate in a reverse order, thus removal will not hurt */
+ info = camel_folder_summary_index (m->folder->summary, count - index - 1);
if (!info) continue; /*This is bad. *Should* not happen*/
uid = camel_message_info_uid (info);
@@ -783,6 +784,8 @@ mapi_sync_deleted (CamelSession *session, CamelSessionThreadMsg *msg)
/* camel_object_trigger_event (m->folder, "folder_changed", changes); */
camel_folder_change_info_free (changes);
+ m->need_refresh = camel_folder_summary_count (m->folder->summary) != g_slist_length (server_uid_list);
+
/* Discard server uid list */
g_slist_foreach (server_uid_list, (GFunc) g_free, NULL);
g_slist_free (server_uid_list);
@@ -793,8 +796,25 @@ mapi_sync_deleted_free (CamelSession *session, CamelSessionThreadMsg *msg)
{
struct mapi_update_deleted_msg *m = (struct mapi_update_deleted_msg *)msg;
+ if (m->need_refresh) {
+ CamelMapiSummary *mapi_summary = CAMEL_MAPI_SUMMARY (m->folder->summary);
+ if (mapi_summary) {
+ CamelException ex = CAMEL_EXCEPTION_INITIALISER;
+
+ CAMEL_SERVICE_REC_LOCK (m->folder->parent_store, connect_lock);
+ g_free (mapi_summary->sync_time_stamp);
+ mapi_summary->sync_time_stamp = NULL;
+ CAMEL_SERVICE_REC_UNLOCK (m->folder->parent_store, connect_lock);
+
+ mapi_refresh_folder (m->folder, &ex);
+
+ if (camel_exception_is_set (&ex))
+ g_warning ("%s: %s", G_STRFUNC, ex.desc);
+ camel_exception_clear (&ex);
+ }
+ }
+
camel_object_unref (m->folder);
- /* camel_session_thread_msg_free (session, &m->msg); */
}
static CamelSessionThreadOps deleted_items_sync_ops = {
@@ -1129,6 +1149,7 @@ mapi_refresh_folder(CamelFolder *folder, CamelException *ex)
sizeof (*deleted_items_op_msg));
deleted_items_op_msg->folder = folder;
deleted_items_op_msg->folder_id = temp_folder_id;
+ deleted_items_op_msg->need_refresh = FALSE;
camel_object_ref (folder);
camel_session_thread_queue (session, &deleted_items_op_msg->msg, 0);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]