[evolution-kolab/gnome-3-4: 1/7] updated IMAPX files as of EDS commit EVOLUTION_DATA_SERVER_3_4_4



commit 1a48d41a17785e4c471097feaf7d6fe8522c3fb4
Author: Christian Hilberg <hilberg kernelconcepts de>
Date:   Mon Aug 13 15:43:14 2012 +0200

    updated IMAPX files as of EDS commit EVOLUTION_DATA_SERVER_3_4_4
    
    * updated the local IMAPX code from upstream
    * now at EDS commit
      758371620ef8efef4c2f30902dae55caae17a1f9

 .../providers/imapx/camel-imapx-conn-manager.c     |    2 +-
 src/camel/providers/imapx/camel-imapx-server.c     |   72 +++++++++++++++-----
 src/camel/providers/imapx/camel-imapx-store.c      |    3 +-
 3 files changed, 58 insertions(+), 19 deletions(-)
---
diff --git a/src/camel/providers/imapx/camel-imapx-conn-manager.c b/src/camel/providers/imapx/camel-imapx-conn-manager.c
index 89d1af5..72d1285 100644
--- a/src/camel/providers/imapx/camel-imapx-conn-manager.c
+++ b/src/camel/providers/imapx/camel-imapx-conn-manager.c
@@ -294,7 +294,7 @@ imapx_conn_manager_remove_info (CamelIMAPXConnManager *con_man,
 	link = g_list_find (list, cinfo);
 
 	if (link != NULL) {
-		list = g_list_remove_link (list, link);
+		list = g_list_delete_link (list, link);
 		connection_info_unref (cinfo);
 		removed = TRUE;
 	}
diff --git a/src/camel/providers/imapx/camel-imapx-server.c b/src/camel/providers/imapx/camel-imapx-server.c
index f3cfe44..f96e081 100644
--- a/src/camel/providers/imapx/camel-imapx-server.c
+++ b/src/camel/providers/imapx/camel-imapx-server.c
@@ -309,9 +309,29 @@ get_message_data_free (GetMessageData *data)
 }
 
 static void
+refresh_info_data_infos_free (RefreshInfoData *data)
+{
+	gint ii;
+
+	if (!data || !data->infos)
+		return;
+
+	for (ii = 0; ii < data->infos->len; ii++) {
+		struct _refresh_info *r = &g_array_index (data->infos, struct _refresh_info, ii);
+
+		camel_flag_list_free (&r->server_user_flags);
+		g_free (r->uid);
+	}
+
+	g_array_free (data->infos, TRUE);
+	data->infos = NULL;
+}
+
+static void
 refresh_info_data_free (RefreshInfoData *data)
 {
 	camel_folder_change_info_free (data->changes);
+	refresh_info_data_infos_free (data);
 
 	g_slice_free (RefreshInfoData, data);
 }
@@ -978,6 +998,7 @@ imapx_expunge_uid_from_summary (CamelIMAPXServer *is,
                                 gboolean unsolicited)
 {
 	CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *) is->select_folder;
+	CamelMessageInfo *mi;
 
 	if (unsolicited && ifolder->exists_on_server)
 		ifolder->exists_on_server--;
