[evolution-mapi] Bug #604755 - Only shows a small part of all available messages



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]