+ info->account);
+
+ /* Frees */
+ g_object_unref (info->account);
+ g_object_unref (info->queue);
+ g_slice_free (GetHeadersInfo, info);
+}
+
+ModestTnySendQueue*
+modest_tny_send_queue_new (TnyCamelTransportAccount *account)
+{
+ ModestTnySendQueue *self = NULL;
+ ModestTnySendQueuePrivate *priv = NULL;
+ TnyList *headers = NULL;
+ GetHeadersInfo *info;
+
+ 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));
+
+ /* Set outbox and sentbox */
+ priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self);
+ priv->outbox = modest_tny_account_get_special_folder (TNY_ACCOUNT(account),
+ TNY_FOLDER_TYPE_OUTBOX);
+ priv->sentbox = modest_tny_account_get_special_folder (TNY_ACCOUNT(account),
+ TNY_FOLDER_TYPE_SENT);
+
+ /* NOTE that this could happen if there was not enough disk
+ space when the account was created */
+ if (!priv->outbox || !priv->sentbox) {
+ g_object_unref (self);
+ return NULL;
+ }
+
+ /* Connect signals to control when a msg is being or has been sent */
+ priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers,
+ G_OBJECT(self),
+ "msg-sending",
+ G_CALLBACK(_on_msg_start_sending),
+ NULL);
+ priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers,
+ G_OBJECT(self), "msg-sent",
+ G_CALLBACK(_on_msg_has_been_sent),
+ NULL);
+ priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers,
+ G_OBJECT(self), "error-happened",
+ G_CALLBACK(_on_msg_error_happened),
+ NULL);
+ priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers,
+ G_OBJECT (self), "queue-start",
+ G_CALLBACK (_on_queue_start),
+ NULL);
+ priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers,
+ G_OBJECT (self), "queue-stop",
+ G_CALLBACK (_on_queue_stop),
+ NULL);
+ priv->requested_send_receive = FALSE;
+
+ headers = tny_simple_list_new ();
+ info = g_slice_new0 (GetHeadersInfo);
+ info->account = g_object_ref (account);
+ info->queue = g_object_ref (self);
+ tny_folder_get_headers_async (priv->outbox, headers, TRUE,
+ new_queue_get_headers_async_cb,
+ NULL, info);