New method to send a mail without ui
[modest] / src / modest-mail-operation.c
index 5cc6154..2786f08 100644 (file)
@@ -246,6 +246,7 @@ static void          modest_mail_operation_create_msg (ModestMailOperation *self
                                                       const GList *images_list,
                                                       TnyHeaderFlags priority_flags,
                                                       const gchar *references, const gchar *in_reply_to,
+                                                      TnyList *header_pairs,
                                                       ModestMailOperationCreateMsgCallback callback,
                                                       gpointer userdata);
 
@@ -265,6 +266,7 @@ typedef struct
        GList *attachments_list;
        GList *images_list;
        TnyHeaderFlags priority_flags;
+       TnyList *header_pairs;
        ModestMailOperationCreateMsgCallback callback;
        gpointer userdata;
 } CreateMsgInfo;
@@ -853,6 +855,7 @@ create_msg_thread (gpointer thread_data)
                                              info->references, info->in_reply_to,
                                              info->plain_body, 
                                              info->attachments_list, &attached,
+                                             info->header_pairs,
                                              &(priv->error));
        } else {
                new_msg = modest_tny_msg_new_html_plain (info->to, info->from, info->cc,
@@ -861,15 +864,16 @@ create_msg_thread (gpointer thread_data)
                                                         info->html_body,
                                                         info->plain_body, info->attachments_list,
                                                         info->images_list, &attached,
+                                                        info->header_pairs,
                                                         &(priv->error));
        }
 
        if (new_msg) {
-               TnyHeader *header;
+               TnyHeader *header = tny_msg_get_header (new_msg);
 
                /* Set priority flags in message */
-               header = tny_msg_get_header (new_msg);
-               tny_header_set_flag (header, info->priority_flags);
+               if (info->priority_flags != TNY_HEADER_FLAG_NORMAL_PRIORITY)
+                       tny_header_set_flag (header, info->priority_flags);
 
                /* Set attachment flags in message */
                if (info->attachments_list != NULL && attached > 0)
@@ -898,6 +902,7 @@ create_msg_thread (gpointer thread_data)
        g_list_free (info->attachments_list);
        g_list_foreach (info->images_list, (GFunc) g_object_unref, NULL);
        g_list_free (info->images_list);
+       g_object_unref (info->header_pairs);
 
        if (info->callback) {
                CreateMsgIdleInfo *idle_info;
@@ -929,6 +934,7 @@ modest_mail_operation_create_msg (ModestMailOperation *self,
                                  TnyHeaderFlags priority_flags,
                                  const gchar *references,
                                  const gchar *in_reply_to,
+                                 TnyList *header_pairs,
                                  ModestMailOperationCreateMsgCallback callback,
                                  gpointer userdata)
 {
@@ -950,7 +956,8 @@ modest_mail_operation_create_msg (ModestMailOperation *self,
        g_list_foreach (info->attachments_list, (GFunc) g_object_ref, NULL);
        info->images_list = g_list_copy ((GList *) images_list);
        g_list_foreach (info->images_list, (GFunc) g_object_ref, NULL);
-       info->priority_flags = priority_flags;
+       info->priority_flags = 0 | priority_flags;
+       info->header_pairs = tny_list_copy (header_pairs);
 
        info->callback = callback;
        info->userdata = userdata;
@@ -1096,6 +1103,56 @@ end:
 }
 
 void
+modest_mail_operation_send_mail (ModestMailOperation *self,
+                                TnyTransportAccount *transport_account,
+                                TnyMsg *msg)
+{
+       TnySendQueue *send_queue = NULL;
+       ModestMailOperationPrivate *priv = NULL;
+
+       priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
+
+       if (!msg) {
+               priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
+               modest_mail_operation_notify_end (self);
+               return;
+       }
+
+       if (priv->error && priv->error->code != MODEST_MAIL_OPERATION_ERROR_FILE_IO) {
+               priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
+               modest_mail_operation_notify_end (self);
+               return;
+       }
+
+       /* Add message to send queue */
+       send_queue = TNY_SEND_QUEUE (modest_runtime_get_send_queue (transport_account, TRUE));
+       if (!TNY_IS_SEND_QUEUE(send_queue)) {
+               if (priv->error) {
+                       g_error_free (priv->error);
+                       priv->error = NULL;
+               }
+               g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR,
+                            MODEST_MAIL_OPERATION_ERROR_ITEM_NOT_FOUND,
+                            "modest: could not find send queue for account\n");
+               priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
+               modest_mail_operation_notify_end (self);
+               return;
+       } else {
+               SendNewMailHelper *helper = g_slice_new (SendNewMailHelper);
+               helper->mail_op = g_object_ref (self);
+               helper->notify = TRUE;
+
+               /* Add the msg to the queue. The callback will free
+                  the helper */
+               modest_tny_send_queue_set_requested_send_receive (MODEST_TNY_SEND_QUEUE (send_queue), 
+                                                                 FALSE);
+               tny_send_queue_add_async (send_queue, msg, send_mail_on_added_to_outbox, 
+                                         NULL, helper);
+       }
+
+}
+
+void
 modest_mail_operation_send_new_mail (ModestMailOperation *self,
                                     TnyTransportAccount *transport_account,
                                     TnyMsg *draft_msg,
@@ -1107,7 +1164,8 @@ modest_mail_operation_send_new_mail (ModestMailOperation *self,
                                     const GList *images_list,
                                     const gchar *references,
                                     const gchar *in_reply_to,
-                                    TnyHeaderFlags priority_flags)
+                                    TnyHeaderFlags priority_flags,
+                                    TnyList *header_pairs)
 {
        ModestMailOperationPrivate *priv = NULL;
        SendNewMailInfo *info;
@@ -1144,6 +1202,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,
+                                         header_pairs,
                                          modest_mail_operation_send_new_mail_cb, info);
 
 }
@@ -1375,6 +1434,7 @@ modest_mail_operation_save_to_drafts (ModestMailOperation *self,
                                      TnyHeaderFlags priority_flags,
                                      const gchar *references,
                                      const gchar *in_reply_to,
+                                     TnyList *header_pairs,
                                      SaveToDraftstCallback callback,
                                      gpointer user_data)
 {
@@ -1401,6 +1461,7 @@ modest_mail_operation_save_to_drafts (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,
+                                         header_pairs,
                                          modest_mail_operation_save_to_drafts_cb, info);
 }
 
@@ -1650,7 +1711,7 @@ inbox_refreshed_cb (TnyFolder *inbox,
        ModestMailOperationPrivate *priv;
        TnyIterator *new_headers_iter;
        GPtrArray *new_headers_array = NULL;
-       gint max_size, retrieve_limit, i;
+       gint max_size = G_MAXINT, retrieve_limit, i;
        ModestAccountMgr *mgr;
        ModestAccountRetrieveType retrieve_type;
        TnyList *new_headers = NULL;
@@ -1710,6 +1771,9 @@ inbox_refreshed_cb (TnyFolder *inbox,
        new_headers_array = g_ptr_array_new ();
        if (info->inbox_observer) {
                new_headers_iter = tny_list_create_iterator (((InternalFolderObserver *) info->inbox_observer)->new_headers);
+               if (!tny_iterator_is_done (new_headers_iter)) {
+                       modest_platform_emit_folder_updated_signal (info->account_name, tny_folder_get_id (TNY_FOLDER (inbox)));
+               }
                while (!tny_iterator_is_done (new_headers_iter)) {
                        TnyHeader *header = NULL;