[evolution-data-server] Bug 746395 - Let the provider store sent messages on its own



commit 2c3ce9d83d7e16e477d307155e05ac60d4c7ebc5
Author: Milan Crha <mcrha redhat com>
Date:   Wed Apr 1 17:34:21 2015 +0200

    Bug 746395 - Let the provider store sent messages on its own

 camel/camel-transport.c                            |   18 +++++++++++++++++-
 camel/camel-transport.h                            |    3 +++
 .../providers/sendmail/camel-sendmail-transport.c  |    1 +
 camel/providers/smtp/camel-smtp-transport.c        |    1 +
 configure.ac                                       |    2 +-
 5 files changed, 23 insertions(+), 2 deletions(-)
---
diff --git a/camel/camel-transport.c b/camel/camel-transport.c
index 38ad3db..847baa5 100644
--- a/camel/camel-transport.c
+++ b/camel/camel-transport.c
@@ -42,6 +42,7 @@ struct _AsyncContext {
        CamelAddress *from;
        CamelAddress *recipients;
        CamelMimeMessage *message;
+       gboolean sent_message_saved;
 };
 
 G_DEFINE_ABSTRACT_TYPE (CamelTransport, camel_transport, CAMEL_TYPE_SERVICE)
@@ -79,6 +80,7 @@ camel_transport_init (CamelTransport *transport)
  * @message: a #CamelMimeMessage to send
  * @from: a #CamelAddress to send from
  * @recipients: a #CamelAddress containing all recipients
+ * @out_sent_message_saved: set to %TRUE, if the sent message was also saved
  * @cancellable: optional #GCancellable object, or %NULL
  * @error: return location for a #GError, or %NULL
  *
@@ -95,6 +97,7 @@ camel_transport_send_to_sync (CamelTransport *transport,
                               CamelMimeMessage *message,
                               CamelAddress *from,
                               CamelAddress *recipients,
+                             gboolean *out_sent_message_saved,
                               GCancellable *cancellable,
                               GError **error)
 {
@@ -106,6 +109,7 @@ camel_transport_send_to_sync (CamelTransport *transport,
        g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), FALSE);
        g_return_val_if_fail (CAMEL_IS_ADDRESS (from), FALSE);
        g_return_val_if_fail (CAMEL_IS_ADDRESS (recipients), FALSE);
+       g_return_val_if_fail (out_sent_message_saved != NULL, FALSE);
 
        closure = camel_async_closure_new ();
 
@@ -116,7 +120,7 @@ camel_transport_send_to_sync (CamelTransport *transport,
 
        result = camel_async_closure_wait (closure);
 
-       success = camel_transport_send_to_finish (transport, result, error);
+       success = camel_transport_send_to_finish (transport, result, out_sent_message_saved, error);
 
        camel_async_closure_free (closure);
 
@@ -147,6 +151,7 @@ transport_send_to_thread (GTask *task,
                async_context->message,
                async_context->from,
                async_context->recipients,
+               &async_context->sent_message_saved,
                cancellable, &local_error);
        CAMEL_CHECK_LOCAL_GERROR (
                transport, send_to_sync, success, local_error);
@@ -232,6 +237,7 @@ camel_transport_send_to (CamelTransport *transport,
  * camel_transport_send_to_finish:
  * @transport: a #CamelTransport
  * @result: a #GAsyncResult
+ * @out_sent_message_saved: set to %TRUE, if the sent message was also saved
  * @error: return locaton for a #GError, or %NULL
  *
  * Finishes the operation started with camel_transport_send_to().
@@ -243,8 +249,11 @@ camel_transport_send_to (CamelTransport *transport,
 gboolean
 camel_transport_send_to_finish (CamelTransport *transport,
                                 GAsyncResult *result,
+                               gboolean *out_sent_message_saved,
                                 GError **error)
 {
+       AsyncContext *async_context;
+
        g_return_val_if_fail (CAMEL_IS_TRANSPORT (transport), FALSE);
        g_return_val_if_fail (g_task_is_valid (result, transport), FALSE);
 
@@ -252,5 +261,12 @@ camel_transport_send_to_finish (CamelTransport *transport,
                g_async_result_is_tagged (
                result, camel_transport_send_to), FALSE);
 
+       g_return_val_if_fail (out_sent_message_saved != NULL, FALSE);
+
+       async_context = g_task_get_task_data (G_TASK (result));
+       g_return_val_if_fail (async_context != NULL, FALSE);
+
+       *out_sent_message_saved = async_context->sent_message_saved;
+
        return g_task_propagate_boolean (G_TASK (result), error);
 }
diff --git a/camel/camel-transport.h b/camel/camel-transport.h
index ee07cab..df51094 100644
--- a/camel/camel-transport.h
+++ b/camel/camel-transport.h
@@ -67,6 +67,7 @@ struct _CamelTransportClass {
                                                 CamelMimeMessage *message,
                                                 CamelAddress *from,
                                                 CamelAddress *recipients,
+                                                gboolean *out_sent_message_saved,
                                                 GCancellable *cancellable,
                                                 GError **error);
 
@@ -79,6 +80,7 @@ gboolean      camel_transport_send_to_sync    (CamelTransport *transport,
                                                 CamelMimeMessage *message,
                                                 CamelAddress *from,
                                                 CamelAddress *recipients,
+                                                gboolean *out_sent_message_saved,
                                                 GCancellable *cancellable,
                                                 GError **error);
 void           camel_transport_send_to         (CamelTransport *transport,
@@ -91,6 +93,7 @@ void          camel_transport_send_to         (CamelTransport *transport,
                                                 gpointer user_data);
 gboolean       camel_transport_send_to_finish  (CamelTransport *transport,
                                                 GAsyncResult *result,
+                                                gboolean *out_sent_message_saved,
                                                 GError **error);
 
 G_END_DECLS
diff --git a/camel/providers/sendmail/camel-sendmail-transport.c 
b/camel/providers/sendmail/camel-sendmail-transport.c
index 1348d3b..6753395 100644
--- a/camel/providers/sendmail/camel-sendmail-transport.c
+++ b/camel/providers/sendmail/camel-sendmail-transport.c
@@ -110,6 +110,7 @@ sendmail_send_to_sync (CamelTransport *transport,
                        CamelMimeMessage *message,
                        CamelAddress *from,
                        CamelAddress *recipients,
+                      gboolean *out_sent_message_saved,
                        GCancellable *cancellable,
                        GError **error)
 {
diff --git a/camel/providers/smtp/camel-smtp-transport.c b/camel/providers/smtp/camel-smtp-transport.c
index c23ee8e..53c90ef 100644
--- a/camel/providers/smtp/camel-smtp-transport.c
+++ b/camel/providers/smtp/camel-smtp-transport.c
@@ -730,6 +730,7 @@ smtp_transport_send_to_sync (CamelTransport *transport,
                              CamelMimeMessage *message,
                              CamelAddress *from,
                              CamelAddress *recipients,
+                            gboolean *out_sent_message_saved,
                              GCancellable *cancellable,
                              GError **error)
 {
diff --git a/configure.ac b/configure.ac
index a4038a7..7e9b33b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -134,7 +134,7 @@ LIBEBOOK_CONTACTS_CURRENT=1
 LIBEBOOK_CONTACTS_REVISION=0
 LIBEBOOK_CONTACTS_AGE=0
 
-LIBCAMEL_CURRENT=52
+LIBCAMEL_CURRENT=53
 LIBCAMEL_REVISION=0
 LIBCAMEL_AGE=0
 


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