X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-mail-operation.c;h=45a545501926b510ded15872e5ab9192b470aa20;hp=51a48473f11835f07aa4e2c0cd769f09bba9141c;hb=0c33e62765906c36435deea78e477f47b045c6c4;hpb=daa2cb5b79a7cb90098903f010ee626950a96a7f diff --git a/src/modest-mail-operation.c b/src/modest-mail-operation.c index 51a4847..45a5455 100644 --- a/src/modest-mail-operation.c +++ b/src/modest-mail-operation.c @@ -388,6 +388,8 @@ void modest_mail_operation_execute_error_handler (ModestMailOperation *self) { ModestMailOperationPrivate *priv; + + g_return_if_fail (self && MODEST_IS_MAIL_OPERATION(self)); priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self); g_return_if_fail(priv->status != MODEST_MAIL_OPERATION_STATUS_SUCCESS); @@ -403,6 +405,9 @@ modest_mail_operation_get_type_operation (ModestMailOperation *self) { ModestMailOperationPrivate *priv; + g_return_val_if_fail (self && MODEST_IS_MAIL_OPERATION(self), + MODEST_MAIL_OPERATION_TYPE_UNKNOWN); + priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self); return priv->op_type; @@ -414,6 +419,9 @@ modest_mail_operation_is_mine (ModestMailOperation *self, { ModestMailOperationPrivate *priv; + g_return_val_if_fail (self && MODEST_IS_MAIL_OPERATION(self), + FALSE); + priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self); if (priv->source == NULL) return FALSE; @@ -425,7 +433,8 @@ modest_mail_operation_get_source (ModestMailOperation *self) { ModestMailOperationPrivate *priv; - g_return_val_if_fail (self, NULL); + g_return_val_if_fail (self && MODEST_IS_MAIL_OPERATION(self), + NULL); priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self); if (!priv) { @@ -477,8 +486,8 @@ modest_mail_operation_cancel (ModestMailOperation *self) { ModestMailOperationPrivate *priv; gboolean canceled = FALSE; - - g_return_val_if_fail (MODEST_IS_MAIL_OPERATION (self), FALSE); + + g_return_val_if_fail (self && MODEST_IS_MAIL_OPERATION (self), FALSE); priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self); @@ -513,8 +522,9 @@ modest_mail_operation_get_task_done (ModestMailOperation *self) { ModestMailOperationPrivate *priv; - g_return_val_if_fail (MODEST_IS_MAIL_OPERATION (self), 0); - + g_return_val_if_fail (self && MODEST_IS_MAIL_OPERATION(self), + 0); + priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self); return priv->done; } @@ -524,7 +534,8 @@ modest_mail_operation_get_task_total (ModestMailOperation *self) { ModestMailOperationPrivate *priv; - g_return_val_if_fail (MODEST_IS_MAIL_OPERATION (self), 0); + g_return_val_if_fail (self && MODEST_IS_MAIL_OPERATION(self), + 0); priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self); return priv->total; @@ -536,11 +547,9 @@ modest_mail_operation_is_finished (ModestMailOperation *self) ModestMailOperationPrivate *priv; gboolean retval = FALSE; - if (!MODEST_IS_MAIL_OPERATION (self)) { - g_warning ("%s: invalid parametter", G_GNUC_FUNCTION); - return retval; - } - + g_return_val_if_fail (self && MODEST_IS_MAIL_OPERATION(self), + FALSE); + priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self); if (priv->status == MODEST_MAIL_OPERATION_STATUS_SUCCESS || @@ -603,9 +612,9 @@ modest_mail_operation_send_mail (ModestMailOperation *self, ModestMailOperationPrivate *priv; SendMsgInfo *info; - g_return_if_fail (MODEST_IS_MAIL_OPERATION (self)); - g_return_if_fail (TNY_IS_TRANSPORT_ACCOUNT (transport_account)); - g_return_if_fail (TNY_IS_MSG (msg)); + g_return_if_fail (self && MODEST_IS_MAIL_OPERATION (self)); + g_return_if_fail (transport_account && TNY_IS_TRANSPORT_ACCOUNT (transport_account)); + g_return_if_fail (msg && TNY_IS_MSG (msg)); priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self); @@ -648,47 +657,67 @@ static void common_send_mail_operation_end (TnySendQueue *queue, TnyMsg *msg, SendMsgInfo *info) { - if (msg == info->msg) { - g_signal_handler_disconnect (queue, info->msg_sent_handler); - info->msg_sent_handler = 0; - g_signal_handler_disconnect (queue, info->error_happened_handler); - info->error_happened_handler = 0; - g_object_unref (info->msg); - modest_mail_operation_notify_end (info->mail_op); - g_object_unref (info->mail_op); - g_slice_free (SendMsgInfo, info); - } + g_signal_handler_disconnect (queue, info->msg_sent_handler); + g_signal_handler_disconnect (queue, info->error_happened_handler); + + g_object_unref (info->msg); + modest_mail_operation_notify_end (info->mail_op); + g_object_unref (info->mail_op); + + g_slice_free (SendMsgInfo, info); } static void send_mail_msg_sent_handler (TnySendQueue *queue, TnyHeader *header, TnyMsg *msg, guint nth, guint total, gpointer userdata) { - SendMsgInfo *info = (SendMsgInfo *) info; - - if (msg == info->msg) { + SendMsgInfo *info = (SendMsgInfo *) userdata; + TnyHeader *hdr1, *hdr2; + const char *msgid1, *msgid2; + hdr1 = tny_msg_get_header(msg); + hdr2 = tny_msg_get_header(info->msg); + msgid1 = tny_header_get_message_id(hdr1); + msgid2 = tny_header_get_message_id(hdr2); + if (msgid1 == NULL) msgid1 = "(null)"; + if (msgid2 == NULL) msgid2 = "(null)"; + + if (!strcmp (msgid1, msgid2)) { ModestMailOperationPrivate *priv = MODEST_MAIL_OPERATION_GET_PRIVATE (info->mail_op); priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS; + + common_send_mail_operation_end (queue, msg, info); } - - common_send_mail_operation_end (queue, msg, info); + g_object_unref(G_OBJECT(hdr1)); + g_object_unref(G_OBJECT(hdr2)); } static void send_mail_error_happened_handler (TnySendQueue *queue, TnyHeader *header, TnyMsg *msg, GError *error, gpointer userdata) { - SendMsgInfo *info = (SendMsgInfo *) info; - - if (msg == info->msg) { + SendMsgInfo *info = (SendMsgInfo *) userdata; + TnyHeader *hdr1, *hdr2; + hdr1 = tny_msg_get_header(msg); + hdr2 = tny_msg_get_header(info->msg); + const char *msgid1, *msgid2; + hdr1 = tny_msg_get_header(msg); + hdr2 = tny_msg_get_header(info->msg); + msgid1 = tny_header_get_message_id(hdr1); + msgid2 = tny_header_get_message_id(hdr2); + if (msgid1 == NULL) msgid1 = "(null)"; + if (msgid2 == NULL) msgid2 = "(null)"; + + if (!strcmp (msgid1, msgid2)) { ModestMailOperationPrivate *priv = MODEST_MAIL_OPERATION_GET_PRIVATE (info->mail_op); priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED; g_set_error (&(priv->error), MODEST_MAIL_OPERATION_ERROR, MODEST_MAIL_OPERATION_ERROR_OPERATION_CANCELED, "modest: send mail failed\n"); + + common_send_mail_operation_end (queue, msg, info); } - - common_send_mail_operation_end (queue, msg, info); + g_object_unref(G_OBJECT(hdr1)); + g_object_unref(G_OBJECT(hdr2)); } @@ -908,7 +937,8 @@ modest_mail_operation_send_new_mail (ModestMailOperation *self, priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self); priv->op_type = MODEST_MAIL_OPERATION_TYPE_SEND; priv->account = TNY_ACCOUNT (g_object_ref (transport_account)); - + priv->status = MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS; + /* Check parametters */ if (to == NULL) { /* Set status failed and set an error */ @@ -1248,7 +1278,7 @@ inbox_refreshed_cb (TnyFolder *inbox, GPtrArray *new_headers_array = NULL; gint max_size, retrieve_limit, i; ModestAccountMgr *mgr; - gchar *retrieve_type = NULL; + ModestAccountRetrieveType retrieve_type; TnyList *new_headers = NULL; gboolean headers_only; TnyTransportAccount *transport_account; @@ -1291,6 +1321,9 @@ 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; @@ -1301,8 +1334,7 @@ inbox_refreshed_cb (TnyFolder *inbox, /* Get per-account retrieval type */ retrieve_type = modest_account_mgr_get_retrieve_type (mgr, info->account_name); - headers_only = !g_ascii_strcasecmp (retrieve_type, MODEST_ACCOUNT_RETRIEVE_VALUE_HEADERS_ONLY); - g_free (retrieve_type); + headers_only = (retrieve_type == MODEST_ACCOUNT_RETRIEVE_HEADERS_ONLY); /* Order by date */ g_ptr_array_sort (new_headers_array, (GCompareFunc) compare_headers_by_date); @@ -1350,9 +1382,6 @@ inbox_refreshed_cb (TnyFolder *inbox, g_ptr_array_foreach (new_headers_array, (GFunc) g_object_unref, NULL); g_ptr_array_free (new_headers_array, FALSE); - /* Update the last updated key */ - modest_account_mgr_set_last_updated (mgr, tny_account_get_id (priv->account), time (NULL)); - send_mail: /* Send mails */ priv->done = 0; @@ -1550,9 +1579,9 @@ modest_mail_operation_update_account (ModestMailOperation *self, /* Get all folders and continue in the callback */ folders = tny_simple_list_new (); - tny_folder_store_get_folders_async (TNY_FOLDER_STORE (store_account), - folders, recurse_folders_async_cb, - NULL, NULL, info); + tny_folder_store_get_folders_async (TNY_FOLDER_STORE (store_account), + folders, recurse_folders_async_cb, + NULL, NULL, info); } /*