diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2010-10-31 02:23:01 +0800 |
---|---|---|
committer | Rodrigo Moya <rodrigo@gnome-db.org> | 2010-11-10 06:33:19 +0800 |
commit | 58727dbb22ceeaf950ba7931fd516b112689b5a6 (patch) | |
tree | 4a013e3a33478cd0c6298cb54e47b09158264959 | |
parent | 63057a9a602ce6fb195275ca8ede0244261ad926 (diff) | |
download | gsoc2013-evolution-58727dbb22ceeaf950ba7931fd516b112689b5a6.tar.gz gsoc2013-evolution-58727dbb22ceeaf950ba7931fd516b112689b5a6.tar.zst gsoc2013-evolution-58727dbb22ceeaf950ba7931fd516b112689b5a6.zip |
Kill mail_append_mail().
Use e_mail_folder_append_message() instead.
-rw-r--r-- | mail/e-mail-folder-utils.c | 87 | ||||
-rw-r--r-- | mail/e-mail-folder-utils.h | 7 | ||||
-rw-r--r-- | mail/e-mail-session.c | 24 | ||||
-rw-r--r-- | mail/em-composer-utils.c | 21 | ||||
-rw-r--r-- | mail/mail-ops.c | 86 | ||||
-rw-r--r-- | mail/mail-ops.h | 5 | ||||
-rw-r--r-- | 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 7186589849..f2ba207e01 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 c5d3fefe13..7872f3e146 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 7b726cfec5..debaf28cea 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 f084155362..02eb039916 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 ffaa7e41af..ccbd934fe7 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 fbcf6bf826..583c18e34f 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 815ee69882..bca45f040f 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); } |