[evolution-data-server] CamelIMAPXJob: Split out "rename_folder" data.



commit 58a65ca8d81222f3ac8d855e71a3b0f42bb590f8
Author: Matthew Barnes <mbarnes redhat com>
Date:   Tue Jan 31 16:38:48 2012 -0500

    CamelIMAPXJob: Split out "rename_folder" data.
    
    Define a standalone RenameFolderData struct and "free" function.
    
    Use camel_imapx_job_set_data() to attach an allocated struct to a
    CamelIMAPXJob such that it will be freed along with the job.
    
    Use camel_imapx_job_get_data() to obtain a pointer to the allocated
    struct as needed, always with a NULL check for safety.

 camel/providers/imapx/camel-imapx-job.h    |    5 ----
 camel/providers/imapx/camel-imapx-server.c |   33 ++++++++++++++++++++++++---
 2 files changed, 29 insertions(+), 9 deletions(-)
---
diff --git a/camel/providers/imapx/camel-imapx-job.h b/camel/providers/imapx/camel-imapx-job.h
index d8f94d6..dcce254 100644
--- a/camel/providers/imapx/camel-imapx-job.h
+++ b/camel/providers/imapx/camel-imapx-job.h
@@ -56,11 +56,6 @@ struct _CamelIMAPXJob {
 	CamelFolder *folder;
 
 	union {
-		struct {
-			const gchar *ofolder_name;
-			const gchar *nfolder_name;
-		} rename_folder;
-
 		const gchar *folder_name;
 	} u;
 };
diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c
index 9779204..9a04888 100644
--- a/camel/providers/imapx/camel-imapx-server.c
+++ b/camel/providers/imapx/camel-imapx-server.c
@@ -79,6 +79,7 @@ typedef struct _AppendMessageData AppendMessageData;
 typedef struct _CopyMessagesData CopyMessagesData;
 typedef struct _ListData ListData;
 typedef struct _ManageSubscriptionsData ManageSubscriptionsData;
+typedef struct _RenameFolderData RenameFolderData;
 
 struct _GetMessageData {
 	/* in: uid requested */
@@ -141,6 +142,11 @@ struct _ManageSubscriptionsData {
 	gboolean subscribe;
 };
 
+struct _RenameFolderData {
+	gchar *old_folder_name;
+	gchar *new_folder_name;
+};
+
 enum {
 	SELECT_CHANGED,
 	SHUTDOWN,
@@ -353,6 +359,15 @@ manage_subscriptions_data_free (ManageSubscriptionsData *data)
 	g_slice_free (ManageSubscriptionsData, data);
 }
 
+static void
+rename_folder_data_free (RenameFolderData *data)
+{
+	g_free (data->old_folder_name);
+	g_free (data->new_folder_name);
+
+	g_slice_free (RenameFolderData, data);
+}
+
 /*
   this creates a uid (or sequence number) set directly into a command,
   if total is set, then we break it up into total uids. (i.e. command time)
@@ -4532,13 +4547,17 @@ imapx_job_rename_folder_start (CamelIMAPXJob *job,
                                CamelIMAPXServer *is)
 {
 	CamelIMAPXCommand *ic;
+	RenameFolderData *data;
 	gchar *en_ofname = NULL, *en_nfname = NULL;
 
+	data = camel_imapx_job_get_data (job);
+	g_return_if_fail (data != NULL);
+
 	job->folder = camel_store_get_folder_sync (
 		is->store, "INBOX", 0, job->cancellable, &job->error);
 
-	en_ofname = imapx_encode_folder_name ((CamelIMAPXStore *) is->store, job->u.rename_folder.ofolder_name);
-	en_nfname = imapx_encode_folder_name ((CamelIMAPXStore *) is->store, job->u.rename_folder.nfolder_name);
+	en_ofname = imapx_encode_folder_name ((CamelIMAPXStore *) is->store, data->old_folder_name);
+	en_nfname = imapx_encode_folder_name ((CamelIMAPXStore *) is->store, data->new_folder_name);
 
 	ic = camel_imapx_command_new (
 		is, "RENAME", job->folder,
@@ -5938,14 +5957,20 @@ camel_imapx_server_rename_folder (CamelIMAPXServer *is,
                                   GError **error)
 {
 	CamelIMAPXJob *job;
+	RenameFolderData *data;
 	gboolean success;
 
+	data = g_slice_new0 (RenameFolderData);
+	data->old_folder_name = g_strdup (old_name);
+	data->new_folder_name = g_strdup (new_name);
+
 	job = camel_imapx_job_new (cancellable);
 	job->type = IMAPX_JOB_RENAME_FOLDER;
 	job->start = imapx_job_rename_folder_start;
 	job->pri = IMAPX_PRIORITY_RENAME_FOLDER;
-	job->u.rename_folder.ofolder_name = old_name;
-	job->u.rename_folder.nfolder_name = new_name;
+
+	camel_imapx_job_set_data (
+		job, data, (GDestroyNotify) rename_folder_data_free);
 
 	success = imapx_submit_job (is, job, error);
 



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