[evolution-data-server] Sync the changes before refreshing



commit 5884835d0a5f7b7de48a1e661542751518a96fe4
Author: Chenthill Palanisamy <pchenthill novell com>
Date:   Thu Dec 31 13:28:33 2009 +0530

    Sync the changes before refreshing

 camel/providers/imapx/camel-imapx-folder.c |   12 +-----------
 camel/providers/imapx/camel-imapx-server.c |   16 +++++++++++++++-
 camel/providers/imapx/camel-imapx-server.h |    2 +-
 3 files changed, 17 insertions(+), 13 deletions(-)
---
diff --git a/camel/providers/imapx/camel-imapx-folder.c b/camel/providers/imapx/camel-imapx-folder.c
index a96f77d..fdf3a31 100644
--- a/camel/providers/imapx/camel-imapx-folder.c
+++ b/camel/providers/imapx/camel-imapx-folder.c
@@ -130,31 +130,21 @@ static void
 imapx_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
 {
 	CamelIMAPXStore *is = (CamelIMAPXStore *)folder->parent_store;
-	GPtrArray *changed_uids;
 
 	/* Sync twice - make sure deleted flags are written out,
 	   then sync again incase expunge changed anything */
 	camel_exception_clear(ex);
 
-	changed_uids = camel_folder_summary_get_changed (folder->summary);
-
 	if (is->server) {
 		camel_imapx_server_connect (is->server, 1);
 
-		camel_imapx_server_sync_changes (is->server, folder, changed_uids, ex);
-
-		if (camel_exception_is_set (ex))
-			goto exception;
+		camel_imapx_server_sync_changes (is->server, folder, ex);
 	}
 
 	if (is->server && expunge) {
 		camel_imapx_server_expunge(is->server, folder, ex);
 		camel_exception_clear(ex);
 	}
-
-exception:
-	g_ptr_array_foreach (changed_uids, (GFunc) camel_pstring_free, NULL);
-	g_ptr_array_free (changed_uids, TRUE);
 }
 
 static CamelMimeMessage *
diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c
index fb1517f..12940c4 100644
--- a/camel/providers/imapx/camel-imapx-server.c
+++ b/camel/providers/imapx/camel-imapx-server.c
@@ -30,6 +30,7 @@
 #include <camel/camel-stream-filter.h>
 #include <camel/camel-mime-filter-canon.h>
 #include <camel/camel-mime-message.h>
+#include "camel/camel-string-utils.h"
 #include <camel/camel-net-utils.h>
 #include <camel/camel-tcp-stream-ssl.h>
 #include <camel/camel-tcp-stream-raw.h>
@@ -3124,7 +3125,10 @@ camel_imapx_server_refresh_info(CamelIMAPXServer *is, CamelFolder *folder, Camel
 		camel_folder_change_info_clear(job->u.refresh_info.changes);
 	}
 
+	/* Sync changes before fetching status, else unread check later would fail. need to think about better ways for this */
+	camel_imapx_server_sync_changes (is, folder, ex);
 	total = camel_folder_summary_count (folder->summary);
+
 	/* Check if a rescan is needed */
 	if (is->exists == total) {
 		CamelIMAPXCommand *ic;
@@ -3166,9 +3170,10 @@ imapx_sync_free_user(GArray *user_set)
 }
 
 void
-camel_imapx_server_sync_changes(CamelIMAPXServer *is, CamelFolder *folder, GPtrArray *uids, CamelException *ex)
+camel_imapx_server_sync_changes(CamelIMAPXServer *is, CamelFolder *folder, CamelException *ex)
 {
 	guint i, on_orset, off_orset;
+	GPtrArray *uids;
 	GArray *on_user = NULL, *off_user = NULL;
 	CamelIMAPXMessageInfo *info;
 	CamelIMAPXJob *job;
@@ -3183,6 +3188,12 @@ camel_imapx_server_sync_changes(CamelIMAPXServer *is, CamelFolder *folder, GPtrA
 	   one for each flag being turned off, including each
 	   info being turned off, and one for each flag being turned on.
 	*/
+	uids = camel_folder_summary_get_changed (folder->summary);
+
+	if (uids->len == 0) {
+		g_ptr_array_free (uids, TRUE);
+		return;
+	}
 
 	off_orset = on_orset = 0;
 	for (i=0; i < uids->len; i++) {
@@ -3279,6 +3290,9 @@ camel_imapx_server_sync_changes(CamelIMAPXServer *is, CamelFolder *folder, GPtrA
 
 	imapx_sync_free_user(on_user);
 	imapx_sync_free_user(off_user);
+
+	g_ptr_array_foreach (uids, (GFunc) camel_pstring_free, NULL);
+	g_ptr_array_free (uids, TRUE);
 }
 
 /* expunge-uids? */
diff --git a/camel/providers/imapx/camel-imapx-server.h b/camel/providers/imapx/camel-imapx-server.h
index 2e3e595..e434870 100644
--- a/camel/providers/imapx/camel-imapx-server.h
+++ b/camel/providers/imapx/camel-imapx-server.h
@@ -106,7 +106,7 @@ gboolean camel_imapx_server_connect(CamelIMAPXServer *is, gint state);
 GPtrArray *camel_imapx_server_list(CamelIMAPXServer *is, const gchar *top, guint32 flags, CamelException *ex);
 
 void camel_imapx_server_refresh_info(CamelIMAPXServer *is, CamelFolder *folder, struct _CamelException *ex);
-void camel_imapx_server_sync_changes(CamelIMAPXServer *is, CamelFolder *folder, GPtrArray *infos, CamelException *ex);
+void camel_imapx_server_sync_changes(CamelIMAPXServer *is, CamelFolder *folder, CamelException *ex);
 void camel_imapx_server_expunge(CamelIMAPXServer *is, CamelFolder *folder, CamelException *ex);
 
 CamelStream *camel_imapx_server_get_message(CamelIMAPXServer *is, CamelFolder *folder, const gchar *uid, struct _CamelException *ex);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]