X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-mail-operation.c;h=02ae7076ff8d1503d684f6cef1351c04c12c2b1d;hp=3f0f98a2f5357b8038cdff84e601ff1c12a3919c;hb=30f857c62697eb8f26018c40aa98a23593501914;hpb=778ad5b3bcc7d9244900a0a801851fb796bab6d5 diff --git a/src/modest-mail-operation.c b/src/modest-mail-operation.c index 3f0f98a..02ae707 100644 --- a/src/modest-mail-operation.c +++ b/src/modest-mail-operation.c @@ -600,6 +600,35 @@ modest_mail_operation_clone_state (ModestMailOperation *self) /* ************************** SEND ACTIONS ************************* */ /* ******************************************************************* */ +static void +send_mail_on_added_to_outbox (TnySendQueue *send_queue, + gboolean cancelled, + TnyMsg *msg, + GError *err, + gpointer user_data) +{ + ModestMailOperationPrivate *priv; + ModestMailOperation *self; + + self = MODEST_MAIL_OPERATION (user_data); + priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self); + + if (cancelled || err) + goto end; + + if (err) { + g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR, + MODEST_MAIL_OPERATION_ERROR_SEND_QUEUE_ADD_ERROR, + "Error adding a msg to the send queue\n"); + priv->status = MODEST_MAIL_OPERATION_STATUS_FINISHED_WITH_ERRORS; + } else { + priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS; + } + end: + modest_mail_operation_notify_end (self); + g_object_unref (self); +} + void modest_mail_operation_send_mail (ModestMailOperation *self, TnyTransportAccount *transport_account, @@ -631,22 +660,15 @@ modest_mail_operation_send_mail (ModestMailOperation *self, "modest: could not find send queue for account\n"); priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED; modest_mail_operation_notify_end (self); - } else { - /* Add the msg to the queue */ modest_mail_operation_notify_start (self); - - tny_send_queue_add_async (send_queue, msg, NULL, NULL, NULL); - modest_tny_send_queue_set_requested_send_receive (MODEST_TNY_SEND_QUEUE (send_queue), FALSE); - - if (priv->error) { - priv->status = MODEST_MAIL_OPERATION_STATUS_FINISHED_WITH_ERRORS; - } else { - priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS; - } - modest_mail_operation_notify_end (self); + /* Add the msg to the queue. The callback will + finalize the mail operation */ + tny_send_queue_add_async (send_queue, msg, send_mail_on_added_to_outbox, + NULL, g_object_ref (self)); + modest_tny_send_queue_set_requested_send_receive (MODEST_TNY_SEND_QUEUE (send_queue), + FALSE); } - } @@ -1284,6 +1306,9 @@ inbox_refreshed_cb (TnyFolder *inbox, priv = MODEST_MAIL_OPERATION_GET_PRIVATE (info->mail_op); mgr = modest_runtime_get_account_mgr (); + /* Set the last updated as the current time, do it even if the inbox refresh failed */ + modest_account_mgr_set_last_updated (mgr, tny_account_get_id (priv->account), time (NULL)); + if (canceled || err) { priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED; if (err) @@ -1292,6 +1317,7 @@ inbox_refreshed_cb (TnyFolder *inbox, g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR, MODEST_MAIL_OPERATION_ERROR_OPERATION_CANCELED, "canceled"); + /* Notify the user about the error and then exit */ update_account_notify_user_and_free (info, NULL); return; @@ -1330,9 +1356,6 @@ inbox_refreshed_cb (TnyFolder *inbox, g_object_unref (info->inbox_observer); info->inbox_observer = NULL; - /* Update the last updated key, even if we don't have to get new headers */ - modest_account_mgr_set_last_updated (mgr, tny_account_get_id (priv->account), time (NULL)); - if (new_headers_array->len == 0) goto send_mail; @@ -2200,6 +2223,7 @@ modest_mail_operation_rename_folder (ModestMailOperation *self, void modest_mail_operation_get_msg (ModestMailOperation *self, TnyHeader *header, + gboolean progress_feedback, GetMsgAsyncUserCallback user_callback, gpointer user_data) { @@ -2221,10 +2245,14 @@ modest_mail_operation_get_msg (ModestMailOperation *self, priv->account = modest_tny_folder_get_account (TNY_FOLDER(folder)); /* Check for cached messages */ - if (tny_header_get_flags (header) & TNY_HEADER_FLAG_CACHED) - priv->op_type = MODEST_MAIL_OPERATION_TYPE_OPEN; - else - priv->op_type = MODEST_MAIL_OPERATION_TYPE_RECEIVE; + if (progress_feedback) { + if (tny_header_get_flags (header) & TNY_HEADER_FLAG_CACHED) + priv->op_type = MODEST_MAIL_OPERATION_TYPE_OPEN; + else + priv->op_type = MODEST_MAIL_OPERATION_TYPE_RECEIVE; + } else { + priv->op_type = MODEST_MAIL_OPERATION_TYPE_UNKNOWN; + } /* Create the helper */ helper = g_slice_new0 (GetMsgInfo); @@ -2247,6 +2275,7 @@ modest_mail_operation_get_msg (ModestMailOperation *self, state->total = 0; g_signal_emit (G_OBJECT (self), signals[PROGRESS_CHANGED_SIGNAL], 0, state, NULL); + g_slice_free (ModestMailOperationState, state); tny_folder_get_msg_async (folder, header, get_msg_async_cb, get_msg_status_cb, helper);