- info = item->data;
-
- /* Keep in queue so that we remember that the opertion has failed */
- /* and was not just cancelled */
- if (err->code == TNY_SYSTEM_ERROR_CANCEL)
- info->status = MODEST_TNY_SEND_QUEUE_SUSPENDED;
- else
- 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);
+ /* Note that header could be NULL. Tinymail notifies about
+ generic send queue errors with this signal as well, and
+ those notifications are not bound to any particular header
+ or message */
+ if (header && TNY_IS_HEADER (header)) {
+ SendInfo *info = NULL;
+ GList *item = NULL;
+ gchar* msg_uid = NULL;
+
+ /* Get sending info (create new if it doesn not exist) */
+ msg_uid = modest_tny_send_queue_get_msg_id (header);
+ item = modest_tny_send_queue_lookup_info (MODEST_TNY_SEND_QUEUE (self),
+ msg_uid);
+
+ /* TODO: this should not happen (but it does), so the
+ problem should be located in the way we generate
+ the message uids */
+ if (!item) {
+ g_warning ("%s: could not find item with id '%s'", __FUNCTION__, msg_uid);
+ g_free(msg_uid);
+ return;
+ }
+
+ info = item->data;
+
+ /* Keep in queue so that we remember that the opertion has failed */
+ /* and was not just cancelled */
+ 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);