* Removed ModestGnomeInfoBar and ModestProgressBarWidget
[modest] / src / modest-tny-send-queue.c
index 1139eba..bf79501 100644 (file)
@@ -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 (TnySendQueue *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 (TnySendQueue *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;