X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-tny-send-queue.c;h=b1f8560eb00e31bc843a9627dd4eb0bfdf48d7a8;hp=1139eba5534550598047dfeebadcdd715671d57c;hb=6dff75fc6a5d9515c03abb45d2f000b9eeacfbd4;hpb=a9c347489d676ecf1cb0a4ba30059432aeccee80 diff --git a/src/modest-tny-send-queue.c b/src/modest-tny-send-queue.c index 1139eba..b1f8560 100644 --- a/src/modest-tny-send-queue.c +++ b/src/modest-tny-send-queue.c @@ -70,6 +70,15 @@ static void _on_msg_error_happened (TnySendQueue *self, GError *err, gpointer user_data); +static void _on_queue_start (TnySendQueue *self, + gpointer user_data); + +static void modest_tny_send_queue_add_async (TnyCamelSendQueue *self, + TnyMsg *msg, + TnySendQueueAddCallback callback, + TnyStatusCallback status_callback, + gpointer user_data); + static TnyFolder* modest_tny_send_queue_get_outbox (TnySendQueue *self); static TnyFolder* modest_tny_send_queue_get_sentbox (TnySendQueue *self); @@ -181,7 +190,10 @@ modest_tny_send_queue_to_string (ModestTnySendQueue *self) } static void -_on_added_to_outbox (TnySendQueue *self, gboolean cancelled, TnyMsg *msg, GError *err, +_on_added_to_outbox (TnySendQueue *self, + gboolean cancelled, + TnyMsg *msg, + GError *err, gpointer user_data) { ModestTnySendQueuePrivate *priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE(self); @@ -195,7 +207,6 @@ _on_added_to_outbox (TnySendQueue *self, gboolean cancelled, TnyMsg *msg, GError header = tny_msg_get_header (msg); msg_id = modest_tny_send_queue_get_msg_id (header); -/* msg_id = tny_header_get_message_id (header); */ g_return_if_fail(msg_id != NULL); /* Put newly added message in WAITING state */ @@ -215,20 +226,6 @@ _on_added_to_outbox (TnySendQueue *self, gboolean cancelled, TnyMsg *msg, GError g_object_unref(G_OBJECT(header)); } -void -modest_tny_send_queue_add (ModestTnySendQueue *self, TnyMsg *msg, GError **err) -{ - g_return_if_fail (MODEST_IS_TNY_SEND_QUEUE(self)); - g_return_if_fail (TNY_IS_CAMEL_MSG(msg)); - - tny_camel_send_queue_add_async (TNY_CAMEL_SEND_QUEUE(self), - msg, - _on_added_to_outbox, - NULL, - NULL); -} - - static void _add_message (ModestTnySendQueue *self, TnyHeader *header) { @@ -277,6 +274,18 @@ _add_message (ModestTnySendQueue *self, TnyHeader *header) g_free(msg_uid); } +static void +modest_tny_send_queue_add_async (TnyCamelSendQueue *self, + TnyMsg *msg, + TnySendQueueAddCallback callback, + TnyStatusCallback status_callback, + gpointer user_data) +{ + /* Call the superclass passing our own callback */ + TNY_CAMEL_SEND_QUEUE_CLASS(parent_class)->add_async_func (self, msg, _on_added_to_outbox, NULL, NULL); +} + + static TnyFolder* modest_tny_send_queue_get_sentbox (TnySendQueue *self) { @@ -339,6 +348,7 @@ modest_tny_send_queue_class_init (ModestTnySendQueueClass *klass) parent_class = g_type_class_peek_parent (klass); gobject_class->finalize = modest_tny_send_queue_finalize; + TNY_CAMEL_SEND_QUEUE_CLASS(klass)->add_async_func = modest_tny_send_queue_add_async; TNY_CAMEL_SEND_QUEUE_CLASS(klass)->get_outbox_func = modest_tny_send_queue_get_outbox; TNY_CAMEL_SEND_QUEUE_CLASS(klass)->get_sentbox_func = modest_tny_send_queue_get_sentbox; klass->status_changed = NULL; @@ -403,6 +413,9 @@ modest_tny_send_queue_new (TnyCamelTransportAccount *account) g_signal_connect (G_OBJECT(self), "error-happened", G_CALLBACK(_on_msg_error_happened), NULL); + g_signal_connect (G_OBJECT (self), "queue-start", + G_CALLBACK (_on_queue_start), + NULL); /* Set outbox and sentbox */ priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self); @@ -543,9 +556,6 @@ _on_msg_has_been_sent (TnySendQueue *self, gchar *msg_id = NULL; GList *item; - /* TODO: Sometimes tinymail does not return a header, need to check */ - g_return_if_fail (TNY_IS_HEADER (header)); - priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self); /* Get message uid */ @@ -555,13 +565,20 @@ _on_msg_has_been_sent (TnySendQueue *self, /* Get status info */ item = modest_tny_send_queue_lookup_info (MODEST_TNY_SEND_QUEUE (self), msg_id); + + + /* TODO: note that item=NULL must not happen, but I found that + tinymail is issuing the message-sent signal twice, because + tny_camel_send_queue_update is called twice for each + message sent. This must be fixed in tinymail. Sergio */ + if (item) { + /* Remove status info */ + modest_tny_send_queue_info_free (item->data); + g_queue_delete_link (priv->queue, item); + priv->current = NULL; - /* Remove status info */ - modest_tny_send_queue_info_free (item->data); - g_queue_delete_link (priv->queue, item); - priv->current = NULL; - - modest_platform_information_banner (NULL, NULL, _("mcen_ib_message_sent")); + modest_platform_information_banner (NULL, NULL, _("mcen_ib_message_sent")); + } /* free */ g_free(msg_id); @@ -585,6 +602,7 @@ _on_msg_error_happened (TnySendQueue *self, msg_uid = modest_tny_send_queue_get_msg_id (header); item = modest_tny_send_queue_lookup_info (MODEST_TNY_SEND_QUEUE (self), msg_uid); + info = item->data; /* Keep in queue so that we remember that the opertion has failed */ @@ -603,6 +621,19 @@ _on_msg_error_happened (TnySendQueue *self, } static void +_on_queue_start (TnySendQueue *self, + gpointer data) +{ + ModestMailOperation *mail_op; + + mail_op = modest_mail_operation_new (NULL); + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + mail_op); + modest_mail_operation_run_queue (mail_op, MODEST_TNY_SEND_QUEUE (self)); + g_object_unref (mail_op); +} + +static void fill_list_of_caches (gpointer key, gpointer value, gpointer userdata) { GSList **send_queues = (GSList **) userdata;