[evolution-data-server] Sync the changes before refreshing
- From: Chenthill Palanisamy <pchen src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Sync the changes before refreshing
- Date: Thu, 31 Dec 2009 11:38:43 +0000 (UTC)
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]