Autoscroll signature dialog on writing
[modest] / src / modest-mail-operation.c
index 79d9c47..41254a8 100644 (file)
@@ -231,6 +231,7 @@ static void          modest_mail_operation_create_msg (ModestMailOperation *self
                                                       const gchar *html_body, const GList *attachments_list,
                                                       const GList *images_list,
                                                       TnyHeaderFlags priority_flags,
+                                                      const gchar *references, const gchar *in_reply_to,
                                                       ModestMailOperationCreateMsgCallback callback,
                                                       gpointer userdata);
 
@@ -243,6 +244,8 @@ typedef struct
        gchar *cc;
        gchar *bcc;
        gchar *subject;
+       gchar *references;
+       gchar *in_reply_to;
        gchar *plain_body;
        gchar *html_body;
        GList *attachments_list;
@@ -762,35 +765,39 @@ send_mail_on_added_to_outbox (TnySendQueue *send_queue,
                ModestTnySendQueue *queue;
 
                trans_account = (TnyTransportAccount *) modest_mail_operation_get_account (self);
-               queue = modest_runtime_get_send_queue (trans_account, TRUE);
-               if (queue) {
-                       RunQueueHelper *helper;
-
-                       /* Create the helper */
-                       helper = g_slice_new0 (RunQueueHelper);
-                       helper->queue = g_object_ref (queue);
-                       helper->self = g_object_ref (self);
-
-                       /* if sending is ongoing wait for the queue to
-                          stop. Otherwise wait for the queue-start
-                          signal. It could happen that the queue
-                          could not start, then check also the error
-                          happened signal */
-                       if (modest_tny_send_queue_sending_in_progress (queue)) {
-                               run_queue_start (TNY_SEND_QUEUE (queue), helper);
+               if (trans_account) {
+                       queue = modest_runtime_get_send_queue (trans_account, TRUE);
+                       if (queue) {
+                               RunQueueHelper *helper;
+
+                               /* Create the helper */
+                               helper = g_slice_new0 (RunQueueHelper);
+                               helper->queue = g_object_ref (queue);
+                               helper->self = g_object_ref (self);
+
+                               /* if sending is ongoing wait for the queue to
+                                  stop. Otherwise wait for the queue-start
+                                  signal. It could happen that the queue
+                                  could not start, then check also the error
+                                  happened signal */
+                               if (modest_tny_send_queue_sending_in_progress (queue)) {
+                                       run_queue_start (TNY_SEND_QUEUE (queue), helper);
+                               } else {
+                                       helper->start_handler = g_signal_connect (queue, "queue-start", 
+                                                                                 G_CALLBACK (run_queue_start), 
+                                                                                 helper);
+                                       helper->error_handler = g_signal_connect (queue, "error-happened", 
+                                                                                 G_CALLBACK (run_queue_error_happened), 
+                                                                                 helper);
+                               }
                        } else {
-                               helper->start_handler = g_signal_connect (queue, "queue-start", 
-                                                                         G_CALLBACK (run_queue_start), 
-                                                                         helper);
-                               helper->error_handler = g_signal_connect (queue, "error-happened", 
-                                                                         G_CALLBACK (run_queue_error_happened), 
-                                                                         helper);
+                               /* Finalize this mail operation */
+                               modest_mail_operation_notify_end (self);
                        }
+                       g_object_unref (trans_account);
                } else {
-                       /* Finalize this mail operation */
-                       modest_mail_operation_notify_end (self);
+                       g_warning ("No transport account for the operation");
                }
-               g_object_unref (trans_account);
        }
 
        g_object_unref (helper->mail_op);
@@ -828,12 +835,16 @@ create_msg_thread (gpointer thread_data)
        priv = MODEST_MAIL_OPERATION_GET_PRIVATE(info->mail_op);
        if (info->html_body == NULL) {
                new_msg = modest_tny_msg_new (info->to, info->from, info->cc, 
-                                             info->bcc, info->subject, info->plain_body, 
+                                             info->bcc, info->subject, 
+                                             info->references, info->in_reply_to,
+                                             info->plain_body, 
                                              info->attachments_list, &attached,
                                              &(priv->error));
        } else {
                new_msg = modest_tny_msg_new_html_plain (info->to, info->from, info->cc,
-                                                        info->bcc, info->subject, info->html_body,
+                                                        info->bcc, info->subject, 
+                                                        info->references, info->in_reply_to,
+                                                        info->html_body,
                                                         info->plain_body, info->attachments_list,
                                                         info->images_list, &attached,
                                                         &(priv->error));
@@ -867,6 +878,8 @@ create_msg_thread (gpointer thread_data)
        g_free (info->plain_body);
        g_free (info->html_body);
        g_free (info->subject);
+       g_free (info->references);
+       g_free (info->in_reply_to);
        g_list_foreach (info->attachments_list, (GFunc) g_object_unref, NULL);
        g_list_free (info->attachments_list);
        g_list_foreach (info->images_list, (GFunc) g_object_unref, NULL);
@@ -900,6 +913,8 @@ modest_mail_operation_create_msg (ModestMailOperation *self,
                                  const GList *attachments_list,
                                  const GList *images_list,
                                  TnyHeaderFlags priority_flags,
+                                 const gchar *references,
+                                 const gchar *in_reply_to,
                                  ModestMailOperationCreateMsgCallback callback,
                                  gpointer userdata)
 {
@@ -915,6 +930,8 @@ modest_mail_operation_create_msg (ModestMailOperation *self,
        info->subject = g_strdup (subject);
        info->plain_body = g_strdup (plain_body);
        info->html_body = g_strdup (html_body);
+       info->references = g_strdup (references);
+       info->in_reply_to = g_strdup (in_reply_to);
        info->attachments_list = g_list_copy ((GList *) attachments_list);
        g_list_foreach (info->attachments_list, (GFunc) g_object_ref, NULL);
        info->images_list = g_list_copy ((GList *) images_list);
@@ -1074,6 +1091,8 @@ modest_mail_operation_send_new_mail (ModestMailOperation *self,
                                     const gchar *html_body,
                                     const GList *attachments_list,
                                     const GList *images_list,
+                                    const gchar *references,
+                                    const gchar *in_reply_to,
                                     TnyHeaderFlags priority_flags)
 {
        ModestMailOperationPrivate *priv = NULL;
@@ -1110,6 +1129,7 @@ modest_mail_operation_send_new_mail (ModestMailOperation *self,
 
        modest_mail_operation_create_msg (self, from, to, cc, bcc, subject, plain_body, html_body,
                                          attachments_list, images_list, priority_flags,
+                                         references, in_reply_to,
                                          modest_mail_operation_send_new_mail_cb, info);
 
 }
@@ -1272,6 +1292,8 @@ modest_mail_operation_save_to_drafts (ModestMailOperation *self,
                                      const GList *attachments_list,
                                      const GList *images_list,
                                      TnyHeaderFlags priority_flags,
+                                     const gchar *references,
+                                     const gchar *in_reply_to,
                                      SaveToDraftstCallback callback,
                                      gpointer user_data)
 {
@@ -1297,6 +1319,7 @@ modest_mail_operation_save_to_drafts (ModestMailOperation *self,
        modest_mail_operation_notify_start (self);
        modest_mail_operation_create_msg (self, from, to, cc, bcc, subject, plain_body, html_body,
                                          attachments_list, images_list, priority_flags,
+                                         references, in_reply_to,
                                          modest_mail_operation_save_to_drafts_cb, info);
 }
 
@@ -2580,11 +2603,10 @@ get_msg_async_cb (TnyFolder *folder,
                priv->status = MODEST_MAIL_OPERATION_STATUS_CANCELED;
        } else if (err) {
                priv->status = MODEST_MAIL_OPERATION_STATUS_FINISHED_WITH_ERRORS;
-               if (err) {
-                       priv->error = g_error_copy ((const GError *) err);
+               priv->error = g_error_copy ((const GError *) err);
+               if (priv->error) {
                        priv->error->domain = MODEST_MAIL_OPERATION_ERROR;
-               }
-               if (!priv->error) {
+               } else {
                        g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
                                     MODEST_MAIL_OPERATION_ERROR_ITEM_NOT_FOUND,
                                     err->message);