@@ -985,7 +1006,14 @@ imapx_expunge_uid_from_summary (CamelIMAPXServer *is,
 	if (is->changes == NULL)
 		is->changes = camel_folder_change_info_new ();
 
-	camel_folder_summary_remove_uid (is->select_folder->summary, uid);
+	mi = camel_folder_summary_peek_loaded (is->select_folder->summary, uid);
+	if (mi) {
+		camel_folder_summary_remove (is->select_folder->summary, mi);
+		camel_message_info_free (mi);
+	} else {
+		camel_folder_summary_remove_uid (is->select_folder->summary, uid);
+	}
+
 	is->expunged = g_list_prepend (is->expunged, uid);
 
 	camel_folder_change_info_remove_uid (is->changes, uid);
@@ -1198,6 +1226,8 @@ imapx_untagged (CamelIMAPXServer *is,
 			CamelIMAPXStore *imapx_store = (CamelIMAPXStore *) is->store;
 			CamelIMAPXStoreNamespace *ns;
 
+			if (imapx_store->summary->namespaces)
+				camel_imapx_namespace_list_clear (imapx_store->summary->namespaces);
 			imapx_store->summary->namespaces = nsl;
 			camel_store_summary_touch ((CamelStoreSummary *) imapx_store->summary);
 
@@ -1444,6 +1474,8 @@ imapx_untagged (CamelIMAPXServer *is,
 
 						cnt = (camel_folder_summary_count (job->folder->summary) * 100 ) / ifolder->exists_on_server;
 						camel_operation_progress (job->cancellable, cnt ? cnt : 1);
+					} else {
+						camel_message_info_free (mi);
 					}
 
 					if (free_user_flags && server_user_flags)
@@ -3807,13 +3839,7 @@ imapx_command_step_fetch_done (CamelIMAPXServer *is,
 	isum->uidnext = ifolder->uidnext_on_server;
 
  cleanup:
-	for (i = 0; i < data->infos->len; i++) {
-		struct _refresh_info *r = &g_array_index (data->infos, struct _refresh_info, i);
-
-		camel_flag_list_free (&r->server_user_flags);
-		g_free (r->uid);
-	}
-	g_array_free (data->infos, TRUE);
+	refresh_info_data_infos_free (data);
 
 	imapx_unregister_job (is, job);
 	camel_imapx_command_unref (ic);
@@ -3856,7 +3882,6 @@ imapx_job_scan_changes_done (CamelIMAPXServer *is,
 	CamelSettings *settings;
 	RefreshInfoData *data;
 	guint uidset_size;
-	gint i;
 	gboolean success = TRUE;
 	gboolean mobile_mode;
 
@@ -4012,12 +4037,7 @@ imapx_job_scan_changes_done (CamelIMAPXServer *is,
 		}
 	}
 
-	for (i = 0; i < data->infos->len; i++) {
-		struct _refresh_info *r = &g_array_index (data->infos, struct _refresh_info, i);
-
-		camel_flag_list_free (&r->server_user_flags);
-		g_free (r->uid);
-	}
+	refresh_info_data_infos_free (data);
 
 	/* There's no sane way to get the server-side unseen count on the
 	 * select mailbox. So just work it out from the flags if its not in
@@ -4027,7 +4047,6 @@ imapx_job_scan_changes_done (CamelIMAPXServer *is,
 	if (!mobile_mode)
 		((CamelIMAPXFolder *) job->folder)->unread_on_server = camel_folder_summary_get_unread_count (job->folder->summary);
 
-	g_array_free (data->infos, TRUE);
 	imapx_unregister_job (is, job);
 	camel_imapx_command_unref (ic);
 
@@ -4074,6 +4093,7 @@ imapx_job_scan_changes_start (CamelIMAPXJob *job,
 
 	data->scan_changes = TRUE;
 	ic->pri = job->pri;
+	refresh_info_data_infos_free (data);
 	data->infos = g_array_new (0, 0, sizeof (struct _refresh_info));
 	imapx_command_queue (is, ic);
 	g_free (uid);
@@ -4215,6 +4235,7 @@ imapx_job_fetch_new_messages_start (CamelIMAPXJob *job,
 			is, "FETCH", job->folder,
 			"UID FETCH %s:* (UID FLAGS)", uid);
 		imapx_uidset_init (&data->uidset, uidset_size, 0);
+		refresh_info_data_infos_free (data);
 		data->infos = g_array_new (0, 0, sizeof (struct _refresh_info));
 		ic->pri = job->pri;
 
@@ -4318,6 +4339,7 @@ imapx_job_fetch_messages_start (CamelIMAPXJob *job,
 			"UID FETCH %s:* (UID FLAGS)", uid);
 
 		imapx_uidset_init (&data->uidset, uidset_size, 0);
+		refresh_info_data_infos_free (data);
 		data->infos = g_array_new (0, 0, sizeof (struct _refresh_info));
 		ic->pri = job->pri;
 
@@ -4618,8 +4640,16 @@ imapx_command_expunge_done (CamelIMAPXServer *is,
 			changes = camel_folder_change_info_new ();
 			for (i = 0; i < uids->len; i++) {
 				gchar *uid = uids->pdata[i];
+				CamelMessageInfo *mi;
+
+				mi = camel_folder_summary_peek_loaded (folder->summary, uid);
+				if (mi) {
+					camel_folder_summary_remove (folder->summary, mi);
+					camel_message_info_free (mi);
+				} else {
+					camel_folder_summary_remove_uid (folder->summary, uid);
+				}
 
-				camel_folder_summary_remove_uid (folder->summary, uid);
 				camel_folder_change_info_remove_uid (changes, uids->pdata[i]);
 				removed = g_list_prepend (removed, (gpointer) uids->pdata[i]);
 			}
@@ -5454,6 +5484,14 @@ imapx_server_finalize (GObject *object)
 {
 	CamelIMAPXServer *is = CAMEL_IMAPX_SERVER (object);
 
+	camel_imapx_command_queue_free (is->queue);
+	camel_imapx_command_queue_free (is->active);
+	camel_imapx_command_queue_free (is->done);
+
+	is->queue = NULL;
+	is->active = NULL;
+	is->done = NULL;
+
 	g_static_rec_mutex_free (&is->queue_lock);
 	g_static_rec_mutex_free (&is->ostream_lock);
 	g_mutex_free (is->fetch_mutex);
diff --git a/src/camel/providers/imapx/camel-imapx-store.c b/src/camel/providers/imapx/camel-imapx-store.c
index 2253f84..ff469f8 100644
--- a/src/camel/providers/imapx/camel-imapx-store.c
+++ b/src/camel/providers/imapx/camel-imapx-store.c
@@ -985,12 +985,13 @@ fetch_folders_for_namespaces (CamelIMAPXStore *istore,
 			ns = ns->next;
 		}
 	}
-	g_list_free (namespaces);
  out:
+	g_list_free (namespaces);
 	g_object_unref (server);
 	return folders;
 
 exception:
+	g_list_free (namespaces);
 	g_object_unref (server);
 	g_hash_table_destroy (folders);
 	return NULL;



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