+
+ g_return_val_if_fail (TNY_IS_CAMEL_TRANSPORT_ACCOUNT(account), NULL);
+
+ self = MODEST_TNY_SEND_QUEUE(g_object_new(MODEST_TYPE_TNY_SEND_QUEUE, NULL));
+
+ tny_camel_send_queue_set_transport_account (TNY_CAMEL_SEND_QUEUE(self),
+ account);
+
+ /* Connect signals to control when a msg is being or has been sent */
+ g_signal_connect (G_OBJECT(self), "msg-sending",
+ G_CALLBACK(_on_msg_start_sending),
+ NULL);
+ g_signal_connect (G_OBJECT(self), "msg-sent",
+ G_CALLBACK(_on_msg_has_been_sent),
+ NULL);
+ g_signal_connect (G_OBJECT(self), "error-happened",
+ G_CALLBACK(_on_msg_error_happened),
+ NULL);
+ return self;
+}
+
+
+
+void
+modest_tny_send_queue_try_to_send (ModestTnySendQueue* self)
+{
+ TnyIterator *iter = NULL;
+ TnyFolder *outbox = NULL;
+ TnyList *headers = tny_simple_list_new ();
+ TnyHeader *header = NULL;
+ GError *err = NULL;
+
+ outbox = modest_tny_send_queue_get_outbox (TNY_SEND_QUEUE(self));
+ if (!outbox)
+ return;
+
+ tny_folder_get_headers (outbox, headers, TRUE, &err);
+ if (err != NULL)
+ goto frees;
+
+ iter = tny_list_create_iterator (headers);
+ while (!tny_iterator_is_done (iter)) {
+ header = TNY_HEADER (tny_iterator_get_current (iter));
+ if (header) {
+ _add_message (self, header);
+ g_object_unref (header);
+ }
+
+ tny_iterator_next (iter);
+ }
+
+ /* Flush send queue */
+ tny_camel_send_queue_flush (TNY_CAMEL_SEND_QUEUE(self));
+
+ frees:
+ if (headers != NULL)
+ g_object_unref (G_OBJECT (headers));
+ if (outbox != NULL)
+ g_object_unref (G_OBJECT (outbox));
+ if (iter != NULL)
+ g_object_unref (iter);
+}
+
+gboolean
+modest_tny_send_queue_msg_is_being_sent (ModestTnySendQueue* self,
+ const gchar *msg_id)
+{
+ ModestTnySendQueueStatus status;
+
+ g_return_val_if_fail (msg_id != NULL, FALSE);
+
+ status = modest_tny_send_queue_get_msg_status (self, msg_id);
+ return status == MODEST_TNY_SEND_QUEUE_SENDING;
+}
+
+gboolean
+modest_tny_send_queue_sending_in_progress (ModestTnySendQueue* self)
+{