X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-tny-send-queue.c;h=985e0a6e0b572aff94af77fc5f8d5ea05f9c7418;hb=ad355b444eaf19f17beef42a55993187ae81b361;hp=9fec6ce72205f08d2d42f3073a325ace1d961389;hpb=62f8285e03dc843ff4cdfd88e61860d73aed7c54;p=modest diff --git a/src/modest-tny-send-queue.c b/src/modest-tny-send-queue.c index 9fec6ce..985e0a6 100644 --- a/src/modest-tny-send-queue.c +++ b/src/modest-tny-send-queue.c @@ -439,6 +439,7 @@ new_queue_get_headers_async_cb (TnyFolder *folder, ModestTnySendQueue *self; TnyIterator *iter; GetHeadersInfo *info; + ModestMailOperation *wakeup_op; info = (GetHeadersInfo *) user_data; self = MODEST_TNY_SEND_QUEUE (info->queue); @@ -457,7 +458,10 @@ new_queue_get_headers_async_cb (TnyFolder *folder, } /* Reenable suspended items */ - modest_tny_send_queue_wakeup (self); + wakeup_op = modest_mail_operation_new (NULL); + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + wakeup_op); + modest_mail_operation_queue_wakeup (wakeup_op, MODEST_TNY_SEND_QUEUE (self)); /* Frees */ g_object_unref (iter); @@ -699,7 +703,7 @@ _on_msg_error_happened (TnySendQueue *self, g_free(msg_uid); return; } - + info = item->data; /* Keep in queue so that we remember that the opertion has failed */ @@ -707,37 +711,10 @@ _on_msg_error_happened (TnySendQueue *self, if (err->code == TNY_SYSTEM_ERROR_CANCEL) { info->status = MODEST_TNY_SEND_QUEUE_SUSPENDED; } else { - if (err->code == TNY_SERVICE_ERROR_CONNECT) { - TnyCamelTransportAccount* transport; - TnyTransportAccount *conn_specific; - - transport = tny_camel_send_queue_get_transport_account (TNY_CAMEL_SEND_QUEUE (self)); - if (transport) { - gchar *message; - ModestTnyAccountStore *acc_store; - const gchar *acc_name; - - acc_store = modest_runtime_get_account_store(); - acc_name = modest_tny_account_get_parent_modest_account_name_for_server_account (TNY_ACCOUNT (transport)); - conn_specific = (TnyTransportAccount *) - modest_tny_account_store_get_transport_account_for_open_connection (acc_store, acc_name); - if (conn_specific) { - message = g_strdup_printf (_("emev_ib_ui_smtp_server_invalid"), - tny_account_get_hostname (TNY_ACCOUNT (conn_specific))); - g_object_unref (conn_specific); - } else { - message = g_strdup_printf (_("emev_ib_ui_smtp_server_invalid"), - tny_account_get_hostname (TNY_ACCOUNT (transport))); - } - modest_platform_run_alert_dialog (message, FALSE); - g_free (message); - g_object_unref (transport); - } - } info->status = MODEST_TNY_SEND_QUEUE_FAILED; } priv->current = NULL; - + /* Notify status has changed */ g_signal_emit (self, signals[STATUS_CHANGED_SIGNAL], 0, info->msg_id, info->status); @@ -846,6 +823,24 @@ modest_tny_all_send_queues_get_msg_status (TnyHeader *header) return status; } +typedef struct _WakeupHelper { + ModestTnySendQueue *self; + ModestTnySendQueueWakeupFunc callback; + gpointer userdata; +} WakeupHelper; + +static void +wakeup_sync_cb (TnyFolder *self, gboolean cancelled, GError *err, gpointer userdata) +{ + WakeupHelper *helper = (WakeupHelper *) userdata; + + if (helper->callback) { + helper->callback (helper->self, cancelled, err, helper->userdata); + } + g_object_unref (helper->self); + g_slice_free (WakeupHelper, helper); +} + static void wakeup_get_headers_async_cb (TnyFolder *folder, gboolean cancelled, @@ -856,13 +851,19 @@ wakeup_get_headers_async_cb (TnyFolder *folder, ModestTnySendQueue *self; ModestTnySendQueuePrivate *priv; TnyIterator *iter; + WakeupHelper *helper = (WakeupHelper *) user_data; - self = MODEST_TNY_SEND_QUEUE (user_data); + self = MODEST_TNY_SEND_QUEUE (helper->self); priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self); if (cancelled || err) { g_debug ("Failed to wake up the headers of the send queue"); g_object_unref (self); + if (helper->callback) { + helper->callback (helper->self, cancelled, err, helper->userdata); + } + g_object_unref (helper->self); + g_slice_free (WakeupHelper, helper); return; } @@ -900,29 +901,34 @@ wakeup_get_headers_async_cb (TnyFolder *folder, } /* Make changes persistent on disk */ - tny_folder_sync_async (priv->outbox, FALSE, NULL, NULL, NULL); + tny_folder_sync_async (priv->outbox, FALSE, wakeup_sync_cb, NULL, helper); /* Frees */ g_object_unref (iter); g_object_unref (headers); - g_object_unref (self); } - void -modest_tny_send_queue_wakeup (ModestTnySendQueue *self) +modest_tny_send_queue_wakeup (ModestTnySendQueue *self, + ModestTnySendQueueWakeupFunc callback, + gpointer userdata) { ModestTnySendQueuePrivate *priv; TnyList *headers; + WakeupHelper *helper; g_return_if_fail (MODEST_IS_TNY_SEND_QUEUE (self)); - priv = MODEST_TNY_SEND_QUEUE_GET_PRIVATE (self); + helper = g_slice_new (WakeupHelper); + helper->self = g_object_ref (self); + helper->callback = callback; + helper->userdata = userdata; + headers = tny_simple_list_new (); tny_folder_get_headers_async (priv->outbox, headers, TRUE, wakeup_get_headers_async_cb, - NULL, g_object_ref (self)); + NULL, helper); } gboolean