[evolution/wip/gsettings] Kill mail_append_mail().



commit 58727dbb22ceeaf950ba7931fd516b112689b5a6
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sat Oct 30 14:23:01 2010 -0400

    Kill mail_append_mail().
    
    Use e_mail_folder_append_message() instead.

 mail/e-mail-folder-utils.c    |   87 +++++++++++++++++++++++++---------------
 mail/e-mail-folder-utils.h    |    7 +++
 mail/e-mail-session.c         |   24 +++++++-----
 mail/em-composer-utils.c      |   21 ++++++----
 mail/mail-ops.c               |   86 ----------------------------------------
 mail/mail-ops.h               |    5 --
 plugins/templates/templates.c |    6 ++-
 7 files changed, 92 insertions(+), 144 deletions(-)
---
diff --git a/mail/e-mail-folder-utils.c b/mail/e-mail-folder-utils.c
index 7186589..f2ba207 100644
--- a/mail/e-mail-folder-utils.c
+++ b/mail/e-mail-folder-utils.c
@@ -27,15 +27,19 @@
 typedef struct _AsyncContext AsyncContext;
 
 struct _AsyncContext {
-	GCancellable *cancellable;
+	CamelMimeMessage *message;
+	CamelMessageInfo *info;
 	gchar *message_uid;
 };
 
 static void
 async_context_free (AsyncContext *context)
 {
-	if (context->cancellable != NULL)
-		g_object_unref (context->cancellable);
+	if (context->message != NULL)
+		g_object_unref (context->message);
+
+	if (context->info != NULL)
+		camel_message_info_free (context->info);
 
 	g_free (context->message_uid);
 
@@ -43,28 +47,58 @@ async_context_free (AsyncContext *context)
 }
 
 static void
-mail_folder_append_message_ready (CamelFolder *folder,
-                                  GAsyncResult *result,
-                                  GSimpleAsyncResult *simple)
+mail_folder_append_message_thread (GSimpleAsyncResult *simple,
+                                   GObject *object,
+                                   GCancellable *cancellable)
 {
 	AsyncContext *context;
 	GError *error = NULL;
 
 	context = g_simple_async_result_get_op_res_gpointer (simple);
 
-	camel_folder_append_message_finish (
-		folder, result, &context->message_uid, &error);
+	e_mail_folder_append_message_sync (
+		CAMEL_FOLDER (object), context->message,
+		context->info, &context->message_uid,
+		cancellable, &error);
 
 	if (error != NULL) {
 		g_simple_async_result_set_from_error (simple, error);
 		g_error_free (error);
 	}
+}
+
+gboolean
+e_mail_folder_append_message_sync (CamelFolder *folder,
+                                   CamelMimeMessage *message,
+                                   CamelMessageInfo *info,
+                                   gchar **appended_uid,
+                                   GCancellable *cancellable,
+                                   GError **error)
+{
+	CamelMedium *medium;
+	gboolean success;
 
-	camel_operation_pop_message (context->cancellable);
+	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
+	g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), FALSE);
 
-	g_simple_async_result_complete (simple);
+	medium = CAMEL_MEDIUM (message);
 
-	g_object_unref (simple);
+	camel_operation_push_message (
+		cancellable,
+		_("Saving message to folder '%s'"),
+		camel_folder_get_full_name (folder));
+
+	if (camel_medium_get_header (medium, "X-Mailer") == NULL)
+		camel_medium_set_header (medium, "X-Mailer", X_MAILER);
+
+	camel_mime_message_set_date (message, CAMEL_MESSAGE_DATE_CURRENT, 0);
+
+	success = camel_folder_append_message_sync (
+		folder, message, info, appended_uid, cancellable, error);
+
+	camel_operation_pop_message (cancellable);
+
+	return success;
 }
 
 void
@@ -78,17 +112,15 @@ e_mail_folder_append_message (CamelFolder *folder,
 {
 	GSimpleAsyncResult *simple;
 	AsyncContext *context;
-	CamelMedium *medium;
 
 	g_return_if_fail (CAMEL_IS_FOLDER (folder));
 	g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message));
 
-	medium = CAMEL_MEDIUM (message);
-
 	context = g_slice_new0 (AsyncContext);
+	context->message = g_object_ref (message);
 
