[evolution-data-server] CamelIMAPXJob: Split out "rename_folder" data.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] CamelIMAPXJob: Split out "rename_folder" data.
- Date: Tue, 31 Jan 2012 22:10:20 +0000 (UTC)
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]