-	if (G_IS_CANCELLABLE (cancellable))
-		context->cancellable = g_object_ref (cancellable);
+	if (info != NULL)
+		context->info = camel_message_info_ref (info);
 
 	simple = g_simple_async_result_new (
 		G_OBJECT (folder), callback, user_data,
@@ -97,20 +129,11 @@ e_mail_folder_append_message (CamelFolder *folder,
 	g_simple_async_result_set_op_res_gpointer (
 		simple, context, (GDestroyNotify) async_context_free);
 
-	camel_operation_push_message (
-		context->cancellable,
-		_("Saving message to folder '%s'"),
-		camel_folder_get_full_name (folder));
-
-	if (camel_medium_get_header (medium, "X-Mailer") == NULL)
-		camel_medium_set_header (medium, "X-Mailer", X_MAILER);
-
-	camel_mime_message_set_date (message, CAMEL_MESSAGE_DATE_CURRENT, 0);
+	g_simple_async_result_run_in_thread (
+		simple, mail_folder_append_message_thread,
+		io_priority, cancellable);
 
-	camel_folder_append_message (
-		folder, message, info, io_priority,
-		context->cancellable, (GAsyncReadyCallback)
-		mail_folder_append_message_ready, simple);
+	g_object_unref (simple);
 }
 
 gboolean
@@ -130,13 +153,11 @@ e_mail_folder_append_message_finish (CamelFolder *folder,
 	simple = G_SIMPLE_ASYNC_RESULT (result);
 	context = g_simple_async_result_get_op_res_gpointer (simple);
 
-	if (g_simple_async_result_propagate_error (simple, error))
-		return FALSE;
-
 	if (appended_uid != NULL) {
 		*appended_uid = context->message_uid;
 		context->message_uid = NULL;
 	}
 
-	return TRUE;
+	/* Assume success unless a GError is set. */
+	return !g_simple_async_result_propagate_error (simple, error);
 }
diff --git a/mail/e-mail-folder-utils.h b/mail/e-mail-folder-utils.h
index c5d3fef..7872f3e 100644
--- a/mail/e-mail-folder-utils.h
+++ b/mail/e-mail-folder-utils.h
@@ -25,6 +25,13 @@
 
 G_BEGIN_DECLS
 
+gboolean	e_mail_folder_append_message_sync
+						(CamelFolder *folder,
+						 CamelMimeMessage *message,
+						 CamelMessageInfo *info,
+						 gchar **appended_uid,
+						 GCancellable *cancellable,
+						 GError **error);
 void		e_mail_folder_append_message	(CamelFolder *folder,
 						 CamelMimeMessage *message,
 						 CamelMessageInfo *info,
diff --git a/mail/e-mail-session.c b/mail/e-mail-session.c
index 7b726cf..debaf28 100644
--- a/mail/e-mail-session.c
+++ b/mail/e-mail-session.c
@@ -51,6 +51,7 @@
 #include "e-util/e-alert-dialog.h"
 #include "e-util/e-util-private.h"
 
+#include "e-mail-folder-utils.h"
 #include "e-mail-local.h"
 #include "e-mail-session.h"
 #include "em-composer-utils.h"
@@ -386,18 +387,16 @@ forward_to_flush_outbox_cb (EMailSession *session)
 
 static void
 ms_forward_to_cb (CamelFolder *folder,
-                  CamelMimeMessage *msg,
-                  CamelMessageInfo *info,
-                  gint queued,
-                  const gchar *appended_uid,
-                  gpointer data)
+                  GAsyncResult *result,
+                  EMailSession *session)
 {
-	EMailSession *session = E_MAIL_SESSION (data);
 	GConfClient *client;
 
-	client = gconf_client_get_default ();
+	/* FIXME Poor error handling. */
+	if (!e_mail_folder_append_message_finish (folder, result, NULL, NULL))
+		return;
 
-	camel_message_info_free (info);
+	client = gconf_client_get_default ();
 
 	/* do not call mail send immediately, just pile them all in the outbox */
 	if (preparing_flush ||
@@ -926,8 +925,13 @@ mail_session_forward_to (CamelSession *session,
 	out_folder = e_mail_local_get_folder (E_MAIL_LOCAL_FOLDER_OUTBOX);
 	camel_message_info_set_flags (
 		info, CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_SEEN);
-	mail_append_mail (
-		out_folder, forward, info, ms_forward_to_cb, session);
+
+	/* FIXME Pass a GCancellable. */
+	e_mail_folder_append_message (
+		out_folder, forward, info, G_PRIORITY_DEFAULT, NULL,
+		(GAsyncReadyCallback) ms_forward_to_cb, session);
+
+	camel_message_info_free (info);
 
 	return TRUE;
 }
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index f084155..02eb039 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -1665,15 +1665,13 @@ em_utils_handle_receipt (EMailSession *session,
 
 static void
 em_utils_receipt_done (CamelFolder *folder,
-                       CamelMimeMessage *msg,
-                       CamelMessageInfo *info,
-                       gint queued,
-                       const gchar *appended_uid,
-                       gpointer data)
+                       GAsyncResult *result,
+                       EMailSession *session)
 {
-	EMailSession *session = E_MAIL_SESSION (data);
+	/* FIXME Poor error handling. */
+	if (!e_mail_folder_append_message_finish (folder, result, NULL, NULL))
+		return;
 
-	camel_message_info_free (info);
 	mail_send (session);
 }
 
@@ -1812,8 +1810,13 @@ em_utils_send_receipt (EMailSession *session,
 	out_folder = e_mail_local_get_folder (E_MAIL_LOCAL_FOLDER_OUTBOX);
 	camel_message_info_set_flags (
 		info, CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_SEEN);
-	mail_append_mail (
-		out_folder, receipt, info, em_utils_receipt_done, session);
+
+	/* FIXME Pass a GCancellable. */
+	e_mail_folder_append_message (
+		out_folder, receipt, info, G_PRIORITY_DEFAULT, NULL,
+		(GAsyncReadyCallback) em_utils_receipt_done, session);
+
+	camel_message_info_free (info);
 }
 
 /* Replying to messages... */
diff --git a/mail/mail-ops.c b/mail/mail-ops.c
index ffaa7e4..ccbd934 100644
--- a/mail/mail-ops.c
+++ b/mail/mail-ops.c
@@ -919,92 +919,6 @@ mail_send_queue (EMailSession *session,
 	mail_msg_unordered_push (m);
 }
 
-/* ** APPEND MESSAGE TO FOLDER ******************************************** */
-
-struct _append_msg {
-	MailMsg base;
-
-        CamelFolder *folder;
-	CamelMimeMessage *message;
-        CamelMessageInfo *info;
-	gchar *appended_uid;
-
-	void (*done)(CamelFolder *folder, CamelMimeMessage *msg, CamelMessageInfo *info, gint ok, const gchar *appended_uid, gpointer data);
-	gpointer data;
-};
-
-static gchar *
-append_mail_desc (struct _append_msg *m)
-{
-	return g_strdup_printf (_("Saving message to folder '%s'"), camel_folder_get_full_name (m->folder));
-}
-
-static void
-append_mail_exec (struct _append_msg *m,
-                  GCancellable *cancellable,
-                  GError **error)
-{
-	camel_mime_message_set_date (
-		m->message, CAMEL_MESSAGE_DATE_CURRENT, 0);
-
-	camel_folder_append_message_sync (
-		m->folder, m->message,
-		m->info, &m->appended_uid,
-		cancellable, error);
-}
-
-static void
-append_mail_done (struct _append_msg *m)
-{
-	if (m->done)
-		m->done (
-			m->folder, m->message,
-			m->info, m->base.error == NULL,
-			m->appended_uid, m->data);
-}
-
-static void
-append_mail_free (struct _append_msg *m)
-{
-	g_object_unref (m->message);
-	g_object_unref (m->folder);
-	g_free (m->appended_uid);
-}
-
-static MailMsgInfo append_mail_info = {
-	sizeof (struct _append_msg),
-	(MailMsgDescFunc) append_mail_desc,
-	(MailMsgExecFunc) append_mail_exec,
-	(MailMsgDoneFunc) append_mail_done,
-	(MailMsgFreeFunc) append_mail_free
-};
-
-void
-mail_append_mail (CamelFolder *folder, CamelMimeMessage *message, CamelMessageInfo *info,
-		  void (*done)(CamelFolder *folder, CamelMimeMessage *msg, CamelMessageInfo *info, gint ok, const gchar *appended_uid, gpointer data),
-		  gpointer data)
-{
-	struct _append_msg *m;
-
-	g_return_if_fail (CAMEL_IS_FOLDER (folder));
-	g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message));
-
-	if (!camel_medium_get_header (CAMEL_MEDIUM (message), "X-Mailer"))
-		camel_medium_set_header (CAMEL_MEDIUM (message), "X-Mailer", x_mailer);
-
-	m = mail_msg_new (&append_mail_info);
-	m->folder = folder;
-	g_object_ref (folder);
-	m->message = message;
-	g_object_ref (message);
-	m->info = info;
-
-	m->done = done;
-	m->data = data;
-
-	mail_msg_unordered_push (m);
-}
-
 /* ** TRANSFER MESSAGES **************************************************** */
 
 struct _transfer_msg {
diff --git a/mail/mail-ops.h b/mail/mail-ops.h
index fbcf6bf..583c18e 100644
--- a/mail/mail-ops.h
+++ b/mail/mail-ops.h
@@ -32,11 +32,6 @@ G_BEGIN_DECLS
 #include <mail/mail-mt.h>
 #include <mail/e-mail-session.h>
 
-void mail_append_mail (CamelFolder *folder, CamelMimeMessage *message, CamelMessageInfo *info,
-		       void (*done)(CamelFolder *folder, CamelMimeMessage *msg, CamelMessageInfo *info, gint ok,
-				    const gchar *appended_uid, gpointer data),
-		       gpointer data);
-
 void		mail_transfer_messages		(EMailSession *session,
 						 CamelFolder *source,
 						 GPtrArray *uids,
diff --git a/plugins/templates/templates.c b/plugins/templates/templates.c
index 815ee69..bca45f0 100644
--- a/plugins/templates/templates.c
+++ b/plugins/templates/templates.c
@@ -31,6 +31,7 @@
 
 #include <e-util/e-config.h>
 
+#include <mail/e-mail-folder-utils.h>
 #include <mail/e-mail-local.h>
 #include <mail/e-mail-reader.h>
 #include <mail/e-mail-session.h>
@@ -710,7 +711,10 @@ got_message_draft_cb (EMsgComposer *composer,
 	camel_message_info_set_flags (
 		info, CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_DRAFT, ~0);
 
-	mail_append_mail (folder, message, info, NULL, composer);
+	/* FIXME No async callback, so... hope for the best? */
+	e_mail_folder_append_message (
+		folder, message, info, G_PRIORITY_DEFAULT,
+		NULL, (GAsyncReadyCallback) NULL, NULL);
 
 	g_object_unref (message);
 }



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